<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pttlink.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bryan</id>
	<title>&quot;PTTLink Wiki&quot; - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pttlink.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bryan"/>
	<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/wiki/Special:Contributions/Bryan"/>
	<updated>2026-06-02T16:29:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Building_Reliable_Systems&amp;diff=2375</id>
		<title>Building Reliable Systems</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Building_Reliable_Systems&amp;diff=2375"/>
		<updated>2021-01-04T13:13:38Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While everyone wants to get a cheap Raspberry Pi or old computer and install ASL on it to make a &amp;quot;junk box&amp;quot; linking repeater controller, others want something they can put at a site for years without needing to worry about it.  These users are less concerned about price, as their sites may be inaccessible for good parts of the year.  Or like myself, simply not have the time to go fix it when it breaks.&lt;br /&gt;
&lt;br /&gt;
Reliability of the controller/install falls into two major segments, hardware and operations.  Hardware is the choice of system parts and operations comes down to how you monitor and maintain it.&lt;br /&gt;
&lt;br /&gt;
= Hardware = &lt;br /&gt;
&lt;br /&gt;
ASL can install on intel/amd based servers or on arm (Raspberry PI 3/4), and each has it's use.  RPi based servers typically are used for a single node, and work best at sites which are easy to access.  RPi is cheap and if it fails, it can be replaced for under 100 USD.  Intel based servers tend to be in a 19&amp;quot; rack mount form factor, give the ability to use real SAS or SATA SSD's and have out of band management options.  These servers may optionally support the Quad Port pciradio interface card.  This card is basically a 4 port simple usb interface, but designed to slot in a PCI bus.  &lt;br /&gt;
&lt;br /&gt;
Intel servers are a great choice when you need to support more than one node per server or will be doing lots of linking.  The newer RPi4 has blured these lines a bit due to 4 or 8 GiByte ram options, and impressive SMP clock speeds. &lt;br /&gt;
&lt;br /&gt;
== Intel ==&lt;br /&gt;
&lt;br /&gt;
== RPi ==&lt;br /&gt;
&lt;br /&gt;
== storage ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Operations =&lt;br /&gt;
&lt;br /&gt;
== monitoring ==&lt;br /&gt;
&lt;br /&gt;
== out of band access ==&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Building_Reliable_Systems&amp;diff=2356</id>
		<title>Building Reliable Systems</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Building_Reliable_Systems&amp;diff=2356"/>
		<updated>2021-01-04T04:41:04Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Created page with &amp;quot;While everyone wants to get a cheap Raspberry Pi or old computer and install ASL on it to make a &amp;quot;junk box&amp;quot; linking repeater controller, others want something they can put at...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While everyone wants to get a cheap Raspberry Pi or old computer and install ASL on it to make a &amp;quot;junk box&amp;quot; linking repeater controller, others want something they can put at a site for years without needing to worry about it.  These users are less concerned about price, as their sites may be inaccessible for good parts of the year.  Or like myself, simply not have the time to go fix it when it breaks.&lt;br /&gt;
&lt;br /&gt;
Reliability of the controller/install falls into two major segments, hardware and operations.  Hardware is the choice of system parts and operations comes down to how you monitor and maintain it.&lt;br /&gt;
&lt;br /&gt;
= Hardware = &lt;br /&gt;
&lt;br /&gt;
ASL can install on intel/amd based servers or on arm (Raspberry PI 3/4), and each has it's use.  &lt;br /&gt;
&lt;br /&gt;
== intel ==&lt;br /&gt;
&lt;br /&gt;
== RPI ==&lt;br /&gt;
&lt;br /&gt;
== storage ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Operations =&lt;br /&gt;
&lt;br /&gt;
== monitoring ==&lt;br /&gt;
&lt;br /&gt;
== out of band access ==&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=DNS_Servers&amp;diff=2033</id>
		<title>DNS Servers</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=DNS_Servers&amp;diff=2033"/>
		<updated>2020-12-13T02:50:53Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* SRV record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Infrastructure]]&lt;br /&gt;
&lt;br /&gt;
ASL utilizes DNS servers based on powerdns with a mysql backend.  &lt;br /&gt;
&lt;br /&gt;
These DNS servers support the following:&lt;br /&gt;
* AllStarlink.org DNS authoritative&lt;br /&gt;
* registration server redundancy &lt;br /&gt;
* DNS lookup for nodes information&lt;br /&gt;
&lt;br /&gt;
= Authoritative DNS servers =  &lt;br /&gt;
&lt;br /&gt;
The authoritative DNS server runs on caustic-sea.allstarlink.org with the backend in the distributed database.&lt;br /&gt;
&lt;br /&gt;
DNSSEC was enabled on all domains and trust is expanded to all sub servers.  This is currently broken.&lt;br /&gt;
&lt;br /&gt;
Secondary DNS is very important and is provided by several DNS servers.  This is very important as if the database is hard down in SEA, the primary DNS will be offline.  With the secondary servers online DNS will continue to work, and NMS requires DNS for the allstarlink.org zone.&lt;br /&gt;
&lt;br /&gt;
= regsvcs.allstarlink.org = &lt;br /&gt;
&lt;br /&gt;
This Zone is served by the registration servers, and is pulled directly from the database.  There is no secondary on these zones, just the primary DNS servers on the registration servers.&lt;br /&gt;
&lt;br /&gt;
The redundancy of registration is handled by a TTL of 120 seconds on all the records.  We've added another field in the 'records' table 'UnixSeconds' which is NULL by default, but updated by the heartbeat health check scripts on the servers.  If the heartbeat script detects the DB or connectivity down at a site, it will shut down that server and stop updating the DNS UnixSeconds.  &lt;br /&gt;
&lt;br /&gt;
On the DNS server we have modified the default query for a lookup to: &lt;br /&gt;
&lt;br /&gt;
 gmysql-basic-query=SELECT content,ttl,prio,type,domain_id,disabled,name,auth FROM records WHERE disabled=0 AND (UnixSeconds is NULL OR UnixSeconds &amp;gt; (UNIX_TIMESTAMP() - 120)) and type=? and name=?&lt;br /&gt;
&lt;br /&gt;
This will only return a record if UnixSeconds is Null or has been updated in the last 120 seconds.  &lt;br /&gt;
&lt;br /&gt;
If the node loses connectivity, it will be timed out of DNS due to this in 120 seconds.  This is a &amp;quot;dead-man switch&amp;quot; function which will enable losing any one node in the cluster.&lt;br /&gt;
&lt;br /&gt;
'''register.allstarlink.org''' is a CNAME to '''register.regscvs.allstarlink.org''' under this.   The node list servers are under this as well as '''node[1-4].allstarllink.org'''  CNAME '''nodes.regsvcs.allstarlink.org&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
= DNS node lookup = &lt;br /&gt;
&lt;br /&gt;
nodes.allstarlink.org is delegated to a DNS running on the db servers.  The users_Nodes table has a trigger which is run and creates entries/edits them on the records table in the 'allstar' database.  This populates a SRV, TXT and A record for every node in the system when it's updated.  The trigger has been optimized and has little to no preformance impact on the registration process.  &lt;br /&gt;
&lt;br /&gt;
Note that servers not in nodes list can appear in DNS, there is no ageing out of entries in DNS.  It's up to the server to know it's registered. &lt;br /&gt;
&lt;br /&gt;
== SRV record ==&lt;br /&gt;
_iax._srv.&amp;lt;nodenumber&amp;gt;.allstarlink.org. will return for a node as follows:&lt;br /&gt;
&lt;br /&gt;
 _iax._udp.50000.nodes.allstarlink.org. 30 IN SRV 10 10 4569 50000.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
where 4569 is the IAX port and then it will do a A lookup on 50000.nodes.allstarlink.org. for the IP.&lt;br /&gt;
&lt;br /&gt;
A remote base will be returned like:&lt;br /&gt;
&lt;br /&gt;
 _iax._udp.50000.nodes.allstarlink.org. 30 IN SRV 10 10 4569 50000.remotebase.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
== A record ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nodenumber&amp;gt;.nodes.allstarlink.org. and &amp;lt;nodenumber&amp;gt;.remotebase.nodes.allstarlink.org. will return the IP address of the IAX server or the proxy IP if defined. &lt;br /&gt;
&lt;br /&gt;
== TXT Record == &lt;br /&gt;
&lt;br /&gt;
The TXT record is used for debugging purposes with a query below:&lt;br /&gt;
&lt;br /&gt;
 TXT &amp;lt;nodenumber&amp;gt;.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
This will return:&lt;br /&gt;
 &amp;quot;NN=50000&amp;quot; &amp;quot;RT=2019-02-28 18:41:29&amp;quot; &amp;quot;RB=0&amp;quot; &amp;quot;IP=44.98.248.144&amp;quot; &amp;quot;PIP=&amp;quot; &amp;quot;PT=4569&amp;quot; &amp;quot;RH=register-fnt&amp;quot;&lt;br /&gt;
 NN is node number&lt;br /&gt;
 RT is the last update registration time&lt;br /&gt;
 RB is 0 for node is not a remote base, RB is 1 if it is a remote base&lt;br /&gt;
 IP is the IP address of the node&lt;br /&gt;
 PIP is the proxy IP of the node if set&lt;br /&gt;
 PT is the port&lt;br /&gt;
 RH is the registration server the node last registered to.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
Until very recently some of the ASL powerdns servers were configured (as a joke) to return '''Microsoft DNS 6.1.7600 (1DB04228)''' for their version.&lt;br /&gt;
&lt;br /&gt;
If you are a research organization, registrar, ISP, or other individual or entity looking for servers vulnerable to CVE-2020-1350 -- &lt;br /&gt;
&lt;br /&gt;
'''''please stop contacting us about how you think our DNS servers may be vulnerable to this CVE.'''''  They are not.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:Bryan&amp;diff=2010</id>
		<title>User:Bryan</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:Bryan&amp;diff=2010"/>
		<updated>2020-11-15T21:31:57Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm Bryan Fields, W9CR and have been an active ham since 1995.&lt;br /&gt;
&lt;br /&gt;
I've been somewhat involved with Allstarlink since 2005 when I got some of the first PCI Radio cards from Jim Dixon and Steve Rodgers.  Back then it was app_rpt and we started the first mailing list for it on our list server at Illiana.net.  &lt;br /&gt;
&lt;br /&gt;
I was involved with the infrastructure/IT needs to keep ASL online and working prior to the board going crazy.  &lt;br /&gt;
&lt;br /&gt;
If you want more information on how the Board of directors have fucked everything up, [https://wiki.w9cr.net/index.php/AllStarLink,_Inc. please check out my pages here].&lt;br /&gt;
&lt;br /&gt;
I enjoy developing interface circuits for surplus base station equipment, and have made some extensive works around the Motorola Quantar and Spectra Engineering MX800.&lt;br /&gt;
&lt;br /&gt;
I'm also the only non-callsign user.  I really should change this, but this was the first test account I made.  &lt;br /&gt;
&lt;br /&gt;
I was sad to hear of Jim Dixon's passing in late 2016, but I do know he would be happy ASL is living on.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=VPN&amp;diff=2009</id>
		<title>VPN</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=VPN&amp;diff=2009"/>
		<updated>2020-11-15T21:28:11Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Other */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;clear:both; position:relative; box-sizing:border-box; width:100%; margin:1.2em 0 6px; min-width:47em; border:2pm solid #ddd; background-color:#ebebeb; color:#000; white-space:nowrap; text-align:center; font-size:18px;&amp;quot;&amp;gt;THIS ARTICLE IS A WORK IN PROGRESS AND IS STILL BEING EDITED BY THE AUTHOR&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= VPN = &lt;br /&gt;
The following contains information on how to setup a Virtual Private Network (VPN) connection using various popular packages. &lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Information on how to setup IPSEC tunnels.&lt;br /&gt;
&lt;br /&gt;
=== strongSwan to MikroTik ===&lt;br /&gt;
Use the following configurations to connect a system running stongSwan&amp;lt;ref&amp;gt;strongSwan Official Site [https://www.strongswan.org/]&amp;lt;/ref&amp;gt; to a MikroTik&amp;lt;ref&amp;gt;MikroTik Official Site [https://mikrotik.com/]&amp;lt;/ref&amp;gt; device using IPSEC.&lt;br /&gt;
&lt;br /&gt;
==== strongSwan config ====&lt;br /&gt;
The following configuration will work on FreeBSD or Linux systems with strongSwan installed.&lt;br /&gt;
&lt;br /&gt;
''Note:  You can use this config to connect two non-MikroTik systems as well.  Just replicate the config below for each system you wish to connect.''&lt;br /&gt;
&lt;br /&gt;
=====ipsec.conf=====&lt;br /&gt;
/etc/ipsec.conf:&lt;br /&gt;
&lt;br /&gt;
   conn &amp;lt;name&amp;gt;&lt;br /&gt;
             authby=secret&lt;br /&gt;
             auto=route&lt;br /&gt;
             keyexchange=ike&lt;br /&gt;
             left=&amp;lt;your local IP&amp;gt;&lt;br /&gt;
             right=&amp;lt;remote IP of Mikrotik system&amp;gt;&lt;br /&gt;
             leftikeport=500&lt;br /&gt;
             rightikeport=500&lt;br /&gt;
             type=transport&lt;br /&gt;
             ike=aes256-sha1-modp1024!&lt;br /&gt;
             esp=aes256-sha1!&lt;br /&gt;
             dpddelay=5&lt;br /&gt;
             dpdtimeout=20&lt;br /&gt;
             dpdaction=clear&lt;br /&gt;
&lt;br /&gt;
=====ipsec.secrets=====&lt;br /&gt;
/etc/ipsec.secrets:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;your local IP&amp;gt; &amp;lt;remote IP of Mikrotik system&amp;gt; :  PSK &amp;quot;&amp;lt;Put your preshared key here&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== MikroTik Config ====&lt;br /&gt;
&lt;br /&gt;
The following config is best done from the terminal on a MikroTik device.&lt;br /&gt;
&lt;br /&gt;
''Note:  You can use the following config to connect two MikroTik system.  Just replicate the config below on each system you wish to connect.''&lt;br /&gt;
&lt;br /&gt;
  /ip ipsec policy&lt;br /&gt;
  add src-address=0.0.0.0/0 dst-address=&amp;lt;remote IP of strongswan system&amp;gt; proposal=ike2 ipsec-protocols=esp&lt;br /&gt;
  &lt;br /&gt;
  /ip ipsec proposal&lt;br /&gt;
  add name=&amp;quot;ike2&amp;quot; auth-algorithms=sha256,sha1 enc-algorithms=aes-256-cbc,aes-128-cbc lifetime=30m pfs-group=none&lt;br /&gt;
  &lt;br /&gt;
  /ip ipsec peer&lt;br /&gt;
  add name=&amp;quot;&amp;lt;name of strongswan system&amp;gt;&amp;quot; address=&amp;lt;local IP&amp;gt; profile=ike2 exchange-mode=main send-initial-contact=yes&lt;br /&gt;
  &lt;br /&gt;
  /ip ipsec identity&lt;br /&gt;
  add peer=&amp;lt;remote IP of strongswan system&amp;gt; auth-method=pre-shared-key secret=&amp;quot;&amp;lt;Put your preshared key here&amp;gt;&amp;quot; generate-policy=no&lt;br /&gt;
  &lt;br /&gt;
  /ip ipsec profile&lt;br /&gt;
  add name=&amp;quot;ike2&amp;quot; hash-algorithm=sha1 enc-algorithm=aes-256,aes-192,aes-128,3des,des dh-group=modp2048,modp1024 lifetime=8h proposal-check=obey nat-traversal=no dpd-interval=2m dpd-maximum-failures=5&lt;br /&gt;
&lt;br /&gt;
== OpenVPN ==&lt;br /&gt;
Information on OpenVPN is available from https://openvpn.net/&amp;lt;ref&amp;gt;OpenVPN Official Site [https://openvpn.net/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TINC ==&lt;br /&gt;
Tinc is an open-source, self-routing, mesh networking protocol, used for compressed, encrypted, virtual private networks.&lt;br /&gt;
&lt;br /&gt;
Tinc is available for FreeBSD, OpenBSD, NetBSD, Dragonfly BSD, Mac OS X, Linux, Microsoft Windows, Solaris, IOS (jailbroken only), and Android with full support for IPv6.&lt;br /&gt;
&lt;br /&gt;
You can download tinc for *nix and Windows systems from https://www.tinc-vpn.org/&amp;lt;ref&amp;gt;Tinc-vpn Official Site [https://www.tinc-vpn.org/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tinc website includes many examples on common setups.  They can be found at https://www.tinc-vpn.org/examples/&lt;br /&gt;
&lt;br /&gt;
=== Standard tinc setup ===&lt;br /&gt;
Tinc can be setup in a mesh network with multiple systems.  &lt;br /&gt;
&lt;br /&gt;
''Note:  You can setup tinc with just two systems using these instructions and adjusting the steps accordingly.''&lt;br /&gt;
&lt;br /&gt;
For this setup we will have three hosts called Server 1, Server 2, and Server 3.  The following is a brief synopsis of the network config for each:&lt;br /&gt;
&lt;br /&gt;
[[File:Tinc Mesh Network Diagram 1.png|left|thumb|427x427px|Tinc Mesh Network Example]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''VPN NAME:  NoMoreSecrets'''&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;'''SERVER 1:'''&lt;br /&gt;
    public ip:    1.1.1.100&lt;br /&gt;
    vpn ip:       10.0.0.1&lt;br /&gt;
    connects to:  server 2, server 3&lt;br /&gt;
&lt;br /&gt;
'''SERVER 2:'''&lt;br /&gt;
    public ip:    1.1.2.100&lt;br /&gt;
    vpn ip:       10.0.0.2&lt;br /&gt;
    connects to:  server 1, server 3&lt;br /&gt;
&lt;br /&gt;
'''SERVER 3:'''&lt;br /&gt;
    public ip:    1.1.3.100&lt;br /&gt;
    vpn ip:       10.0.0.3&lt;br /&gt;
    connects to:  server 1, server 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following directory tree will be present on all three hosts for this setup:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc&lt;br /&gt;
└── tinc&lt;br /&gt;
    └── NoMoreSecrets&lt;br /&gt;
        ├── hosts&lt;br /&gt;
        │   ├── server1&lt;br /&gt;
        │   ├── server2&lt;br /&gt;
        │   └── server3&lt;br /&gt;
        ├── rsa_key.priv&lt;br /&gt;
        ├── tinc.conf&lt;br /&gt;
        ├── tinc-down&lt;br /&gt;
        └── tinc-up&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Individual node setup and configuration====&lt;br /&gt;
All servers used in this example will be running Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
=====Server1=====&lt;br /&gt;
* Install tinc&lt;br /&gt;
    apt install tinc -y&lt;br /&gt;
&lt;br /&gt;
* Create directories&lt;br /&gt;
    mkdir -p /etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
&lt;br /&gt;
Create the following files:&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/hosts/server1:&lt;br /&gt;
    Address = 1.1.1.100&lt;br /&gt;
    Subnet = 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc.conf:&lt;br /&gt;
    Name = server1&lt;br /&gt;
    Interface = tun0&lt;br /&gt;
    AddressFamily = ipv4&lt;br /&gt;
    ConnectTo = server2&lt;br /&gt;
    ConnectTo = server3&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc-up:&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip link set $INTERFACE up&lt;br /&gt;
    ip addr add 10.0.0.1/32 dev $INTERFACE&lt;br /&gt;
    ip route add 10.0.0.0/24 dev $INTERFACE&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc-down:&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip route del 10.0.0.0/24 dev $INTERFACE&lt;br /&gt;
    ip addr del 10.0.0.1/32 dev $INTERFACE&lt;br /&gt;
    ip link set $INTERFACE down&lt;br /&gt;
&lt;br /&gt;
=====Server2=====&lt;br /&gt;
* Install tinc&lt;br /&gt;
    apt install tinc -y&lt;br /&gt;
&lt;br /&gt;
* Create directories&lt;br /&gt;
    mkdir -p /etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
&lt;br /&gt;
Create the following files:&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/hosts/server2:&lt;br /&gt;
    Address = 1.1.2.100&lt;br /&gt;
    Subnet = 10.0.0.2&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc.conf:&lt;br /&gt;
    Name = server2&lt;br /&gt;
    Interface = tun0&lt;br /&gt;
    AddressFamily = ipv4&lt;br /&gt;
    ConnectTo = server1&lt;br /&gt;
    ConnectTo = server3&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc-up:&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip link set $INTERFACE up&lt;br /&gt;
    ip addr add 10.0.0.2/32 dev $INTERFACE&lt;br /&gt;
    ip route add 10.0.0.0/24 dev $INTERFACE&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc-down:&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip route del 10.0.0.0/24 dev $INTERFACE&lt;br /&gt;
    ip addr del 10.0.0.2/32 dev $INTERFACE&lt;br /&gt;
    ip link set $INTERFACE down&lt;br /&gt;
&lt;br /&gt;
=====Server3=====&lt;br /&gt;
* Install tinc&lt;br /&gt;
    apt install tinc -y&lt;br /&gt;
&lt;br /&gt;
* Create directories&lt;br /&gt;
    mkdir -p /etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
&lt;br /&gt;
Create the following files:&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/hosts/server3:&lt;br /&gt;
    Address = 1.1.3.100&lt;br /&gt;
    Subnet = 10.0.0.3&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc.conf:&lt;br /&gt;
    Name = server3&lt;br /&gt;
    Interface = tun0&lt;br /&gt;
    AddressFamily = ipv4&lt;br /&gt;
    ConnectTo = server1&lt;br /&gt;
    ConnectTo = server2&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc-up:&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip link set $INTERFACE up&lt;br /&gt;
    ip addr add 10.0.0.3/32 dev $INTERFACE&lt;br /&gt;
    ip route add 10.0.0.0/24 dev $INTERFACE&lt;br /&gt;
&lt;br /&gt;
* /etc/tinc/NoMoreSecrets/tinc-down:&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip route del 10.0.0.0/24 dev $INTERFACE&lt;br /&gt;
    ip addr del 10.0.0.3/32 dev $INTERFACE&lt;br /&gt;
    ip link set $INTERFACE down&lt;br /&gt;
&lt;br /&gt;
=====Create keypair=====&lt;br /&gt;
* On all servers create public/private keypair with:&lt;br /&gt;
    tincd -n NoMoreSecrets -K4096&lt;br /&gt;
&lt;br /&gt;
=====Synchronize host files=====&lt;br /&gt;
* Synchronize host files with public keys between all three servers with rsync:&lt;br /&gt;
&lt;br /&gt;
* From Server1:&lt;br /&gt;
    rsync -avz /etc/tinc/NoMoreSecrets/hosts/ server2:/etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
    rsync -avz /etc/tinc/NoMoreSecrets/hosts/ server3:/etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
&lt;br /&gt;
* From Server2:&lt;br /&gt;
    rsync -avz /etc/tinc/NoMoreSecrets/hosts/ server1:/etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
    rsync -avz /etc/tinc/NoMoreSecrets/hosts/ server3:/etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
&lt;br /&gt;
* From Server3:&lt;br /&gt;
    rsync -avz /etc/tinc/NoMoreSecrets/hosts/ server1:/etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
    rsync -avz /etc/tinc/NoMoreSecrets/hosts/ server2:/etc/tinc/NoMoreSecrets/hosts/&lt;br /&gt;
&lt;br /&gt;
* On all servers set the executable bit on the tinc-up and tinc-down scripts&lt;br /&gt;
    chmod +x /etc/tinc/NoMoreSecrets/tinc-up&lt;br /&gt;
    chmod +x /etc/tinc/NoMoreSecrets/tinc-down&lt;br /&gt;
&lt;br /&gt;
=====Start tinc=====&lt;br /&gt;
* On all servers enable and start tinc&lt;br /&gt;
    systemctl enable tinc@NoMoreSecrets&lt;br /&gt;
    systemctl start tinc@NoMoreSecrets&lt;br /&gt;
&lt;br /&gt;
Once tinc is up and running on all three servers you should be able to communicate over the 10.0.0.0/24 network. &lt;br /&gt;
&lt;br /&gt;
Since this is a mesh network, if direct communication between two nodes drops, tinc will route all traffic through the remaining node until direct communication is restored.&lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
# Check tinc logs to see what the error shown is.  Refer to official documentation at https://www.tinc-vpn.org/docs/&lt;br /&gt;
# Check firewall on both hosts to make sure port 655 is being accepted.&lt;br /&gt;
# Check IP on Address line of hosts to ensure they are correct.&lt;br /&gt;
# Check IP on Subnet line of hosts files to ensure they are correct.&lt;br /&gt;
&lt;br /&gt;
=== Simplified tinc 1.1 Windows setup ===&lt;br /&gt;
Examples on how to setup tinc 1.1 on Windows as either a server or client.&lt;br /&gt;
&lt;br /&gt;
==== Server side config ====&lt;br /&gt;
# Download tinc&lt;br /&gt;
# Install tinc&lt;br /&gt;
# Open command prompt and type the following:&lt;br /&gt;
    cd &amp;quot;C:\Program Files\tinc&amp;quot;&lt;br /&gt;
    tinc -n vpn init master&lt;br /&gt;
    tinc -n vpn add subnet 10.0.1.1&lt;br /&gt;
    tinc -n vpn add address=public.domain-or-ip&lt;br /&gt;
    cd tap-win64&lt;br /&gt;
    addtap.bat&lt;br /&gt;
    netsh interface ipv4 show interfaces      (Note disconnected interface.  May be called Ethernet 2)&lt;br /&gt;
    netsh interface set interface name = &amp;quot;Ethernet 2&amp;quot; newname = &amp;quot;tinc&amp;quot;&lt;br /&gt;
    netsh interface ip set address &amp;quot;tinc&amp;quot; static 10.0.1.1  255.255.255.0&lt;br /&gt;
    netsh interface ipv4 show config          (Should create a tinc interface with IP and subnet)&lt;br /&gt;
    cd ..&lt;br /&gt;
&lt;br /&gt;
To start tinc:&lt;br /&gt;
    tincd -n vpn&lt;br /&gt;
&lt;br /&gt;
To invite clients:&lt;br /&gt;
    tinc -n vpn invite client1&lt;br /&gt;
&lt;br /&gt;
==== Client side config ====&lt;br /&gt;
# Download tinc&lt;br /&gt;
# Install tinc&lt;br /&gt;
# Open command prompt and type the following:&lt;br /&gt;
    cd &amp;quot;C:\Program Files\tinc&amp;quot;&lt;br /&gt;
    tinc join &amp;lt;invite-url&amp;gt;&lt;br /&gt;
    tinc -n vpn add subnet 10.0.1.2&lt;br /&gt;
    cd tap-win64&lt;br /&gt;
    addtap.bat&lt;br /&gt;
    netsh interface ipv4 show interfaces      (Note disconnected interface.  May be called Ethernet 2)&lt;br /&gt;
    netsh interface set interface name = &amp;quot;Ethernet 2&amp;quot; newname = &amp;quot;tinc&amp;quot;&lt;br /&gt;
    netsh interface ip set address &amp;quot;tinc&amp;quot; static 10.0.1.2  255.255.255.0&lt;br /&gt;
    cd ..&lt;br /&gt;
&lt;br /&gt;
To test connection:&lt;br /&gt;
    tincd -n vpn -D -d3&lt;br /&gt;
&lt;br /&gt;
To run tinc as service:&lt;br /&gt;
    tincd -n vpn&lt;br /&gt;
&lt;br /&gt;
==== Notes ====&lt;br /&gt;
&lt;br /&gt;
Tinc will automatically register itself as a service when started without -D or --no-detach option.&lt;br /&gt;
&lt;br /&gt;
Calling tinc with -k or --kill option will cause it to automatically unregister itself.&lt;br /&gt;
&lt;br /&gt;
== SoftEther ==&lt;br /&gt;
SoftEther VPN is an Open-Source Free Cross-platform Multi-protocol VPN Program, that is an academic project from the University of Tsukuba in Japan.&lt;br /&gt;
&lt;br /&gt;
You can download SoftEther for FreeBSD, Linux, Mac, Solaris, and Windows from https://www.softether.org/&amp;lt;ref&amp;gt;SoftEther VPN Official Site [https://www.softether.org/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*SSL-VPN tunnelling on HTTPS to pass though NAT and firewalls&lt;br /&gt;
*Revolutionary VPN over ICMP and VPN over DNS featuers&lt;br /&gt;
*Ethernet-bridging (L2) and IP-routing (L3) over VPN.&lt;br /&gt;
*Embedded dynamic-DNS and NAT-traversal&lt;br /&gt;
*SSL-VPN (HTTPS) and support for 6 major VPN protocols: [http://www.softether.org/1-features/1._Ultimate_Powerful_VPN_Connectivity#Support_OpenVPN_Protocol OpenVPN], [http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server IPSEC], [http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server L2TP], [http://www.softether.org/1-features/1._Ultimate_Powerful_VPN_Connectivity#Support_Microsoft_SSTP_VPN_Protocol MS-SSTP], [http://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/6.Cisco_IOS_L2TPv3%2F%2F%2F%2FIPsec_Edge-VPN_Router_Setup L2TPv3], and [http://www.softether.org/3-spec EtherIP])&lt;br /&gt;
&lt;br /&gt;
====Cisco L2TPv3====&lt;br /&gt;
Use the setup of SoftEther [https://www.softether.org/4-docs/2-howto/9.L2TPIPsec_Setup_Guide_for_SoftEther_VPN_Server/6.Cisco_IOS_L2TPv3%2F%2F%2F%2FIPsec_Edge-VPN_Router_Setup here] as a guide for an L2TPv3 connection to a Cisco device.&lt;br /&gt;
&lt;br /&gt;
=====SoftEther settings=====&lt;br /&gt;
Now make the following adjustments to the IPSEC/L2TPv3 settings shown there:&lt;br /&gt;
&lt;br /&gt;
* Under IPSEC/L2TP setting select the checkbox for Enable EtherIP/L2TPv3 over IPsec Server Function&lt;br /&gt;
* Select EtherIP / L2TP Detail Settings&lt;br /&gt;
* ISAKMP Phase 1 ID: Specify local IP address of Cisco device here&lt;br /&gt;
* Fill in username/password settings&lt;br /&gt;
&lt;br /&gt;
* Under Virtual Hub management&lt;br /&gt;
* Select Virtual NAT and virtual DHCP server function&lt;br /&gt;
* Secure NAT settings wtill be used to set Virtual DHCP server settings&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 85%&amp;quot;&lt;br /&gt;
|+ Ports used by Softether for this configuration&lt;br /&gt;
! Type&lt;br /&gt;
! Port #&lt;br /&gt;
|-&lt;br /&gt;
| UDP&lt;br /&gt;
| 500&lt;br /&gt;
|-&lt;br /&gt;
| UDP&lt;br /&gt;
| 4500&lt;br /&gt;
|-&lt;br /&gt;
| UDP&lt;br /&gt;
| 1701&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Encryption:  If you have an issue with using AES during your initial testing, try using DES or 3DES.  Once you have the connection established try switching to a more secure algorithm.&lt;br /&gt;
&lt;br /&gt;
=====Cisco config=====&lt;br /&gt;
And then use the following config below on your Cisco device instead of what is listed on the SoftEther site to get L2TPv3 working:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 85%&amp;quot;&lt;br /&gt;
|+ Information used in this example&lt;br /&gt;
! Local IP addess&lt;br /&gt;
! Peer IP (SoftEther Public IP)&lt;br /&gt;
! Pre-shared key&lt;br /&gt;
|-&lt;br /&gt;
| 192.168.100.100 (ISAKMP Phase 1 ID)&lt;br /&gt;
| 1.1.1.100&lt;br /&gt;
| CHANGEME&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Note: By default Cisco may have NAT-Traversal enabled.  This settings is not required.&lt;br /&gt;
&lt;br /&gt;
* Specify the L2TPv3 settings and interface (change FastEterhnet0/0 to match your device's interface).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pseudowire-class L2TPv3&lt;br /&gt;
   encapsulation l2tpv3&lt;br /&gt;
   ip local interface FastEthernet0/0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Note: You can chance the pseudowire-class interface's name from L2TPv3 to something more descriptive if you want.&lt;br /&gt;
&lt;br /&gt;
* ISAKMP settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crypto isakmp policy 1&lt;br /&gt;
   encr aes 256&lt;br /&gt;
   authentication pre-share&lt;br /&gt;
   group 2&lt;br /&gt;
crypto isakmp key CHANGEME address 1.1.1.100&lt;br /&gt;
crypto isakmp keepalive 10 periodic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: You can use AES 256 encryption here.  DH group uses type 2 1024 bit encryption.&lt;br /&gt;
&lt;br /&gt;
* IPSEC settings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crypto ipsec transform-set IPSEC esp-3des esp-sha-hmac&lt;br /&gt;
   mode transport&lt;br /&gt;
crypto ipsec fragmentation after-encryption&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:  3des is being used here in this example.  If you put this tunnel into production make sure you change the cipher used to AES!!!&lt;br /&gt;
&lt;br /&gt;
* Cryptographic map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
crypto map MAP 1 ipsec-isakmp&lt;br /&gt;
   set peer 1.1.1.100&lt;br /&gt;
   set transform-set IPSEC&lt;br /&gt;
   match address IPSEC_MATCH_RULE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Interface configuration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface FastEthernet0/0&lt;br /&gt;
   ip address 192.168.100.100 255.255.255.0&lt;br /&gt;
   no ip proxy-arp&lt;br /&gt;
   duplex auto&lt;br /&gt;
   speed auto&lt;br /&gt;
   crypto map MAP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:  FastEthernet0/0 uses the local IP address specified above and has the crypto map applied.&lt;br /&gt;
&lt;br /&gt;
* Use FastEthernet0/1 as the interface for the tunnel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface FastEthernet0/1&lt;br /&gt;
   no ip address&lt;br /&gt;
   duplex auto&lt;br /&gt;
   speed auto&lt;br /&gt;
   no cdp enable&lt;br /&gt;
   xconnect 1.1.1.100 1 encapsulation l2tpv3 pw-class L2TPv3&lt;br /&gt;
   bridge-group 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Access list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ip access-list extended IPSEC_MATCH_RULE&lt;br /&gt;
   permit 115 any any&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Now connect a device to FastEthernet0/1.  It should get a DHCP lease from SoftEther and be on the network.&lt;br /&gt;
&lt;br /&gt;
=====Troubelshooting=====&lt;br /&gt;
To troubleshoot the tunnel use the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
debug crypt isakmp&lt;br /&gt;
debug crypt ipsec&lt;br /&gt;
debug l2tp all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Show ISAKMP SA status:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#show crypto isakmp sa&lt;br /&gt;
IPv4 Crypto ISAKMP SA&lt;br /&gt;
dst             src             state          conn-id status&lt;br /&gt;
1.1.1.100       192.168.100.100    QM_IDLE           1011 ACTIVE&lt;br /&gt;
 &lt;br /&gt;
IPv6 Crypto ISAKMP SA&lt;br /&gt;
 &lt;br /&gt;
・IPSec&lt;br /&gt;
#show crypto ipsec sa&lt;br /&gt;
 &lt;br /&gt;
interface: FastEthernet0/0&lt;br /&gt;
    Crypto map tag: MAP, local addr 192.168.100.100&lt;br /&gt;
 &lt;br /&gt;
   protected vrf: (none)&lt;br /&gt;
   local  ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/115/0)&lt;br /&gt;
   remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/115/0)&lt;br /&gt;
   current_peer 1.1.1.100 port 4500&lt;br /&gt;
     PERMIT, flags={origin_is_acl,}&lt;br /&gt;
    #pkts encaps: 54342, #pkts encrypt: 54342, #pkts digest: 54342&lt;br /&gt;
    #pkts decaps: 179917, #pkts decrypt: 179917, #pkts verify: 179917&lt;br /&gt;
    #pkts compressed: 0, #pkts decompressed: 0&lt;br /&gt;
    #pkts not compressed: 0, #pkts compr. failed: 0&lt;br /&gt;
    #pkts not decompressed: 0, #pkts decompress failed: 0&lt;br /&gt;
    #send errors 23, #recv errors 0&lt;br /&gt;
 &lt;br /&gt;
     local crypto endpt.: 192.168.100.100, remote crypto endpt.: 1.1.1.100&lt;br /&gt;
     path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0&lt;br /&gt;
     current outbound spi: 0x48E82D7A(1223175546)&lt;br /&gt;
     PFS (Y/N): N, DH group: none&lt;br /&gt;
 &lt;br /&gt;
     inbound esp sas:&lt;br /&gt;
      spi: 0x1B68FD22(459865378)&lt;br /&gt;
        transform: esp-3des esp-sha-hmac ,&lt;br /&gt;
        in use settings ={Tunnel UDP-Encaps, }&lt;br /&gt;
        conn id: 2107, flow_id: NETGX:107, sibling_flags 80000046, crypto map: MAP&lt;br /&gt;
        sa timing: remaining key lifetime (k/sec): (4386973/1557)&lt;br /&gt;
        IV size: 8 bytes&lt;br /&gt;
        replay detection support: Y&lt;br /&gt;
        Status: ACTIVE&lt;br /&gt;
 &lt;br /&gt;
     inbound ah sas:&lt;br /&gt;
 &lt;br /&gt;
     inbound pcp sas:&lt;br /&gt;
 &lt;br /&gt;
     outbound esp sas:&lt;br /&gt;
      spi: 0x48E82D7A(1223175546)&lt;br /&gt;
        transform: esp-3des esp-sha-hmac ,&lt;br /&gt;
        in use settings ={Tunnel UDP-Encaps, }&lt;br /&gt;
        conn id: 2108, flow_id: NETGX:108, sibling_flags 80000046, crypto map: MAP&lt;br /&gt;
        sa timing: remaining key lifetime (k/sec): (4386975/1557)&lt;br /&gt;
        IV size: 8 bytes&lt;br /&gt;
        replay detection support: Y&lt;br /&gt;
        Status: ACTIVE&lt;br /&gt;
 &lt;br /&gt;
     outbound ah sas:&lt;br /&gt;
 &lt;br /&gt;
     outbound pcp sas:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Check L2TP session:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#show l2tp session&lt;br /&gt;
L2TP Session Information Total tunnels 1 sessions 1&lt;br /&gt;
 &lt;br /&gt;
LocID      RemID      TunID      Username, Intf/      State  Last Chg Uniq ID&lt;br /&gt;
                                 Vcid, Circuit&lt;br /&gt;
23239**** 1900**** 2306***** 1, Fa0/1             est    01:32:52 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Check L2TP tunnel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
L2TP Tunnel Information Total tunnels 1 sessions 1&lt;br /&gt;
LocTunID   RemTunID   Remote Name   State  Remote Address  Sessn L2TP Class/&lt;br /&gt;
                                                           Count VPDN Group&lt;br /&gt;
230**** 1          ******* est    1.1.1.100   1     l2tp_default_cl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: If you use AES for IPSEC it will become TunID 0.&lt;br /&gt;
&lt;br /&gt;
== WireGuard ==&lt;br /&gt;
WireGuard can be downloaded from https://www.wireguard.com/&amp;lt;ref&amp;gt;WireGuard Offical Site [https://www.wireguard.com/]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== VPNC ==&lt;br /&gt;
&lt;br /&gt;
vpnc is an open-source VPN client that is compatible with Cisco VPN setups. VPNC is much easier to configure than the Cisco client and works on almost every flavor of UNIX systems including Linux, Macs and BSD, as well as Ubuntu.&lt;br /&gt;
&lt;br /&gt;
This is handy if you have a VPN server or IOS router setup and wish to use it.  w9cr.net runs this as a means to get public IP's directly on nodes, bypassing NAT444 and man-in-the-middle IAX level filtering.&lt;br /&gt;
&lt;br /&gt;
=== install ===&lt;br /&gt;
* sudo apt-get install vpnc&lt;br /&gt;
&lt;br /&gt;
=== config ===&lt;br /&gt;
&lt;br /&gt;
Create a configuration file for the RPI Wireless and/or RPI External profile. Usually these files would be stored in /etc/vpnc/profile_name.conf.  The default /etc/vpnc/default.conf.   &lt;br /&gt;
&lt;br /&gt;
An example config for the W9CR.net vpn server:&lt;br /&gt;
&lt;br /&gt;
'''w9cr example config'''&lt;br /&gt;
 IPSec gateway cisco.keekles.org&lt;br /&gt;
 IPSec id AMPRNET&lt;br /&gt;
 IPSec secret EzAsARDC&lt;br /&gt;
 Xauth username YOUR-CALLSIGN&lt;br /&gt;
 Xauth password _YOUR_PASSWORD_HERE_ &lt;br /&gt;
&lt;br /&gt;
=== running it ===&lt;br /&gt;
&lt;br /&gt;
To connect to the VPN you would run one of the following commands as root or using sudo:&lt;br /&gt;
&lt;br /&gt;
* sudo vpnc -- This command would run VPNC using /etc/vpnc/default.conf, if it exists. If it does not, it would prompt for the connection information&lt;br /&gt;
* sudo vpnc external -- This would run VPNC using /etc/vpnc/external.conf, if it exists.&lt;br /&gt;
&lt;br /&gt;
==== Starting it at boot ====&lt;br /&gt;
&lt;br /&gt;
IF you're behind NAT, you want to start this at boot.&lt;br /&gt;
&lt;br /&gt;
The simplest way is to call it from /etc/rc.local, but that's a bit in-elegant.&lt;br /&gt;
&lt;br /&gt;
make the following file at  /usr/lib/systemd/system/vpnc@.service&lt;br /&gt;
&lt;br /&gt;
 [Unit]                                                                                                                                                                        &lt;br /&gt;
 Description=VPNC connection to %i&lt;br /&gt;
 Wants=network-online.target&lt;br /&gt;
 After=network.target network-online.target&lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 ExecStart=/usr/bin/vpnc --pid-file=/run/vpnc@%i.pid /etc/vpnc/%i.conf&lt;br /&gt;
 PIDFile=/run/vpnc@%i.pid &lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
&lt;br /&gt;
So, in order to have your VPN autostart from the configuration file /etc/vpnc/w9cr.conf, you'd do:&lt;br /&gt;
&lt;br /&gt;
 systemctl enable vpnc@w9cr&lt;br /&gt;
 systemctl start vpnc@w9cr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== More info ===&lt;br /&gt;
If you want a vpn connection via w9cr.net using 44net public IP space, please contact bryan@bryanfields.net.  Include your callsign and details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
Any other information that doesn't fit elsewhere.&lt;br /&gt;
&lt;br /&gt;
= Firewall =&lt;br /&gt;
Information regarding firewall setup as related to the VPN configs above.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
The following script can be used to setup a basic firewall on a Linux based system using iptables. &lt;br /&gt;
&lt;br /&gt;
Supports IPv4 and IPv6.  Comment out the parts that are not need with a # or optionally delete them.&lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash&lt;br /&gt;
  &lt;br /&gt;
  #Modify to match your network interface  &lt;br /&gt;
  INET_IF=eth0&lt;br /&gt;
  &lt;br /&gt;
  #Edit IP address below to match the IP and netmask of the system or subnet you want to allow access to &lt;br /&gt;
  #&amp;quot;Management only&amp;quot; services.  Add or remove as needed.  Make sure to update the ManagementFilterV4 with&lt;br /&gt;
  #the changes&lt;br /&gt;
  System1=&amp;quot;XX.XX.XX.XX/YY&amp;quot;  &lt;br /&gt;
  System2=&amp;quot;XX.XX.XX.XX/YY&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  ManagementFilterV4=$System1,$System2&lt;br /&gt;
  &lt;br /&gt;
  #Flush and zero all tables&lt;br /&gt;
  modprobe ip_tables&lt;br /&gt;
  modprobe ipt_limit&lt;br /&gt;
  modprobe iptable_mangle&lt;br /&gt;
  modprobe ipt_state&lt;br /&gt;
  modprobe ipt_LOG&lt;br /&gt;
  modprobe iptable_filter&lt;br /&gt;
  modprobe ipv6&lt;br /&gt;
  &lt;br /&gt;
  iptables -F INPUT&lt;br /&gt;
  iptables -F FORWARD&lt;br /&gt;
  iptables -t nat -F POSTROUTING&lt;br /&gt;
  iptables -t nat -F PREROUTING&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -F INPUT&lt;br /&gt;
  ip6tables -F FORWARD&lt;br /&gt;
  &lt;br /&gt;
  #init the log-and-drop chain&lt;br /&gt;
  iptables -F log-and-drop&lt;br /&gt;
  iptables -X log-and-drop&lt;br /&gt;
  iptables -N log-and-drop&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -F log-and-drop&lt;br /&gt;
  ip6tables -X log-and-drop&lt;br /&gt;
  ip6tables -N log-and-drop&lt;br /&gt;
  &lt;br /&gt;
  iptables -F log-and-reject&lt;br /&gt;
  iptables -X log-and-reject&lt;br /&gt;
  iptables -N log-and-reject&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -F log-and-reject&lt;br /&gt;
  ip6tables -X log-and-reject&lt;br /&gt;
  ip6tables -N log-and-reject&lt;br /&gt;
  &lt;br /&gt;
  #Now add in rules to affect DOCKER containers - uncomment if using Docker&lt;br /&gt;
  #See https://unrouted.io/2017/08/15/docker-firewall/&lt;br /&gt;
  #iptables -F DOCKER-USER&lt;br /&gt;
  #iptables -X DOCKER-USER&lt;br /&gt;
  #iptables -N DOCKER-USER&lt;br /&gt;
  &lt;br /&gt;
  #ip6tables -F DOCKER-USER&lt;br /&gt;
  #ip6tables -X DOCKER-USER&lt;br /&gt;
  #ip6tables -N DOCKER-USER&lt;br /&gt;
  &lt;br /&gt;
  #iptables -F FILTERS&lt;br /&gt;
  #iptables -X FILTERS&lt;br /&gt;
  #iptables -N FILTERS&lt;br /&gt;
  &lt;br /&gt;
  #ip6tables -F FILTERS&lt;br /&gt;
  #ip6tables -X FILTERS&lt;br /&gt;
  #ip6tables -N FILTERS&lt;br /&gt;
  &lt;br /&gt;
  echo &amp;quot;all tables flushed and dropped&amp;quot;&lt;br /&gt;
  # Specific chain used for logging packets before blocking them&lt;br /&gt;
  iptables -A log-and-drop -j LOG --log-prefix &amp;quot;[IPTables] Drop &amp;quot;&lt;br /&gt;
  iptables -A log-and-drop -j DROP&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -A log-and-drop -j LOG --log-prefix &amp;quot;[IPTables] Drop &amp;quot;&lt;br /&gt;
  ip6tables -A log-and-drop -j DROP&lt;br /&gt;
  &lt;br /&gt;
  # Specific chain used for logging packets before blocking them&lt;br /&gt;
  iptables -A log-and-reject -j LOG --log-prefix &amp;quot;[IPTables] Reject &amp;quot;&lt;br /&gt;
  iptables -A log-and-reject -j REJECT&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -A log-and-reject -j LOG --log-prefix &amp;quot;[IPTables] Reject &amp;quot;&lt;br /&gt;
  ip6tables -A log-and-reject -j REJECT&lt;br /&gt;
  &lt;br /&gt;
  echo &amp;quot;logging chains setup&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
  # The packets having the TCP flags activated are dropped&lt;br /&gt;
  # and so for the ones with no flag at all (often used with Nmap scans)&lt;br /&gt;
  iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop&lt;br /&gt;
  iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop&lt;br /&gt;
  ip6tables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop&lt;br /&gt;
  &lt;br /&gt;
  #setup DOCKER-USER related rules - uncomment if using Docker&lt;br /&gt;
  #iptables -A DOCKER-USER -i $INET_IF -j FILTERS&lt;br /&gt;
  &lt;br /&gt;
  #Now add any rules you want Docker to abide by for containers to -A FILTERS&lt;br /&gt;
  &lt;br /&gt;
  #limit traffic to 80 an 443&lt;br /&gt;
  #DCQ=&amp;quot;2&amp;quot;   #max requests in 1 second&lt;br /&gt;
  #DCH=&amp;quot;25&amp;quot;   #max requests over 7 seconds&lt;br /&gt;
  &lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 80 -m state --state NEW -m recent --set --name P80QF --rsource&lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 80 -m state --state NEW -m recent --update --second 1 --hitcount ${DCQ} --name P80QF --rsource -j log-and-drop&lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 80 -m state --state NEW -m recent --set --name P80HF --rsource&lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 80 -m state --state NEW -m recent --update --second 7 --hitcount ${DCH} --name P80HF --rsource -j log-and-drop&lt;br /&gt;
   &lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 443 -m state --state NEW -m recent --set --name P443QF --rsource&lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 443 -m state --state NEW -m recent --update --second 1 --hitcount ${DCQ} --name P443QF --rsource -j log-and-drop&lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 443 -m state --state NEW -m recent --set --name P443HF --rsource&lt;br /&gt;
  #iptables -A FILTERS -p tcp --dport 443 -m state --state NEW -m recent --update --second 7 --hitcount ${DCH} --name P443HF --rsource -j log-and-drop&lt;br /&gt;
    &lt;br /&gt;
  #default return chain&lt;br /&gt;
  #iptables -A FILTERS -j RETURN&lt;br /&gt;
  &lt;br /&gt;
  #Global blocks&lt;br /&gt;
  #iptables -t filter -A INPUT -j DROP -s 12.34.56.78/32&lt;br /&gt;
  &lt;br /&gt;
  #Limit DNS requests to prevent flood attacks - use if you are running a DNS server on the system this is installed on.  &lt;br /&gt;
  # Requests per second&lt;br /&gt;
  #RQS=&amp;quot;15&amp;quot;&lt;br /&gt;
  # Requests per 7 seconds&lt;br /&gt;
  #RQH=&amp;quot;35&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  #iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSQF --rsource&lt;br /&gt;
  #iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 1 --hitcount ${RQS} --name DNSQF --rsource -j DROP&lt;br /&gt;
  #iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --set --name DNSHF --rsource&lt;br /&gt;
  #iptables -A INPUT -p udp --dport 53 -m state --state NEW -m recent --update --seconds 7 --hitcount ${RQH} --name DNSHF --rsource -j DROP&lt;br /&gt;
  &lt;br /&gt;
  #Uncomment the next sections if using IPSEC&lt;br /&gt;
  #Clamp MSS on IPSEC tunnels&lt;br /&gt;
  #iptables -t mangle -A FORWARD -m policy --pol ipsec --dir in -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360&lt;br /&gt;
  #iptables -t mangle -A FORWARD -m policy --pol ipsec --dir out -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360&lt;br /&gt;
  &lt;br /&gt;
  # allow IPSEC from other boxes&lt;br /&gt;
  #IPSECsrc='XX.XX.XX.XX/YY'  # Put in the form of XX.XX.XX.XX = IP address you want to allow IPSEC in from and YY is the netmask.&lt;br /&gt;
  &lt;br /&gt;
  #Technically the next two are not needed as we have the policy&lt;br /&gt;
  #iptables -A INPUT -i $INET_IF -p 50 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
  #iptables -A INPUT -i $INET_IF -p 51 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
  #iptables -A INPUT -i $INET_IF -p udp --dport 500 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
  #iptables -A INPUT -i $INET_IF -p udp --dport 4500 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
  # this is needed to allow all ipsec packets when it's host to host&lt;br /&gt;
  #iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &lt;br /&gt;
  &lt;br /&gt;
  #allow DNS in&lt;br /&gt;
  #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 53&lt;br /&gt;
  #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 53&lt;br /&gt;
  &lt;br /&gt;
  #ip6tables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 53&lt;br /&gt;
  #ip6tables -t filter -A INPUT -j ACCEPT --protocol udp --dport 53&lt;br /&gt;
  &lt;br /&gt;
  #allow port 80 in&lt;br /&gt;
  #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 80&lt;br /&gt;
  #ip6tables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 80&lt;br /&gt;
  &lt;br /&gt;
  #allow port 443 in&lt;br /&gt;
  #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 443&lt;br /&gt;
  #ip6tables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 443&lt;br /&gt;
  &lt;br /&gt;
  # allow all ssh in - uncomment ManagemetnFilterV4 and comment out the two lines below to restrict SSH access on port 22&lt;br /&gt;
  #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22 --src $ManagementFilterV4&lt;br /&gt;
  iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22 &lt;br /&gt;
  ip6tables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22 &lt;br /&gt;
  &lt;br /&gt;
  echo &amp;quot;end of services&amp;quot;&lt;br /&gt;
  # allow ping at 2 per sec&lt;br /&gt;
  iptables -t filter -A INPUT -j ACCEPT --in-interface $INET_IF --protocol icmp --icmp-type echo-request --match limit --limit 4/s --limit-burst 3&lt;br /&gt;
  iptables -t filter -A INPUT -j log-and-drop  --in-interface $INET_IF --protocol icmp --icmp-type echo-request&lt;br /&gt;
  &lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-reply -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type router-solicitation -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 141 -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 142 -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 151 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 152 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT&lt;br /&gt;
  ip6tables -A INPUT -p icmpv6 --icmpv6-type 153 -s fe80::/10 -m hl --hl-eq 1 -j ACCEPT &lt;br /&gt;
  &lt;br /&gt;
  # allow responces to local initated connections&lt;br /&gt;
  #iptables -A INPUT -i  $INET_IF --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
  #iptables -A FORWARD -i $INET_IF  --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
  iptables -t filter -A INPUT -j ACCEPT --match state --state RELATED,ESTABLISHED&lt;br /&gt;
  ip6tables -t filter -A INPUT -j ACCEPT --match state --state RELATED,ESTABLISHED&lt;br /&gt;
  &lt;br /&gt;
  # Set rp_filter to 2&lt;br /&gt;
  for i in `find /proc/sys/net/ipv*/conf -name rp_filter`&lt;br /&gt;
  do&lt;br /&gt;
  	echo &amp;quot;2&amp;quot; &amp;gt;$i&lt;br /&gt;
  done&lt;br /&gt;
  # setup a default deny rule for outside traffic&lt;br /&gt;
  iptables -t filter -A INPUT --in-interface $INET_IF -j log-and-drop&lt;br /&gt;
  ip6tables -t filter -A INPUT --in-interface $INET_IF -j log-and-drop&lt;br /&gt;
  &lt;br /&gt;
  #uncomment if you are using Docker&lt;br /&gt;
  #echo &amp;quot;Restarting Docker&amp;quot;&lt;br /&gt;
  #systemctl restart docker&lt;br /&gt;
  &lt;br /&gt;
  #uncomment the next two lines if fail2ban is installed&lt;br /&gt;
  #echo &amp;quot;Restarting fail2ban&amp;quot;&lt;br /&gt;
  #systemctl restart fail2ban&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Main_Page&amp;diff=1867</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Main_Page&amp;diff=1867"/>
		<updated>2020-06-29T17:38:36Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Related Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;clear:both; position:relative; box-sizing:border-box; width:100%; margin:1.2em 0 6px; min-width:47em; border:3px solid #ddd;background-color:#ffffff; color:#000; white-space:nowrap;text-align:center;font-size: 24px; color: #ff6600;&amp;quot;&amp;gt;'''Welcome to the AllStarLink Wiki'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both; position:relative; box-sizing:border-box; width:100%; margin:1.2em 0 6px; min-width:47em; border:1px solid #ddd; background-color:#ccddff; color:#000; white-space:nowrap;text-align:center;&amp;quot;&amp;gt;AllStarLink is a world wide network of [https://en.wikipedia.org/wiki/Amateur_radio Amateur Radio] repeaters, remote base stations and hot spots accessible to each other via the Internet and/or private IP networks. &lt;br /&gt;
&lt;br /&gt;
AllStarLink runs on a dedicated Linux computer (including the Raspberry Pi) that you host at your home, radio site, clubhouse, school, university, workplace, or computer center. &lt;br /&gt;
&lt;br /&gt;
It is based on the open source Asterisk PBX and is released under the GNU GPL -- it is free for anyone to use.&lt;br /&gt;
&lt;br /&gt;
The core of AllStar and AllStarLink is the powerful app_rpt application and associated modules that load into the Asterisk PBX system.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
==Organization==&lt;br /&gt;
*[[The Organization - AllStarLink Inc. ]] - What is AllStarLink?&lt;br /&gt;
*[[The Beginning - AllStarLink Inc]] - How AllStarLink came to be. &lt;br /&gt;
&lt;br /&gt;
== How To ==&lt;br /&gt;
&lt;br /&gt;
*[[Beginners Guide]] - Step by step instructions to create your account and AllStarLink node. &lt;br /&gt;
*[[Allmon2 Install]] - Allmon2 step by step instructions for install and setup Allmon2. &lt;br /&gt;
*[[ASL website password reset]] - allstarlink website instructions for password reset. &lt;br /&gt;
*[[Change call sign]] - Step by step call sign change on site and node.&lt;br /&gt;
*[[Find my node number]] - How can you find your node number(s) on your ASL account.&lt;br /&gt;
*[[Change node password]] - Step by step call sign change passwords.&lt;br /&gt;
&lt;br /&gt;
== Como Hacer ==&lt;br /&gt;
&lt;br /&gt;
*[[Guia para principaintes]] - Configuración paso a paso de AllStarLink para principiantes.&lt;br /&gt;
*[[Instalación de Allmon2]] - Instalación y configuración de Allmon2 para principiantes.&lt;br /&gt;
*[[Resetear contraseña ASL]] - Como resetear la contraseña de su cuenta en el sitio allstarlink.&lt;br /&gt;
*[[Cambiar el indicativo]] - Guía paso a paso para cambiar indicativo en el sitio y  el nodo.&lt;br /&gt;
*[[Ver mi número de nodo]] - Como ver tu número de nodo(s) en tu cuenta de ASL.&lt;br /&gt;
*[[Cambiar la contraseña de un nodo]] - Guia paso a paso para cambiar la contraseña en un nodo.&lt;br /&gt;
&lt;br /&gt;
== AllStarLink Menu ==&lt;br /&gt;
*[[Features]] - List of the many AllStarLink Features &lt;br /&gt;
*[[ASL FAQ]] - Questions and answers about the AllStarLink software distribution.&lt;br /&gt;
*[[:Category:How to|How To's]] - A collection of AllStarLink how to's.&lt;br /&gt;
*[[:Category:Node Configuration|Node Configuration]] - Detailed configuration settings.&lt;br /&gt;
*[[:Category:Development|Development]] - Information regarding development of the AllStarLink software (i.e., contributing, etc).&lt;br /&gt;
*[[Radio Connections]] - Instructions to Connect Radios, Repeaters and Other Devices to AllStar.&lt;br /&gt;
*[[Troubleshooting]] - Troubleshooting common problems, things to try, and hints to solve the problem.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
* [https://github.com/AllStarLink/Asterisk/releases/tag/ASL-1.01 ASL AMD] Latest AllStarLink installer for x86/AMD (main site)&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/Intel-AMD/Stretch/ ASL AMD] Latest AllStarLink installer for x86/AMD (alternative site)&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/Raspberry_Pi/Stretch/ Pi] Latest AllStarLink image for the Raspberry Pi&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/ ASL Repo] AllStarLink Image Repository&lt;br /&gt;
* [[ASL FAQ]] - Install ASL on your existing Debian box or VM&lt;br /&gt;
&lt;br /&gt;
Note:  The ASL 1.01 installer is a Network installer and still uses the dvswitch.org site to download the .deb install files.&lt;br /&gt;
&lt;br /&gt;
== Descargas ==&lt;br /&gt;
* [https://github.com/AllStarLink/Asterisk/releases/tag/ASL-1.01 ASL AMD] Última versión del instalador de AllStarLink para x86/AMD (sitio principal).&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/Intel-AMD/Stretch/ ASL AMD] Última versión del instalador de AllStarLink para x86/AMD (sitio alterno).&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/Raspberry_Pi/Stretch/ Pi] Última versión de la imágen de AllStarLink para Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
== Development/Building ==&lt;br /&gt;
* [[Compiling]] - Building ASL from source&lt;br /&gt;
*[[Dahdi_dummy|DAHDI Dummy]] - How to fix audio stutter on ASL based Raspberry PI images&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
* [https://allstarlink.org/ AllStarLink Portal] - If you are looking to set up your own AllStarLink node.&lt;br /&gt;
* [https://www.allstarlink.org/ AllStarLink Portal] - Our portal site. Check out the searchable and sortable [https://www.allstarlink.org/nodelist/ Node List].&lt;br /&gt;
* [http://stats.allstarlink.org/ AllStarLink Stats] - shows all the existing public nodes.&lt;br /&gt;
* [https://community.allstarlink.org/ AllStarLink Community Site] - Web based user support form (replaced app_rpt mailing list) This is the only forum the board monitors, but there is no technical knowledge.&lt;br /&gt;
* [http://lists.keekles.org/cgi-bin/mailman/listinfo/app_rpt-users AllStarLink users mailing list]-  This is the app_rpt mailing list for discussion, help and helping others.  '''This is the only group that developers monitor and respond on.'''&lt;br /&gt;
* [https://groups.io/g/AllStarLink AllStarLink Groups.io mailing group]. This is the app_rpt discussion group on Groups.io - this is for people who don't know what they are doing helping other people who don't know what they are doing.&lt;br /&gt;
* [https://github.com/AllStarLink/ Source Code] - All of the source code for the AllStarLink Asterisk and app_rpt is available on GitHub.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
* [[History]] from the Duuude, Jim Dixon WB6NIL SK 12/16/2016.&lt;br /&gt;
* [[Thru-hole_Voter_Board|Thru-hole Voter Board]] from Jim Dixon&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* [http://rogerdudler.github.io/git-guide/ Git - The Simple Guide] - A handy reference for getting started with Git.&lt;br /&gt;
* [https://ryanstutorials.net/linuxtutorial/cheatsheet.php Ryans Tutorials - Linux Tutorial - Cheat Sheet] Handy Cheat Sheet of Linux commands.&lt;br /&gt;
* [https://training.linuxfoundation.org/resources/free-courses/introduction-to-linux/ The Linux Training Foundation - Introduction to Linux] A free eight week course with optional certificate that teaches how to use Linux.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Custom_Node_Announcements&amp;diff=1854</id>
		<title>Custom Node Announcements</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Custom_Node_Announcements&amp;diff=1854"/>
		<updated>2020-06-04T20:08:25Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Important changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AllStar supports custom node announcements or node names.  These will be played in place of the node number.&lt;br /&gt;
&lt;br /&gt;
The distribution of these is optional and each node will use rsync to download new ones about 2-3 times per day.  This is done via the rc.updatenodelist script in ASL 1.01 and before, or NodeNameUpdate.sh via cron in newer releases.  It requires '''rsync''' to be installed.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
As of June 4, 2019 rsync://allstarlink.org no longer works.  This has moved to rsync.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
It is suggested you change the rc.updatenodelist file to use rsync.allstarlink.org.  &lt;br /&gt;
&lt;br /&gt;
The following sed command can make the change automatically for you.  &lt;br /&gt;
&lt;br /&gt;
 sed -i 's/rsync:\/\/allstarlink.org\/connect-messages/rsync:\/\/rsync.allstarlink.org\/connect-messages/g' /usr/local/bin/rc.updatenodelist&lt;br /&gt;
&lt;br /&gt;
Be sure you reboot or kill the rc.updatenodelist process to have it respawn from init.&lt;br /&gt;
&lt;br /&gt;
== Making custom announcements ==&lt;br /&gt;
&lt;br /&gt;
Steve Rodgers has a PDF document on producing a file in the format required for any custom announcement in AllStar. &lt;br /&gt;
&lt;br /&gt;
[https://www.audacityteam.org/ Audacity] can be used to convert almost any sound file into the proper format.&lt;br /&gt;
&lt;br /&gt;
[[File:RecordingSoundFiles.pdf]]&lt;br /&gt;
&lt;br /&gt;
If you intend to make the announcement avialble network wide, please see the requirements for node names below&lt;br /&gt;
&lt;br /&gt;
== Adding new announcements ==&lt;br /&gt;
&lt;br /&gt;
AllStar requires the following for node announcements:&lt;br /&gt;
&lt;br /&gt;
* ulaw 8 bit wave&lt;br /&gt;
* under 10 seconds &lt;br /&gt;
* under 100k in size&lt;br /&gt;
&lt;br /&gt;
The file should be named ''$nodeNumber.ulaw'' and placed in /var/lib/asterisk/sounds/rpt/nodenames  &lt;br /&gt;
&lt;br /&gt;
This will add it to that local node.  Should you want it to be used across all nodes, see the next section.&lt;br /&gt;
&lt;br /&gt;
== Network Announcements == &lt;br /&gt;
&lt;br /&gt;
To enable the node announcements to propagate to the rest of the nodes, AllStarLink can add them to the main repository.  Eventually this will be in the web portal, but for now must be done via a email. &lt;br /&gt;
&lt;br /&gt;
The following applies to network announcements: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;A networks announcement may consist of a reading of the node number, callsign, location or other short identification of the node.  This should be inoffensive benign language; suitable for any audience.  The ASL admin team will remove and ban users caught abusing this service.&amp;lt;/blockquote&amp;gt;Once you have the announcement working locally, please email it to [http://mailto:helpdesk@allstarlink.org helpdesk@allstarlink.org]. &lt;br /&gt;
&lt;br /&gt;
Our admin team will test it and then add it to the repository.  Nodes will begin updating it, but it can take up to 24 hours for some nodes to update.&lt;br /&gt;
&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Custom_Node_Announcements&amp;diff=1853</id>
		<title>Custom Node Announcements</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Custom_Node_Announcements&amp;diff=1853"/>
		<updated>2020-06-04T20:04:43Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Important changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AllStar supports custom node announcements or node names.  These will be played in place of the node number.&lt;br /&gt;
&lt;br /&gt;
The distribution of these is optional and each node will use rsync to download new ones about 2-3 times per day.  This is done via the rc.updatenodelist script in ASL 1.01 and before, or NodeNameUpdate.sh via cron in newer releases.  It requires '''rsync''' to be installed.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
As of June 4, 2019 rsync://allstarlink.org no longer works.  This has moved to rsync.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
It is suggested you change the rc.updatenodelist file to use rsync.allstarlink.org.  &lt;br /&gt;
&lt;br /&gt;
The following sed command can make the change automatically for you.  &lt;br /&gt;
&lt;br /&gt;
 sed -i 's/rsync:\/\/allstarlink.org\/connect-messages/rsync:\/\/rsync.allstarlink.org\/connect-messages/g' /usr/local/bin/rc.updatenodelist&lt;br /&gt;
&lt;br /&gt;
== Making custom announcements ==&lt;br /&gt;
&lt;br /&gt;
Steve Rodgers has a PDF document on producing a file in the format required for any custom announcement in AllStar. &lt;br /&gt;
&lt;br /&gt;
[https://www.audacityteam.org/ Audacity] can be used to convert almost any sound file into the proper format.&lt;br /&gt;
&lt;br /&gt;
[[File:RecordingSoundFiles.pdf]]&lt;br /&gt;
&lt;br /&gt;
If you intend to make the announcement avialble network wide, please see the requirements for node names below&lt;br /&gt;
&lt;br /&gt;
== Adding new announcements ==&lt;br /&gt;
&lt;br /&gt;
AllStar requires the following for node announcements:&lt;br /&gt;
&lt;br /&gt;
* ulaw 8 bit wave&lt;br /&gt;
* under 10 seconds &lt;br /&gt;
* under 100k in size&lt;br /&gt;
&lt;br /&gt;
The file should be named ''$nodeNumber.ulaw'' and placed in /var/lib/asterisk/sounds/rpt/nodenames  &lt;br /&gt;
&lt;br /&gt;
This will add it to that local node.  Should you want it to be used across all nodes, see the next section.&lt;br /&gt;
&lt;br /&gt;
== Network Announcements == &lt;br /&gt;
&lt;br /&gt;
To enable the node announcements to propagate to the rest of the nodes, AllStarLink can add them to the main repository.  Eventually this will be in the web portal, but for now must be done via a email. &lt;br /&gt;
&lt;br /&gt;
The following applies to network announcements: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;A networks announcement may consist of a reading of the node number, callsign, location or other short identification of the node.  This should be inoffensive benign language; suitable for any audience.  The ASL admin team will remove and ban users caught abusing this service.&amp;lt;/blockquote&amp;gt;Once you have the announcement working locally, please email it to [http://mailto:helpdesk@allstarlink.org helpdesk@allstarlink.org]. &lt;br /&gt;
&lt;br /&gt;
Our admin team will test it and then add it to the repository.  Nodes will begin updating it, but it can take up to 24 hours for some nodes to update.&lt;br /&gt;
&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Custom_Node_Announcements&amp;diff=1852</id>
		<title>Custom Node Announcements</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Custom_Node_Announcements&amp;diff=1852"/>
		<updated>2020-06-04T20:03:31Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AllStar supports custom node announcements or node names.  These will be played in place of the node number.&lt;br /&gt;
&lt;br /&gt;
The distribution of these is optional and each node will use rsync to download new ones about 2-3 times per day.  This is done via the rc.updatenodelist script in ASL 1.01 and before, or NodeNameUpdate.sh via cron in newer releases.  It requires '''rsync''' to be installed.&lt;br /&gt;
&lt;br /&gt;
== Important changes ==&lt;br /&gt;
&lt;br /&gt;
As of June 4, 2019 rsync://allstarlink.org no longer works.  &lt;br /&gt;
&lt;br /&gt;
It is suggested you change the re.updatenodelist file to use rsync.allstarlink.org.  &lt;br /&gt;
&lt;br /&gt;
The following sed command can make the change automatically for you.  &lt;br /&gt;
&lt;br /&gt;
 sed -i 's/rsync:\/\/allstarlink.org\/connect-messages/rsync:\/\/rsync.allstarlink.org\/connect-messages/g' /usr/local/bin/rc.updatenodelist&lt;br /&gt;
&lt;br /&gt;
== Making custom announcements ==&lt;br /&gt;
&lt;br /&gt;
Steve Rodgers has a PDF document on producing a file in the format required for any custom announcement in AllStar. &lt;br /&gt;
&lt;br /&gt;
[https://www.audacityteam.org/ Audacity] can be used to convert almost any sound file into the proper format.&lt;br /&gt;
&lt;br /&gt;
[[File:RecordingSoundFiles.pdf]]&lt;br /&gt;
&lt;br /&gt;
If you intend to make the announcement avialble network wide, please see the requirements for node names below&lt;br /&gt;
&lt;br /&gt;
== Adding new announcements ==&lt;br /&gt;
&lt;br /&gt;
AllStar requires the following for node announcements:&lt;br /&gt;
&lt;br /&gt;
* ulaw 8 bit wave&lt;br /&gt;
* under 10 seconds &lt;br /&gt;
* under 100k in size&lt;br /&gt;
&lt;br /&gt;
The file should be named ''$nodeNumber.ulaw'' and placed in /var/lib/asterisk/sounds/rpt/nodenames  &lt;br /&gt;
&lt;br /&gt;
This will add it to that local node.  Should you want it to be used across all nodes, see the next section.&lt;br /&gt;
&lt;br /&gt;
== Network Announcements == &lt;br /&gt;
&lt;br /&gt;
To enable the node announcements to propagate to the rest of the nodes, AllStarLink can add them to the main repository.  Eventually this will be in the web portal, but for now must be done via a email. &lt;br /&gt;
&lt;br /&gt;
The following applies to network announcements: &lt;br /&gt;
&amp;lt;blockquote&amp;gt;A networks announcement may consist of a reading of the node number, callsign, location or other short identification of the node.  This should be inoffensive benign language; suitable for any audience.  The ASL admin team will remove and ban users caught abusing this service.&amp;lt;/blockquote&amp;gt;Once you have the announcement working locally, please email it to [http://mailto:helpdesk@allstarlink.org helpdesk@allstarlink.org]. &lt;br /&gt;
&lt;br /&gt;
Our admin team will test it and then add it to the repository.  Nodes will begin updating it, but it can take up to 24 hours for some nodes to update.&lt;br /&gt;
&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Backups&amp;diff=1795</id>
		<title>Backups</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Backups&amp;diff=1795"/>
		<updated>2020-04-23T04:46:56Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Initialize the repo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Server Backups=&lt;br /&gt;
&lt;br /&gt;
AllStarLink, Inc uses a per server backup method based on borg.&lt;br /&gt;
&lt;br /&gt;
= Installing Borg on Ubuntu 16 = &lt;br /&gt;
&lt;br /&gt;
the default package that ships with ubuntu 16.04 LTS is borg 1.0 based and we use the latest 1.1 version as it has several security fixes.&lt;br /&gt;
&lt;br /&gt;
== Install nessary packages==&lt;br /&gt;
&lt;br /&gt;
 apt-get install libacl1-dev python3-dev libssl-dev gcc g++ python3-llfuse&lt;br /&gt;
&lt;br /&gt;
== install pip ==&lt;br /&gt;
&lt;br /&gt;
 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py&lt;br /&gt;
 python3 get-pip.py&lt;br /&gt;
&lt;br /&gt;
== Install Borg ==&lt;br /&gt;
 pip3 install borgbackup&lt;br /&gt;
&lt;br /&gt;
== Test for proper version ==&lt;br /&gt;
 root:~# borg -V&lt;br /&gt;
 borg 1.1.7&lt;br /&gt;
&lt;br /&gt;
 which borg&lt;br /&gt;
 /usr/local/bin/borg&lt;br /&gt;
&lt;br /&gt;
== Install the scripts ==&lt;br /&gt;
This will install a new ssh key for root that matches the Rsync.net account and place the borg.inc program in the /root/ directory.&lt;br /&gt;
&lt;br /&gt;
 cd /&lt;br /&gt;
 tar -xvf /root/borg-root-config.tar &lt;br /&gt;
&lt;br /&gt;
= Edit the borg script= &lt;br /&gt;
&lt;br /&gt;
On the Db servers we add a command to dump the database to /var/mysql-backup-current.sql.bz2&lt;br /&gt;
&lt;br /&gt;
= Initialize the repo=&lt;br /&gt;
&lt;br /&gt;
Copy the export lines to your shell and run then do &lt;br /&gt;
&lt;br /&gt;
 echo $BORG_REPO&lt;br /&gt;
 ASLUSER@host.rsync.net:borg/ASL/$HOST&lt;br /&gt;
&lt;br /&gt;
The borg/ASL/db-ord needs to be created on the server&lt;br /&gt;
 ssh -t ASLUSER@host.rsync.net mkdir -p borg/ASL/$HOST&lt;br /&gt;
&lt;br /&gt;
now we need to init the repo at that location&lt;br /&gt;
 borg init -e keyfile-blake2 -p -v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= export the key =&lt;br /&gt;
&lt;br /&gt;
 borg key export --paper&lt;br /&gt;
&lt;br /&gt;
Email this output GPG encrypted to the admin team members.&lt;br /&gt;
&lt;br /&gt;
'''If we lose this key, there is no way to restore the backup.'''  This means if the server dies, we need the paper key record and the passphrase.&lt;br /&gt;
&lt;br /&gt;
= Do the first backup = &lt;br /&gt;
&lt;br /&gt;
 /root/borg.inc&lt;br /&gt;
&lt;br /&gt;
Check that it's succeed &lt;br /&gt;
&lt;br /&gt;
= move borg.inc to cron =&lt;br /&gt;
&lt;br /&gt;
 mv /root/borg.inc /srv/borg.sh&lt;br /&gt;
&lt;br /&gt;
= edit crontab = &lt;br /&gt;
&lt;br /&gt;
edit /etc/crontab to run daily at 8am UTC&lt;br /&gt;
&lt;br /&gt;
 #borg backup&lt;br /&gt;
 30 8 * * *      root    /srv/borg.sh&lt;br /&gt;
&lt;br /&gt;
Reload the crontab file&lt;br /&gt;
&lt;br /&gt;
 service cron reload&lt;br /&gt;
&lt;br /&gt;
= Mounting and restoring =&lt;br /&gt;
Borg makes it easy to mount a backup on the server using &amp;quot;borgfs&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
If this is done on a different server or during a restore operation on new servers, the key files need to be imported from the paper key.  Selected admin users have the paper keys backed up in encrypted email.&lt;br /&gt;
&lt;br /&gt;
For example on a our db-fnt server:&lt;br /&gt;
&lt;br /&gt;
Take the first 5 lines from the /srv/borg.sh file and export them on the cli:&lt;br /&gt;
&lt;br /&gt;
 export BORG_REMOTE_PATH=/usr/local/bin/borg1/borg1&lt;br /&gt;
 export HOST=&lt;br /&gt;
 export BORG_REPO=&lt;br /&gt;
 export BORG_PASSPHRASE=&lt;br /&gt;
 export BORG=/usr/local/bin/borg&lt;br /&gt;
&lt;br /&gt;
Note if doing this on a different server, BORG_REPO= must be the server you intend to restore from.&lt;br /&gt;
&lt;br /&gt;
 #import the paper key &lt;br /&gt;
 borg key import --paper $BORG_REPO&lt;br /&gt;
  &lt;br /&gt;
 #make a directory to mount the backups on:&lt;br /&gt;
 mkdir /mnt/backups&lt;br /&gt;
   &lt;br /&gt;
 #now mount the borg repo&lt;br /&gt;
 borgfs $BORG_REPO /mnt/backups/&lt;br /&gt;
&lt;br /&gt;
The files will now be in /mnt/backups:&lt;br /&gt;
&lt;br /&gt;
 ls  /mnt/backups/&lt;br /&gt;
 db-fnt.allstarlink.org-2018-10-31_08:30  db-fnt.allstarlink.org-2019-02-28_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2018-11-30_08:30  db-fnt.allstarlink.org-2019-03-02_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2018-12-31_08:30  db-fnt.allstarlink.org-2019-03-03_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-01-31_08:30  db-fnt.allstarlink.org-2019-03-04_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-03_08:30  db-fnt.allstarlink.org-2019-03-05_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-10_08:30  db-fnt.allstarlink.org-2019-03-06_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-17_08:30  db-fnt.allstarlink.org-2019-03-07_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-24_08:30  db-fnt.allstarlink.org-2019-03-08_08:30&lt;br /&gt;
&lt;br /&gt;
You can now go into any of these directories and restore files as of the date for the respective directory using normal UNIX utilities. &lt;br /&gt;
&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Category:Contenido_en_espa%C3%B1ol&amp;diff=1715</id>
		<title>Category:Contenido en español</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Category:Contenido_en_espa%C3%B1ol&amp;diff=1715"/>
		<updated>2020-04-09T20:23:42Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Created page with &amp;quot;Informativo de AllStarLink en español&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Informativo de AllStarLink en español&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Gu%C3%ADa_para_principaintes_ASL-AsteriskNG&amp;diff=1714</id>
		<title>Guía para principaintes ASL-AsteriskNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Gu%C3%ADa_para_principaintes_ASL-AsteriskNG&amp;diff=1714"/>
		<updated>2020-04-09T20:21:37Z</updated>

		<summary type="html">&lt;p&gt;Bryan: fixed links, added category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Contenido en español]]&lt;br /&gt;
Configuración de AllStarLink para principiantes.&lt;br /&gt;
&lt;br /&gt;
== El primer paso es crear una cuenta. ==&lt;br /&gt;
&lt;br /&gt;
Visita la pagina [https://web-tpa.allstarlink.org/ https://allstarlink.org/] y da click en '''&amp;lt;Login/Sign Up&amp;gt;''' &lt;br /&gt;
[[File:site_menu.png|frameless|border|533x533px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
y luego click en '''&amp;lt;Sign Up&amp;gt;'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Asl sign up click here .png|none|thumb|800x800px]]Da click en '''&amp;lt;Begin registration&amp;gt;''' y llena el formulario.&lt;br /&gt;
&lt;br /&gt;
== Descarga la imágen de ASL ==&lt;br /&gt;
&lt;br /&gt;
Mientras esperas la confirmación de tu cuenta (suele demorar 24 horas) puedes descargar la imágen que utilizarás en tu nodo AllStarLink.&lt;br /&gt;
&lt;br /&gt;
Visita [[Main_Page#Downloads|wiki.allstarlink.org]] y baja a la sección de descargas &amp;quot;'''Downloads'''&amp;quot; y selecciona la imágen apropiada para tu equipo.&lt;br /&gt;
&lt;br /&gt;
[[File:ASL download.png|frameless|border|533x533px]]&lt;br /&gt;
&lt;br /&gt;
Transfiere la imágen que descargaste a una memoria. Ya sea esta una memoria USB, un CD o DVD, o una tarjeta microSD (Raspberry Pi) dependiendo de tu equipo.&lt;br /&gt;
&lt;br /&gt;
== Ingresa a tu cuenta ==&lt;br /&gt;
&lt;br /&gt;
Necesitarás ingresar a tu cuenta [https://web-tpa.allstarlink.org/ https://allstarlink.org/]&lt;br /&gt;
[[File:Asl login.png|none|thumb|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Da click en  '''Login/Sign Up'''  como se muestra en la siguiente imágen.&lt;br /&gt;
&lt;br /&gt;
== Crea un servidor ==&lt;br /&gt;
&lt;br /&gt;
Necesitarás crear un servidor  &amp;quot;server&amp;quot; :  da click en '''Portal''' y luego en '''Server Settings'''. &lt;br /&gt;
[[File:Asl server1 .png|none|thumb|800x800px]]&lt;br /&gt;
Da click en  &amp;lt;Add a new server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por favor lee las instrucciones en cada página. &lt;br /&gt;
&lt;br /&gt;
Luego da click en  &amp;lt;Proceed with Server Setup&amp;gt;  si es necesario.&lt;br /&gt;
&lt;br /&gt;
Llena todos los campos de información y da click en &amp;lt;submit&amp;gt; al fondo de la página.&lt;br /&gt;
[[File:Asl_server_settings_.png|none|thumb|800x800px]]Server Name = Nombre de tu servidor, p.e. MegaRaspberryPi.&lt;br /&gt;
&lt;br /&gt;
Server Location = Ciudad donde estará ubicado el servidor, p.e. Ciudad de México&lt;br /&gt;
&lt;br /&gt;
Site = Nombre del sitio donde estará el servidor p.e. Cerro del Chiquihuite.&lt;br /&gt;
&lt;br /&gt;
Affiliation = Radioclub al que está afiliado el nodo (opcional).&lt;br /&gt;
&lt;br /&gt;
Hostname = Nombre que darás a la computadora donde instalaras ASL (opcional).&lt;br /&gt;
&lt;br /&gt;
IAX Port = 4569 (no modificar).&lt;br /&gt;
&lt;br /&gt;
Proxy IP = IP del servidor Proxy (opcional).&lt;br /&gt;
&lt;br /&gt;
Para la Latitud y Longitud, puedes usar el mapa o ingresar los valores.&lt;br /&gt;
&lt;br /&gt;
== Solicita un número de nodo ==&lt;br /&gt;
&lt;br /&gt;
Hasta arriba de la página, da click en &amp;lt;portal&amp;gt; y luego en &amp;lt;node settings&amp;gt; &lt;br /&gt;
[[File:Asl_node_.png|none|thumb|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Luego da click &amp;lt;Request a new node number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Asl_request_node_.png|none|thumb|800x800px]]Selecciona en que servidor quieres que sea asignado el nuevo número de nodo&lt;br /&gt;
&lt;br /&gt;
Si necesitas más de un número de nodo para el mismo servidor, repite este proceso.&lt;br /&gt;
&lt;br /&gt;
Un comentario diciendo que requieres un nodo adicional para el mismo servidor es recomendable en dado caso, en Inglés se escribe asi: 'additional node on same server'.&lt;br /&gt;
[[File:Asl_request_node2_.png|none|thumb|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Una ves que hayas solicitado tu número de nodo y sea procesado, recibirás un email con la confirmación.&lt;br /&gt;
&lt;br /&gt;
== Editar la configuración del nodo ==&lt;br /&gt;
&lt;br /&gt;
Entra a tu cuenta en [https://web-tpa.allstarlink.org/ https://allstarlink.org/] &lt;br /&gt;
&lt;br /&gt;
Da click en &amp;lt;portal&amp;gt; y luego en &amp;lt;node settings&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Los números de nodos AllStarLink que te han sido asignados estarán ahí desplegados.&lt;br /&gt;
&lt;br /&gt;
Selecciona el número de nodo que deseas ver/editar.&lt;br /&gt;
&lt;br /&gt;
Llena los campos con la información de tu nodo y da click en &amp;lt;submit&amp;gt;&lt;br /&gt;
[[File:Asl node settings .png|none|thumb|800x800px]]&lt;br /&gt;
&lt;br /&gt;
Apunta en una hoja tu número de nodo, contraseña y el indicativo que le asignaste, ya que los necesitarás más adelante para configurartu sistema AllStarLink.&lt;br /&gt;
&lt;br /&gt;
== Instala y configura AllStarLink en tu computadora ==&lt;br /&gt;
&lt;br /&gt;
Consulta el manuala de tu computadora para instalar la imágen en ella. Si es una Raspberry Pi, te podemos recomendar la aplicación BalenaEtcher, la cual hace muy sencillo ese proceso.&lt;br /&gt;
&lt;br /&gt;
Instala la imágen de AllStarLink en tu computadora. Coloca la memoria en tu sistema e inicia el sistema.&lt;br /&gt;
&lt;br /&gt;
En el caso que estés utilizando una Raspberry Pi sin teclado y monitor, puedes conectarte por SSH usando una conexión de red alámbrica utilizanlo la IP que le asigno tu red/modem.&lt;br /&gt;
&lt;br /&gt;
En la pantalla de acceso te solicitará ingresar un usuario, el cual es &amp;quot;repeater&amp;quot; y luego presiona &amp;lt;enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ingresa el password de default que es &amp;quot;allstarlink&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Posteriormente te solicitará cambiar el password, solicitando primero en password anterior &amp;quot;allstarlink&amp;quot; y que ingreses dos veces el nuevo de tu elección. Toma nota del usuario y contraseña.&lt;br /&gt;
&lt;br /&gt;
AL termino es posible que se cierre la ventana y tengas que volver a conectarte por SSH.&lt;br /&gt;
&lt;br /&gt;
Para los usuarios familiarizados con Linux, pueden editar los archivos de forma manual.&lt;br /&gt;
&lt;br /&gt;
Para los usuarios que no están familiarizados con Linux, ASL y Linux CLI (command line interface), pueden seguir paso a paso el procedimiento:&lt;br /&gt;
&lt;br /&gt;
Escribe  sudo asl-menu  como se muestra en el siguiente ejemplo:&lt;br /&gt;
&lt;br /&gt;
repeater@repeater:~$ sudo asl-menu&lt;br /&gt;
&lt;br /&gt;
Esto cargará el menú de configuración de AllStarLink.&lt;br /&gt;
[[File:Asl menu main screen.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
== Configuración del software AllStarLink en tu computadora ==&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción 1.&lt;br /&gt;
[[File:002_first_time.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Como es la primer ves que configuras tu nodo, responde Yes para configurar la contraseña para el usuario &amp;quot;root&amp;quot;. No olvides tomar nota del usuario root y su contraseña.&lt;br /&gt;
[[File:003_password.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ahora nos preguntará si deseamos cambiar la contraseña del usuario &amp;quot;repeater&amp;quot;, la cual ya habíamos cambiado, así que responde No, salvo que nuevamnete la quieas cambiar. No olvides tomar nota.&lt;br /&gt;
[[File:004_repeater_password.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
A continuación haremos el ajuste de la zona horaria.&lt;br /&gt;
[[File:005_timezone.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona el continente donde estará el nodo.&lt;br /&gt;
[[File:006_continent.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la ciudad horaria donde estará el nodo.&lt;br /&gt;
[[File:007_city.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
A continuación podremos cambiar el nombre de nuestro nodo, el cual por default se llama repeater.&lt;br /&gt;
[[File:008_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Responde Yes para poder hacer los cambios.&lt;br /&gt;
[[File:009_edit_hostname.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ingresa el nombre que le quieres dar a tu equipo.&lt;br /&gt;
[[File:010_hostname.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Si deseas configurarlo en un dominio, ingresalo, de lo contrario solo da enter.&lt;br /&gt;
[[File:011_domain_name.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok en el mensaje donde se confirman los cambios que acabas de realizar.&lt;br /&gt;
[[File:012_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ahora podremos hacer los cambios del DHCP, da Ok.&lt;br /&gt;
[[File:013_dhcp.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Nuevamente da Ok&lt;br /&gt;
[[File:014_network.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Para configurar la red como DHCP o IP Estática, selecciona Yes.&lt;br /&gt;
[[File:015_dhcp_static.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona si deseas DHCP con la D o IP estática con la S. En este ejemplo, seleccioné D, así que la IP será dinámica.&lt;br /&gt;
[[File:016_dhcp_static.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok al mensaje.&lt;br /&gt;
[[File:017_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok al mensaje.&lt;br /&gt;
[[File:018_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok al mensaje.&lt;br /&gt;
[[File:019_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
A continuación ingresaremos el número de nodo. Selecciona la opción A1 en el menú.&lt;br /&gt;
[[File:020_a_menu_a1.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N1 en el menú.&lt;br /&gt;
[[File:021_n_menu_n1.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ingresa el número de nodo que deseas configurar. Este es el que previamente se te asingnó en el sitio de AllStarLink.&lt;br /&gt;
[[File:022_node_number.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N2 en el menú.&lt;br /&gt;
[[File:023_n_menu_n2.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ingresa la contraseña para el número de nodo que deseas configurar. Este es el que previamente ingresaste en el sitio de AllStarLink para tu número de nodo.&lt;br /&gt;
[[File:024_node_password.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N3 en el menú.&lt;br /&gt;
[[File:025_n_menu_n3.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ingresa el indicativo que utilizará este nodo para identificarse, debe ser el mismo que configuraste en tu nodo en el sitio AllStarLink.&lt;br /&gt;
[[File:026_callsign.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N4 en el menú.&lt;br /&gt;
[[File:027_n_menu_n4.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción I1 en el menú.&lt;br /&gt;
[[File:028_i_menu_i1.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da ok.&lt;br /&gt;
[[File:029_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N5 en el menú.&lt;br /&gt;
[[File:030_n_menu_n5.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Si tu nodo operará en simplex como Hot spot o enlazado a un repetidor selecciona 1.&lt;br /&gt;
Si tu nodo será parte del control de un repetidor selecciona 2.&lt;br /&gt;
[[File:031_rptr_mode.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N6 en el menú.&lt;br /&gt;
[[File:032_n_menu_n6.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ingresa un password que utilizarás para controlar tu nodo desde una página web.&lt;br /&gt;
[[File:033_password.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:034_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:036_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción N9 en el menú.&lt;br /&gt;
[[File:037_n_menu_n9.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:038_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:039_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:040_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:041_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:042_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:043_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:044_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción back en el menú.&lt;br /&gt;
[[File:045_n_menu_back.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción AZ en el menú.&lt;br /&gt;
[[File:046_a_menu_az.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Corrobora que los datos que configuraste coinciden con tus notas y da Ok.&lt;br /&gt;
[[File:047_review.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Responde Yes para respaldar la configuración que acabamos de hacer.&lt;br /&gt;
[[File:048_backup.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:049_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:050_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Da Ok.&lt;br /&gt;
[[File:051_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción Exit en el menú.&lt;br /&gt;
[[File:052_a-menu_exit.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Responde Yes, ya que previamente guardamos los cambios.&lt;br /&gt;
[[File:053_exit.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Si deseas que al iniciar tu raspberry entre a este menu responde Yes, de lo contrario responde No.&lt;br /&gt;
[[File:054_select_menu_sartup.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Si respondiste que No, recuerda que puedes volver a entrar, escribe  sudo asl-menu  como se muestra en el siguiente ejemplo:&lt;br /&gt;
&lt;br /&gt;
repeater@repeater:~$ sudo asl-menu&lt;br /&gt;
&lt;br /&gt;
[[File:055_message.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Ahora el sistema se reiniciará para aplicar los cambios en la configuración. Da Ok.&lt;br /&gt;
[[File:056_reboot.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
== Ajustes de audio AllStarLink ==&lt;br /&gt;
&lt;br /&gt;
Escribe  sudo asl-menu  como se muestra en el siguiente ejemplo:&lt;br /&gt;
&lt;br /&gt;
repeater@repeater:~$ sudo asl-menu&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción 4.&lt;br /&gt;
[[File:101_asl_menu_4.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Con la opción F, podemos probar si el nodo activa correctamente el PTT de tu radio o repetidor.&lt;br /&gt;
&lt;br /&gt;
Con la opción 2, podemos ajustar el volumen de audio que va del radio/repetidor hacia el nodo con la ayuda de un medidor gráfico.&lt;br /&gt;
Para ello, transmite con otro radioun tono o voz y ajusta los valores entre 0 y 999 y da Enter para que se apliquen. si no ingresas ningún valor y das Enter, saldrás de esta opción, dejando el último valor selecionado.&lt;br /&gt;
&lt;br /&gt;
Con la opción T, podemos activar la transmisión de un tono para ajustar los niveles de transmisión del nodo al radio.&lt;br /&gt;
&lt;br /&gt;
Con la opción 3, podemos ajustar el volumen de audio que va del nodo hacia el radio/repetidor.&lt;br /&gt;
Para ello, ajusta los valores entre 0 y 999 y da Enter para que se apliquen. habrá un tono de 5 segundos para que pruebes. Si no ingresas ningún valor y das Enter, saldrás de esta opción, dejando el último valor selecionado. al final desactiva la función de transmisión de tono con la T.&lt;br /&gt;
&lt;br /&gt;
Una ves realizados los ajustes, guardalos con la opción W y Enter.&lt;br /&gt;
&lt;br /&gt;
Para salir del menu selecciona la opción 0 (zero) y Enter.&lt;br /&gt;
&lt;br /&gt;
== Ajustes de polaridad PTT y COS ==&lt;br /&gt;
&lt;br /&gt;
Si tu radio/repetidor, requiere que se invierta la polaridad de los pines PTT, COS/CTCSS entra al menú principal de ASL, selecciona la opción 6.&lt;br /&gt;
[[File:103_asl_menu_6.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción I.&lt;br /&gt;
[[File:104_config_menu_i.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Aparecerá un archivo de texto en el cual podremos hacer los cambios de la polaridad de la siguiente forma:&lt;br /&gt;
&lt;br /&gt;
Para invertir PTT:&lt;br /&gt;
Busca una línea con la palabra invertptt =  y cambia el valor. &lt;br /&gt;
0 = Transmite al poner el pin a tierra.&lt;br /&gt;
1 = Transmite al poner como circuito abierto.&lt;br /&gt;
[[File:105_invertptt.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Para invertir COS/CTCSS:&lt;br /&gt;
Busca una línea con la palabra carrierfrom =  y cambia el valor. &lt;br /&gt;
Haz lo mismo con la línea con la palabra ctcssfrom =  y cambia el valor. &lt;br /&gt;
no = No detecta carrier.&lt;br /&gt;
usb = Activo en alto.&lt;br /&gt;
usbinvert = activo en bajo.&lt;br /&gt;
[[File:106_invertcos.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Al terminar de hacer los cambios presiona CTRL + X y luego presiona Y y Enter. Regresarás al menú y selecciona back.&lt;br /&gt;
[[File:107_asl_menu_9.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Selecciona la opción G para que se reinicie el programa de AllStarLink y se apliquen los cambios. Posteriormente selecciona back.&lt;br /&gt;
[[File:107_asl_menu_9.png|none|thumb|640x640px]]&lt;br /&gt;
&lt;br /&gt;
Con esto tu nodo deberá estar operando.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Proxy&amp;diff=1635</id>
		<title>Proxy</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Proxy&amp;diff=1635"/>
		<updated>2020-04-08T18:06:44Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Manual Configuration for Server Proxy Clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Description/Explanation ==&lt;br /&gt;
&lt;br /&gt;
Occasionally there is a need to have an Allstar Link Server in an 'itinerant' location (one that is non-permanent and possibly even moving). In such a situation it is certainly quite likely that the device's IP address may change quite often (perhaps even several times per hour or more). Also, the form of IP connectivity available to the device may not necessarily be suitable for normal Server operation (such as being behind NAT translation, firewalls, etc. that the Server owner has no control of). Normal operation requires farily stable IP addressing and full public access to at least UDP port 4569 (for IAX2 connectivity) to the Server. Typical examples of 'itinerant' environments include setting up a tiny portable node in a hotel room, utilizing the Internet connectivity provided by the hotel, or having a mobile node on a mobile data network that provides connectivity via some sort of NAT arrangement.&lt;br /&gt;
&lt;br /&gt;
In a situation like this, it is possible to set up a Proxy relationship between such a Server and a Server located in a permanent position with a permanent IP address and good connectivity. For the purposes of explanation, the Server in the 'itinerant' location/situation will be referred to as the Server Proxy Client, and the Server that is in the Permanent/Stable location/situation will be referred to as the Server Proxy Server.&lt;br /&gt;
&lt;br /&gt;
When such a relationship exists, all inbound traffic destined for Nodes on the Server Proxy Client is directed to the Server Proxy Server, which accepts and authenticates the traffic, then forwards it off to the Server Proxy Client via a direct (non-public) peering arrangement. Any traffic outbound from Nodes on the Server Proxy Client is directed to the Server Proxy Server, which forwards it to the appropriate location, thus requiring the Server Proxy Client only to be 'reachable' by the Server Proxy Server, and not all nodes on the entire Internet.&lt;br /&gt;
&lt;br /&gt;
== Portal-Based Configuration for Server Proxy Clients ==&lt;br /&gt;
&lt;br /&gt;
We don't support configuration of clients in the portal.  The best way is to set it up manually, and then add the IP of the proxy server in the portal for the client.  &lt;br /&gt;
&lt;br /&gt;
If you don't want to do this (or if your proxy server is quasi-static), and you have control of the proxy server, have the proxy server use your node number and password and register it to register.allstarlink.org&lt;br /&gt;
&lt;br /&gt;
In iax.conf on the proxy server:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
register=NODE#:PASSWORD@register.allstarlink.org:4569 &lt;br /&gt;
Where node # is the number/pass of the proxied node.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manual Configuration for Server Proxy Clients ==&lt;br /&gt;
&lt;br /&gt;
First, you must configure a peering arrangement with the Proxy Server. &lt;br /&gt;
&lt;br /&gt;
This is done by adding the following into the /etc/asterisk/iax.conf file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-proxy]&lt;br /&gt;
type=user&lt;br /&gt;
deny=0.0.0.0/0.0.0.0&lt;br /&gt;
permit=&amp;lt;Server Proxy Server IP Address&amp;gt;/255.255.255.255&lt;br /&gt;
context=radio-secure-proxy&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=g726aal2&lt;br /&gt;
transfer=no&lt;br /&gt;
&lt;br /&gt;
[radio-proxy-out]&lt;br /&gt;
type=peer&lt;br /&gt;
host=&amp;lt;Server Proxy Server IP Address&amp;gt;&lt;br /&gt;
username=&amp;lt;First (or only) node number on this Server to be proxied&amp;gt;&lt;br /&gt;
secret=&amp;lt;Agreed-Upon Password for specified node (for Proxy peering)&amp;gt;&lt;br /&gt;
auth=md5&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=g726aal2&lt;br /&gt;
transfer=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You must put in an appropriate register statement for all nodes on the &lt;br /&gt;
Server Proxy Client allowing registration with the Server Proxy Server&lt;br /&gt;
using Agreed-Upon Passwords.&lt;br /&gt;
&lt;br /&gt;
If the Server Proxy Server is the Allstar Network Registration Server, then&lt;br /&gt;
the IP Address will be 67.215.233.178, the Username and Password will be node number&lt;br /&gt;
and node password of one of the nodes on the system that is registered with it, and&lt;br /&gt;
no additional registration line is necessary, since there already is one for that&lt;br /&gt;
node.&lt;br /&gt;
&lt;br /&gt;
The following needs to be added to the /etc/asterisk/rpt.conf file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[nodes]&lt;br /&gt;
&amp;lt;Stuff that was already there, etc....&amp;gt;&lt;br /&gt;
_20XX = radio-proxy-out/0%s&lt;br /&gt;
_20XXX = radio-proxy-out/0%s&lt;br /&gt;
_21XX = radio-proxy-out/0%s&lt;br /&gt;
_21XXX = radio-proxy-out/0%s&lt;br /&gt;
_22XX = radio-proxy-out/0%s&lt;br /&gt;
_22XXX = radio-proxy-out/0%s&lt;br /&gt;
_23XX = radio-proxy-out/0%s&lt;br /&gt;
_23XXX = radio-proxy-out/0%s&lt;br /&gt;
_24XX = radio-proxy-out/0%s&lt;br /&gt;
_24XXX = radio-proxy-out/0%s&lt;br /&gt;
_25XX = radio-proxy-out/0%s&lt;br /&gt;
_25XXX = radio-proxy-out/0%s&lt;br /&gt;
_26XX = radio-proxy-out/0%s&lt;br /&gt;
_26XXX = radio-proxy-out/0%s&lt;br /&gt;
_27XXX = radio-proxy-out/0%s&lt;br /&gt;
_27XXXX = radio-proxy-out/0%s&lt;br /&gt;
_28XXX = radio-proxy-out/0%s&lt;br /&gt;
_28XXXX = radio-proxy-out/0%s&lt;br /&gt;
_29XXX = radio-proxy-out/0%s&lt;br /&gt;
_29XXXX = radio-proxy-out/0%s&lt;br /&gt;
_4XXXX = radio-proxy-out/0%s&lt;br /&gt;
_4XXXXX = radio-proxy-out/0%s&lt;br /&gt;
_5XXXX = radio-proxy-out/0%s&lt;br /&gt;
_5XXXXX = radio-proxy-out/0%s&lt;br /&gt;
; note the . wildcard doesn't work here in rpt.conf&lt;br /&gt;
;_2. = radio-proxy-out/0%s  don't work like extensions&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following needs to be added to the /etc/asterisk/extensions.conf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-secure-proxy]&lt;br /&gt;
exten =&amp;gt; _0X.,1,Goto(allstar-sys|${EXTEN:1}|1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plus, for each node on the system (also to be put in the radio-secure-proxy section):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exten =&amp;gt; &amp;lt;Node Number&amp;gt;,1,rpt,&amp;lt;Node Number&amp;gt;|X&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Configuration for Server Proxy Servers=&lt;br /&gt;
&lt;br /&gt;
First, you must configure a peering arrangement with the Server Proxy Client. &lt;br /&gt;
This is done by adding the following into the /etc/asterisk/iax.conf file for each node in the peering arrangement:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&amp;lt;Node Number&amp;gt;]&lt;br /&gt;
type=friend&lt;br /&gt;
host=dynamic&lt;br /&gt;
username=radio-proxy&lt;br /&gt;
secret=&amp;lt;Agreed-Upon Password for the Proxy peering&amp;gt;&lt;br /&gt;
auth=md5&lt;br /&gt;
context=radio-in&lt;br /&gt;
disallow=all&lt;br /&gt;
allow=g726aal2&lt;br /&gt;
transfer=no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following needs to be done to the /etc/asterisk/extensions.conf file:&lt;br /&gt;
&lt;br /&gt;
The following section needs to be added:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-in]&lt;br /&gt;
exten =&amp;gt; _0N.,1,Rpt(${EXTEN:1}|F)&lt;br /&gt;
exten =&amp;gt; _0N.,n,Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The following section needs to replace the existing [radio-secure] section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-secure]&lt;br /&gt;
exten=_20XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_21XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_22XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_23XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_24XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_25XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_26XX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_27XXX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_28XXX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_29XXX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_4XXXX,1,Rpt,${EXTEN}&lt;br /&gt;
exten=_5XXXX,1,Rpt,${EXTEN}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The following needs to be added to the [allstar-sys] section:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
exten =&amp;gt; _9.,1,Rpt(${EXTEN:2}|X|${EXTEN:1:1})&lt;br /&gt;
exten =&amp;gt; _9.,n,Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following needs to be added to the /etc/asterisk/rpt.conf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[proxy]&lt;br /&gt;
ipaddr=&amp;lt;Public IP address of this Server Proxy Server&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Server Proxy Server will be able to determine (from the IP address as distributed in the /var/lib/asterisk/rpt_extnodes file), the nodes for which it needs to provide Proxy service.&lt;br /&gt;
&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Event_Management&amp;diff=1608</id>
		<title>Event Management</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Event_Management&amp;diff=1608"/>
		<updated>2020-02-21T07:30:45Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:How to]]&lt;br /&gt;
As of app_rpt version 0.259, 10/9/2010, there exists a method by which a user can specify actions to be taken when certain events occur, such as transitions in receive and transmit keying, presence and modes of links, and external inputs, such as GPIO pins on the URI (or similar USB devices).&lt;br /&gt;
&lt;br /&gt;
Bear in mind, this now also includes the ability to set the condition of external devices, such&lt;br /&gt;
&lt;br /&gt;
as output pins on a URI (or similar USB devices), or a Parallel Printer Port. &lt;br /&gt;
&lt;br /&gt;
'''[[Manipulating GPIO|Manipulating GPIO (and Parallel Printer Port) signals within chan_usbradio and chan_simpleusb.]]''' &lt;br /&gt;
&lt;br /&gt;
The actions to be taken, and methods and steps required for doing so are specified in the rpt.conf&lt;br /&gt;
file under the [events] section (or other named section, settable with events=sectionname under the&lt;br /&gt;
node number section also in rpt.conf).&lt;br /&gt;
&lt;br /&gt;
This subsystem utilizes Asterisk channel variables (or global variables if you dare) to indicate the&lt;br /&gt;
&lt;br /&gt;
state of various signals and modes and are named as such:&lt;br /&gt;
 RPT_RXKEYED -- Set to 1 when the node's main (RF) receiver is receiving a valid signal&lt;br /&gt;
 RPT_TXKEYED -- Set to 1 when the node's main (RF) transmitter is transmitting&lt;br /&gt;
 RPT_NUMLINKS -- Count of links currently connected to node&lt;br /&gt;
 RPT_LINKS -- List of Node numbers currently linked to this node and their mode and receive keying&lt;br /&gt;
     status, as follows:&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;NUMLINKS&amp;gt;,&amp;lt;MODE&amp;gt;&amp;lt;NODEMUM&amp;gt;[,&amp;lt;MODE&amp;gt;&amp;lt;NODEMUM&amp;gt;...]&lt;br /&gt;
 &lt;br /&gt;
     For example: 2,T2000,R2001 would indicate that there are 2 nodes linked currently,&lt;br /&gt;
        first one is node 2000 in Transceive mode, and the second one is node 2001 in Receive-Only&lt;br /&gt;
        (monitor) mode.&lt;br /&gt;
 &lt;br /&gt;
 RPT_NUMALINKS -- Count of adjacent links currently connected to node&lt;br /&gt;
 RPT_ALINKS -- List of Node numbers currently linked adjacent to this node and their mode and receive&lt;br /&gt;
     keying status, as follows:&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;NUMALINKS&amp;gt;,&amp;lt;NODEMUM&amp;gt;&amp;lt;MODE&amp;gt;&amp;lt;RXKEYED&amp;gt;[,&amp;lt;NODEMUM&amp;gt;&amp;lt;MODE&amp;gt;&amp;lt;RXKEYED&amp;gt;...]&lt;br /&gt;
 &lt;br /&gt;
     For example: 2,2000TU,2001RK would indicate that there are 2 adjacent nodes linked currently,&lt;br /&gt;
         first one is node 2000 in Transceive mode, and is not presently sending a keying&lt;br /&gt;
         signal towards this node, and the second one is node 2001 in Receive-Only (monitor)&lt;br /&gt;
         mode, and is presently sending a keying signal towards this node.&lt;br /&gt;
 &lt;br /&gt;
 Adjacent nodes are ones that are directly connected to this node. This differs from the RPT_LINKS&lt;br /&gt;
 in that the RPT_LINKS is a list of all nodes, whether connected directly, or connected through&lt;br /&gt;
 a node that is connected directly. The keying information is not given with the RPT_LINKS because&lt;br /&gt;
 in that context it is meaningless.&lt;br /&gt;
There may also be others included from external devices/sources, such as the URI (or similar USB&lt;br /&gt;
&lt;br /&gt;
devices), or a Parallel Printer Port that will appear if so configured (within the configuration&lt;br /&gt;
&lt;br /&gt;
for that particular device),&lt;br /&gt;
&lt;br /&gt;
such as:&lt;br /&gt;
 RPT_URI_GPIO1 -- This would be the GPIO 1 pin, if configured as an input.&lt;br /&gt;
 RPT_URI_GPIO4 -- This would be the GPIO 4 pin, if configured as an input.&lt;br /&gt;
 RPT_PP12 -- This would be the Parallel Printer Port, pin 12 (input)&lt;br /&gt;
 &lt;br /&gt;
 These are set to &amp;quot;0&amp;quot; or &amp;quot;1&amp;quot; (the state of the input pin).&lt;br /&gt;
Each line of the [events] section is specified as follows:&lt;br /&gt;
 &amp;lt;action-spec&amp;gt; = &amp;lt;action&amp;gt;|&amp;lt;type&amp;gt;|&amp;amp;ltvar-spec&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 If action is 'V' (for &amp;quot;setting variable&amp;quot;), then action-spec is the variable being set.&lt;br /&gt;
 If action is 'G' (for &amp;quot;setting global variable&amp;quot;), then action-spec is the global variable being set.&lt;br /&gt;
 If action is 'F' (for &amp;quot;function&amp;quot;), then action-spec is a DTMF function to be executed (if result is 1).&lt;br /&gt;
 If action is 'C' (for &amp;quot;rpt command&amp;quot;), then action-spec is a raw rpt command to be executed (if &lt;br /&gt;
     result is 1).&lt;br /&gt;
 If action is 'S' (for &amp;quot;shell command&amp;quot;), then action-spec is a shell command to be executed (if &lt;br /&gt;
     result is 1).&lt;br /&gt;
 &lt;br /&gt;
 If type is 'E' (for &amp;quot;evaluate statement&amp;quot; (or perhaps &amp;quot;equals&amp;quot;) ) then the var-spec is a full statement&lt;br /&gt;
     containing expressions, variables and operators per the expression evaluation built into Asterisk.&lt;br /&gt;
 If type is 'T' (for &amp;quot;going True&amp;quot;), var-spec is a single (already-defined) variable name, and the result&lt;br /&gt;
     will be 1 if the varible has just gone from 0 to 1.&lt;br /&gt;
 If type is 'F' (for &amp;quot;going False&amp;quot;), var-spec is a single (already-defined) variable name, and the&lt;br /&gt;
     result will be 1 if the varible has just gone from 1 to 0.&lt;br /&gt;
 If type is 'N' (for &amp;quot;no change&amp;quot;), var-spec is a single (already-defined) variable name, and the result&lt;br /&gt;
     will be 1 if the varible has not changed.&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
Set the channel variable 'MYVAR' true if main receiver has valid signal and transmitter is&lt;br /&gt;
&lt;br /&gt;
not transmitting. Presumable this variable will be used in a later statement for something.&lt;br /&gt;
 MYVAR = v|e|${RPT_RXKEYED} &amp;amp; !${RPT_TXKEYED}&lt;br /&gt;
Have the system give the time of day after all links are disconnected. This performs the&lt;br /&gt;
&lt;br /&gt;
specified rpt command when the 'RPT_NUMLINKS' variable goes from true to false, and therefore&lt;br /&gt;
&lt;br /&gt;
happens when all links are disconnected (if and only if some were connected previously).&lt;br /&gt;
 status,2 = c|f|RPT_NUMLINKS&lt;br /&gt;
 &lt;br /&gt;
 Note: although 'RPT_NUMLINKS' ''is'' an Integer count of links, it can also be treated as a&lt;br /&gt;
 boolean, since non-zero values evaluate to the same as '1'.&lt;br /&gt;
Execute the DTMF command '*1234' (whatever the heck that is) when node 2000 connects to this node.&lt;br /&gt;
 TEMPVAR = v|e|${RPT_LINKS} =~ &amp;quot;\&amp;quot;,2000.\&amp;quot;&amp;quot;&lt;br /&gt;
 *1234 = f|t|TEMPVAR&lt;br /&gt;
 &lt;br /&gt;
 Note: We are interested in executing the function ONLY when the node connects. Therefore, you must&lt;br /&gt;
 define a variable the meets the condition you are looking for in general (in this case, node 2000&lt;br /&gt;
 being connected, then you have to execute the desired function when that variable goes from 1 to 0&lt;br /&gt;
 (changes to false).&lt;br /&gt;
 &lt;br /&gt;
 Any time you are using regex to look for a node number int the 'RPT_LINKS' variable, you must&lt;br /&gt;
 put a comma in front of the qualifying string to make sure that it does not match some other&lt;br /&gt;
 node number that has the desired information (in this case, the digits '2000') within a longer&lt;br /&gt;
 node number.&lt;br /&gt;
Get a detailed directory listing of the '/tmp' directory, and put its output into the file&lt;br /&gt;
&lt;br /&gt;
'/tmp/example.txt' every time node 2001 is connected to, and stops indicating keying towards our node&lt;br /&gt;
&lt;br /&gt;
(not that anyone would ever really want to do that... its just an example).&lt;br /&gt;
 TEMPVAR = v|e|${RPT_ALINKS} =~ &amp;quot;\&amp;quot;,2001[TRC]K\&amp;quot;&amp;quot;&lt;br /&gt;
 ls -l /tmp &amp;gt; /tmp/example.txt = s|f|TEMPVAR&lt;br /&gt;
If you wish to set channel variable(s) for a node from the CLI, you may use the following command:&lt;br /&gt;
 *CLI&amp;gt; rpt setvar &amp;lt;nodenum&amp;gt; &amp;lt;name=value&amp;gt; [&amp;lt;name=value&amp;gt;...]&lt;br /&gt;
For Example, this would set the &amp;quot;MYVAR&amp;quot; variable to &amp;quot;1&amp;quot; for node 2000:&lt;br /&gt;
 *CLI&amp;gt; rpt setvar 2000 MYVAR=1&lt;br /&gt;
If you wish to display all the variables for a node, use the following command:&lt;br /&gt;
 *CLI&amp;gt; rpt showvars &amp;lt;nodenum&amp;gt;&lt;br /&gt;
Also, a channel variable for a node may be set from the Asterisk Dialplan as follows:&lt;br /&gt;
 rpt(&amp;lt;nodenum&amp;gt;,V,&amp;lt;name=value&amp;gt;)&lt;br /&gt;
For example, for extension 1234 priority 5, set variable 'MYVAR' to '0' for node 2000:&lt;br /&gt;
 exten =&amp;gt; 1234,5,rpt(2000,V,MYVAR=0)&lt;br /&gt;
Granted, there may very well be some things (such as interesting information that can be expressed&lt;br /&gt;
within this subsystem) that has been overlooked, and any suggestions and/or comments regarding this&lt;br /&gt;
whole thing would be much appreciated.&lt;br /&gt;
&lt;br /&gt;
This also opens a completely new avenue of customization and individual creativity for each system&lt;br /&gt;
implementer. There are many innovative things that can be done with this. Also there are many just plain&lt;br /&gt;
silly ones, such as connecting your doorbell to one the input pins on the URI, and having the system&lt;br /&gt;
connect to your favorite Echolink node or something when someone rings the doorbell.&lt;br /&gt;
&lt;br /&gt;
At some point there should be a contest to see who can come up with the most utterly ludicrous&lt;br /&gt;
appication of this subsystem. There are many possibilities to explore in this area. Hint: you will&lt;br /&gt;
get '''major''' extra bonus points if it involves the script re-writing itself (self-modifying&lt;br /&gt;
code, that exhibits at least plausibility of long-term stability (going to poo-poo in less then&lt;br /&gt;
1000 iterations is ''just'' not acceptible)).&lt;br /&gt;
&lt;br /&gt;
In any case, please contribute whatever wonderful configurations you come up with so that all users&lt;br /&gt;
may have the benefits of all the wonderful ideas everyone comes up with.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Extentions.conf&amp;diff=1597</id>
		<title>Extentions.conf</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Extentions.conf&amp;diff=1597"/>
		<updated>2020-01-27T18:44:54Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= extensions.conf =&lt;br /&gt;
The extensions.conf config file is used to route incoming connections from remote nodes or connections to the correct node number in app_rpt.  It also is used to route outgoing autopatch connections to various channels and VOIP termination providers.&lt;br /&gt;
&lt;br /&gt;
= Contexts used by app-rpt=&lt;br /&gt;
&lt;br /&gt;
[radio-secure] - &lt;br /&gt;
&lt;br /&gt;
[iax-client] - used by IAX users&lt;br /&gt;
&lt;br /&gt;
[radio] - used for IAX connections between nodes&lt;br /&gt;
&lt;br /&gt;
[check_route] - used to check the call routing for autopatch&lt;br /&gt;
&lt;br /&gt;
[pstn-out]&lt;br /&gt;
&lt;br /&gt;
[allstar-sys] - used by the phone portal&lt;br /&gt;
&lt;br /&gt;
[allstar-public] - used by web transceiver&lt;br /&gt;
&lt;br /&gt;
[radio-in]&lt;br /&gt;
&lt;br /&gt;
Here is an example of how extensions.conf is used to handle incoming connections for a single node:&lt;br /&gt;
 [radio-secure] &lt;br /&gt;
 exten =&amp;gt; 1234,1,rpt,1234&lt;br /&gt;
In the above case, two nodes are defined as asterisk extensions in a “context” called radio-secure defined by a stanza [radio-secure] .  An incoming connection directed to extension 1234 will end up calling app_rpt (rpt) with a value of 1234 which should a node number defined in rpt.conf.&lt;br /&gt;
[[Category:Node Configuration]]&lt;br /&gt;
[[Category:Config Files]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Blacklist_or_whitelist&amp;diff=1596</id>
		<title>Blacklist or whitelist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Blacklist_or_whitelist&amp;diff=1596"/>
		<updated>2020-01-27T18:32:35Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Web Portal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Occasionally it becomes necessary to limit connections to your node. With this configuration you can either blacklist (block) or whitelist (allow) inbound connections. Outbound connections are not blocked. Only one list can be used at a same time and it applies to all nodes on the server. If using the whitelist all nodes on the local server (127.0.0.1) are allowed. The lists are managed with these Asterisk CLI commands:&lt;br /&gt;
&lt;br /&gt;
* Blacklist&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put blacklist 1998 &amp;quot;any comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database del blacklist 1998&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show blacklist&amp;lt;/code&amp;gt;&lt;br /&gt;
* Whitelist&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put whitelist 1000 &amp;quot;any comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database del whitelist 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show whitelist&amp;lt;/code&amp;gt;&lt;br /&gt;
*Both&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': WA3DSP wrote a [https://hamvoip.org/downloads/node-ban-allow.sh menu script] for the above commands. &lt;br /&gt;
&lt;br /&gt;
==Blacklist Configuration==&lt;br /&gt;
Add this to extensions.conf just below the [radio-secure] context.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-secure]&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
; To add a node to the blacklist: &lt;br /&gt;
; database put blacklist 1998 “any comment”&lt;br /&gt;
; to remove:&lt;br /&gt;
; database del blacklist 1998&lt;br /&gt;
; to list&lt;br /&gt;
; database show blacklist&lt;br /&gt;
 &lt;br /&gt;
[blacklist]&lt;br /&gt;
exten =&amp;gt; _XXXX!,1,NoOp(${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[${DB_EXISTS(blacklist/${CALLERID(num)})}]?blocked)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,Goto(radio-secure,${EXTEN},1)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n(blocked),Hangup&lt;br /&gt;
&lt;br /&gt;
[whitelist]&lt;br /&gt;
exten =&amp;gt; _XXXX!,1,NoOp(${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,NoOp(${IAXPEER(CURRENTCHANNEL)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[&amp;quot;${IAXPEER(CURRENTCHANNEL)}&amp;quot; = &amp;quot;127.0.0.1&amp;quot;]?radio-secure,${EXTEN},1)  ;permit local IPs&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[${DB_EXISTS(whitelist/${CALLERID(num)})}]?radio-secure,${EXTEN},1)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In iax.conf modify the [radio] context by adding and/or commenting context = lines. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio]&lt;br /&gt;
type = user&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = ulaw&lt;br /&gt;
allow = adpcm&lt;br /&gt;
allow = gsm&lt;br /&gt;
codecpriority = host&lt;br /&gt;
;context = radio-secure&lt;br /&gt;
;context = whitelist&lt;br /&gt;
context = blacklist&lt;br /&gt;
transfer = no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Web Portal ==&lt;br /&gt;
If you want to have a blacklist for the web portal users you will need to modify the [allstar-public] context in extentions.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[allstar-public]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,1,Ringing&lt;br /&gt;
exten =&amp;gt; s,n,Set(RESP=${CURL(https://register.allstarlink.org/cgi-bin/authwebphone.pl?${CALLERID(name)})})&lt;br /&gt;
exten =&amp;gt; s,n,Set(NODENUM=${CALLERID(number)})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:1}&amp;quot; = &amp;quot;?&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:1}&amp;quot; = &amp;quot;&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:5}&amp;quot; != &amp;quot;OHYES&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLSIGN=${RESP:5})&lt;br /&gt;
exten =&amp;gt; s,n,Wait(3)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(rpt/node|noanswer)&lt;br /&gt;
exten =&amp;gt; s,n,Saydigits(${NODENUM})&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLERID(name)=${CALLSIGN})&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLERID(num)=0)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[${DB_EXISTS(blacklist/${CALLERID(name)})}]?blacklisted)&lt;br /&gt;
exten =&amp;gt; s,n,Rpt(${NODENUM}|X)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Answer&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Wait(1)&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Hangup&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Playback(privacy-you-are-blacklisted)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Playback(goodbye)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Wait(1)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whitelist is not implemented here, but it should be easy to do&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To block a web-portal user you will need to add the callsign in capital letters to the blacklist.  &lt;br /&gt;
* &amp;lt;code&amp;gt;*CLI&amp;gt; database put blacklist KM6RPT &amp;quot;no comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:How to]]&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Blacklist_or_whitelist&amp;diff=1595</id>
		<title>Blacklist or whitelist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Blacklist_or_whitelist&amp;diff=1595"/>
		<updated>2020-01-27T18:31:52Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Web Portal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Occasionally it becomes necessary to limit connections to your node. With this configuration you can either blacklist (block) or whitelist (allow) inbound connections. Outbound connections are not blocked. Only one list can be used at a same time and it applies to all nodes on the server. If using the whitelist all nodes on the local server (127.0.0.1) are allowed. The lists are managed with these Asterisk CLI commands:&lt;br /&gt;
&lt;br /&gt;
* Blacklist&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put blacklist 1998 &amp;quot;any comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database del blacklist 1998&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show blacklist&amp;lt;/code&amp;gt;&lt;br /&gt;
* Whitelist&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put whitelist 1000 &amp;quot;any comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database del whitelist 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show whitelist&amp;lt;/code&amp;gt;&lt;br /&gt;
*Both&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': WA3DSP wrote a [https://hamvoip.org/downloads/node-ban-allow.sh menu script] for the above commands. &lt;br /&gt;
&lt;br /&gt;
==Blacklist Configuration==&lt;br /&gt;
Add this to extensions.conf just below the [radio-secure] context.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-secure]&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
; To add a node to the blacklist: &lt;br /&gt;
; database put blacklist 1998 “any comment”&lt;br /&gt;
; to remove:&lt;br /&gt;
; database del blacklist 1998&lt;br /&gt;
; to list&lt;br /&gt;
; database show blacklist&lt;br /&gt;
 &lt;br /&gt;
[blacklist]&lt;br /&gt;
exten =&amp;gt; _XXXX!,1,NoOp(${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[${DB_EXISTS(blacklist/${CALLERID(num)})}]?blocked)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,Goto(radio-secure,${EXTEN},1)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n(blocked),Hangup&lt;br /&gt;
&lt;br /&gt;
[whitelist]&lt;br /&gt;
exten =&amp;gt; _XXXX!,1,NoOp(${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,NoOp(${IAXPEER(CURRENTCHANNEL)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[&amp;quot;${IAXPEER(CURRENTCHANNEL)}&amp;quot; = &amp;quot;127.0.0.1&amp;quot;]?radio-secure,${EXTEN},1)  ;permit local IPs&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[${DB_EXISTS(whitelist/${CALLERID(num)})}]?radio-secure,${EXTEN},1)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In iax.conf modify the [radio] context by adding and/or commenting context = lines. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio]&lt;br /&gt;
type = user&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = ulaw&lt;br /&gt;
allow = adpcm&lt;br /&gt;
allow = gsm&lt;br /&gt;
codecpriority = host&lt;br /&gt;
;context = radio-secure&lt;br /&gt;
;context = whitelist&lt;br /&gt;
context = blacklist&lt;br /&gt;
transfer = no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Web Portal ==&lt;br /&gt;
If you want to have a blacklist for the web portal users you will need to modify the [allstar-public] context in extentions.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[allstar-public]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,1,Ringing&lt;br /&gt;
exten =&amp;gt; s,n,Set(RESP=${CURL(https://register.allstarlink.org/cgi-bin/authwebphone.pl?${CALLERID(name)})})&lt;br /&gt;
exten =&amp;gt; s,n,Set(NODENUM=${CALLERID(number)})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:1}&amp;quot; = &amp;quot;?&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:1}&amp;quot; = &amp;quot;&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:5}&amp;quot; != &amp;quot;OHYES&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLSIGN=${RESP:5})&lt;br /&gt;
exten =&amp;gt; s,n,Wait(3)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(rpt/node|noanswer)&lt;br /&gt;
exten =&amp;gt; s,n,Saydigits(${NODENUM})&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLERID(name)=${CALLSIGN})&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLERID(num)=0)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[${DB_EXISTS(blacklist/${CALLERID(name)})}]?blacklisted)&lt;br /&gt;
exten =&amp;gt; s,n,Rpt(${NODENUM}|X)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Answer&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Wait(1)&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Hangup&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Playback(privacy-you-are-blacklisted)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Playback(goodbye)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Wait(1)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whitelist is not implemented here, but it should be easy to do&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To block a web-portal user you will need to add the callsign in capital letters to the blacklist.  &lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put blacklist KM6RPT &amp;quot;no comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:How to]]&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Blacklist_or_whitelist&amp;diff=1594</id>
		<title>Blacklist or whitelist</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Blacklist_or_whitelist&amp;diff=1594"/>
		<updated>2020-01-27T18:31:25Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Occasionally it becomes necessary to limit connections to your node. With this configuration you can either blacklist (block) or whitelist (allow) inbound connections. Outbound connections are not blocked. Only one list can be used at a same time and it applies to all nodes on the server. If using the whitelist all nodes on the local server (127.0.0.1) are allowed. The lists are managed with these Asterisk CLI commands:&lt;br /&gt;
&lt;br /&gt;
* Blacklist&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put blacklist 1998 &amp;quot;any comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database del blacklist 1998&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show blacklist&amp;lt;/code&amp;gt;&lt;br /&gt;
* Whitelist&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put whitelist 1000 &amp;quot;any comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database del whitelist 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show whitelist&amp;lt;/code&amp;gt;&lt;br /&gt;
*Both&lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note'': WA3DSP wrote a [https://hamvoip.org/downloads/node-ban-allow.sh menu script] for the above commands. &lt;br /&gt;
&lt;br /&gt;
==Blacklist Configuration==&lt;br /&gt;
Add this to extensions.conf just below the [radio-secure] context.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio-secure]&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
; To add a node to the blacklist: &lt;br /&gt;
; database put blacklist 1998 “any comment”&lt;br /&gt;
; to remove:&lt;br /&gt;
; database del blacklist 1998&lt;br /&gt;
; to list&lt;br /&gt;
; database show blacklist&lt;br /&gt;
 &lt;br /&gt;
[blacklist]&lt;br /&gt;
exten =&amp;gt; _XXXX!,1,NoOp(${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[${DB_EXISTS(blacklist/${CALLERID(num)})}]?blocked)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,Goto(radio-secure,${EXTEN},1)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n(blocked),Hangup&lt;br /&gt;
&lt;br /&gt;
[whitelist]&lt;br /&gt;
exten =&amp;gt; _XXXX!,1,NoOp(${CALLERID(num)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,NoOp(${IAXPEER(CURRENTCHANNEL)})&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[&amp;quot;${IAXPEER(CURRENTCHANNEL)}&amp;quot; = &amp;quot;127.0.0.1&amp;quot;]?radio-secure,${EXTEN},1)  ;permit local IPs&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,GotoIf($[${DB_EXISTS(whitelist/${CALLERID(num)})}]?radio-secure,${EXTEN},1)&lt;br /&gt;
exten =&amp;gt; _XXXX!,n,Hangup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In iax.conf modify the [radio] context by adding and/or commenting context = lines. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[radio]&lt;br /&gt;
type = user&lt;br /&gt;
disallow = all&lt;br /&gt;
allow = ulaw&lt;br /&gt;
allow = adpcm&lt;br /&gt;
allow = gsm&lt;br /&gt;
codecpriority = host&lt;br /&gt;
;context = radio-secure&lt;br /&gt;
;context = whitelist&lt;br /&gt;
context = blacklist&lt;br /&gt;
transfer = no&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Web Portal ==&lt;br /&gt;
If you want to have a blacklist for the web portal users you will need to modify the [allstar-public] context in extentions.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[allstar-public]&lt;br /&gt;
&lt;br /&gt;
exten =&amp;gt; s,1,Ringing&lt;br /&gt;
exten =&amp;gt; s,n,Set(RESP=${CURL(https://register.allstarlink.org/cgi-bin/authwebphone.pl?${CALLERID(name)})})&lt;br /&gt;
exten =&amp;gt; s,n,Set(NODENUM=${CALLERID(number)})&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:1}&amp;quot; = &amp;quot;?&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:1}&amp;quot; = &amp;quot;&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[&amp;quot;${RESP:0:5}&amp;quot; != &amp;quot;OHYES&amp;quot;]?hangit)&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLSIGN=${RESP:5})&lt;br /&gt;
exten =&amp;gt; s,n,Wait(3)&lt;br /&gt;
exten =&amp;gt; s,n,Playback(rpt/node|noanswer)&lt;br /&gt;
exten =&amp;gt; s,n,Saydigits(${NODENUM})&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLERID(name)=${CALLSIGN})&lt;br /&gt;
exten =&amp;gt; s,n,Set(CALLERID(num)=0)&lt;br /&gt;
exten =&amp;gt; s,n,GotoIf($[${DB_EXISTS(blacklist/${CALLERID(name)})}]?blacklisted)&lt;br /&gt;
exten =&amp;gt; s,n,Rpt(${NODENUM}|X)&lt;br /&gt;
exten =&amp;gt; s,n,Hangup&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Answer&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Wait(1)&lt;br /&gt;
exten =&amp;gt; s,n(hangit),Hangup&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Playback(privacy-you-are-blacklisted)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Playback(goodbye)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Wait(1)&lt;br /&gt;
exten =&amp;gt; s,n(blacklisted),Hangup&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Whitelist is not implemented here, but it should be easy to do&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To block a web-portal user you will need to add the callsign in capital letters to the blacklist.  &lt;br /&gt;
** &amp;lt;code&amp;gt;*CLI&amp;gt; database put blacklist KM6RPT &amp;quot;no comment&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:How to]]&lt;br /&gt;
[[Category:Node Configuration]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Main_Page&amp;diff=1522</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Main_Page&amp;diff=1522"/>
		<updated>2019-12-28T05:44:57Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Related Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the AllStarLink WiKi. AllStarLink is a world wide network of [https://en.wikipedia.org/wiki/Amateur_radio Amateur Radio] repeaters, remote base stations and hot spots accessible to each other via the Internet and/or private IP networks. AllStarLink runs on a dedicated Linux computer (including the Raspberry Pi) that you host at your home, radio site or computer center. It is based on the open source Asterisk PBX. The app_rpt module is a powerful radio/repeater controller. AllStarLink is open source GPL software free for anyone to use.&lt;br /&gt;
&lt;br /&gt;
Recently we've moved some things off of this front page. If you don't see what you are looking for look at the [[:Category:How to|How To's]] or use the search located on the top of every page. We've imported all of the content from the docs site [http://docs.allstarlink.org docs.allstarlink.org] into this Wiki.  &lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
==Organization==&lt;br /&gt;
*[[The Organization - AllStarLink Inc. ]] - What is AllStarLink?&lt;br /&gt;
*[[The Beginning - AllStarLink Inc]] - How AllStarLink came to be. &lt;br /&gt;
&lt;br /&gt;
==AllStarLink Menu==&lt;br /&gt;
*[[Features]] - List of the many AllStarLink Features &lt;br /&gt;
*[[Beginners Guide]] - Step by step instructions to create your account and AllStarLink node. &lt;br /&gt;
*[[ASL FAQ]] - Questions and answers about the AllStarLink software distribution.&lt;br /&gt;
*[[:Category:How to|How To's]] - A collection of AllStarLink how to's.&lt;br /&gt;
*[[:Category:Node Configuration|Node Configuration]] - Detailed configuration settings.&lt;br /&gt;
*[[:Category:Development|Development]] - Information regarding development of the AllStarLink software (i.e., contributing, etc).&lt;br /&gt;
*[[Radio Connections]] - Instructions to Connect Radios, Repeaters and Other Devices to AllStar.&lt;br /&gt;
*[[Troubleshooting]] - Troubleshooting common problems, things to try, and hints to solve the problem.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
* [https://github.com/AllStarLink/Asterisk/releases/tag/ASL-1.01 ASL AMD] Latest AllStarLink installer for x86/AMD (main site)&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/Intel-AMD/Stretch/ ASL AMD] Latest AllStarLink installer for x86/AMD (alternative site)&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/Raspberry_Pi/Stretch/ Pi] Latest AllStarLink image for the Raspberry Pi&lt;br /&gt;
* [http://dvswitch.org/files/ASL_Images/ ASL Repo] AllStarLink Image Repository&lt;br /&gt;
* [[ASL FAQ]] - Install ASL on your existing Debian box or VM&lt;br /&gt;
&lt;br /&gt;
Note:  The ASL 1.01 installer is a Network installer and still uses the dvswitch.org site to download the .deb install files.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [https://allstarlink.org/ AllStarLink Portal] - If you are looking to set up your own AllStarLink node.&lt;br /&gt;
* [https://www.allstarlink.org/ AllStarLink Portal] - Our portal site. Check out the searchable and sortable [https://www.allstarlink.org/nodelist/ Node List].&lt;br /&gt;
* [http://stats.allstarlink.org/ AllStarLink Stats] - shows all the existing public nodes.&lt;br /&gt;
* [https://community.allstarlink.org/ AllStarLink Community Site] - Web based user support form (replaced app_rpt mailing list)&lt;br /&gt;
* [http://lists.keekles.org/cgi-bin/mailman/listinfo/app_rpt-users AllStarLink users mailing list]- '''(archived)''' This is the app_rpt mailing list for discussion, help and helping others&lt;br /&gt;
* [https://groups.io/g/AllStarLink AllStarLink Groups.io mailing group]. This is the app_rpt discussion group on Groups.io&lt;br /&gt;
* [https://github.com/AllStarLink/ Source Code] - All of the source code for the AllStarLink Asterisk and app_rpt is available on GitHub.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
* [[History]] from the Duuude, Jim Dixon WB6NIL SK 12/16/2016.&lt;br /&gt;
* [[Thru-hole_Voter_Board|Thru-hole Voter Board]] from Jim Dixon&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://rogerdudler.github.io/git-guide/ Git - The Simple Guide] - A handy reference for getting started with Git.&lt;br /&gt;
* [https://ryanstutorials.net/linuxtutorial/cheatsheet.php Ryans Tutorials - Linux Tutorial - Cheat Sheet] Handy Cheat Sheet of Linux commands.&lt;br /&gt;
* [https://training.linuxfoundation.org/resources/free-courses/introduction-to-linux/ The Linux Training Foundation - Introduction to Linux] A free eight week course with optional certificate that teaches how to use Linux.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Allmon&amp;diff=1466</id>
		<title>Allmon</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Allmon&amp;diff=1466"/>
		<updated>2019-10-19T21:25:08Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Redirected page to Allmon2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Allmon2]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Allmon2&amp;diff=1465</id>
		<title>Allmon2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Allmon2&amp;diff=1465"/>
		<updated>2019-10-19T21:24:45Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Created page with &amp;quot;Docs are missing from the wiki on this.  https://github.com/tsawyer/allmon2  Package pending for 1.10&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Docs are missing from the wiki on this.&lt;br /&gt;
&lt;br /&gt;
https://github.com/tsawyer/allmon2&lt;br /&gt;
&lt;br /&gt;
Package pending for 1.10&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Backups&amp;diff=1464</id>
		<title>Backups</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Backups&amp;diff=1464"/>
		<updated>2019-10-17T20:35:25Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Install nessary packages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Server Backups=&lt;br /&gt;
&lt;br /&gt;
AllStarLink, Inc uses a per server backup method based on borg.&lt;br /&gt;
&lt;br /&gt;
= Installing Borg on Ubuntu 16 = &lt;br /&gt;
&lt;br /&gt;
the default package that ships with ubuntu 16.04 LTS is borg 1.0 based and we use the latest 1.1 version as it has several security fixes.&lt;br /&gt;
&lt;br /&gt;
== Install nessary packages==&lt;br /&gt;
&lt;br /&gt;
 apt-get install libacl1-dev python3-dev libssl-dev gcc g++ python3-llfuse&lt;br /&gt;
&lt;br /&gt;
== install pip ==&lt;br /&gt;
&lt;br /&gt;
 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py&lt;br /&gt;
 python3 get-pip.py&lt;br /&gt;
&lt;br /&gt;
== Install Borg ==&lt;br /&gt;
 pip3 install borgbackup&lt;br /&gt;
&lt;br /&gt;
== Test for proper version ==&lt;br /&gt;
 root:~# borg -V&lt;br /&gt;
 borg 1.1.7&lt;br /&gt;
&lt;br /&gt;
 which borg&lt;br /&gt;
 /usr/local/bin/borg&lt;br /&gt;
&lt;br /&gt;
== Install the scripts ==&lt;br /&gt;
This will install a new ssh key for root that matches the Rsync.net account and place the borg.inc program in the /root/ directory.&lt;br /&gt;
&lt;br /&gt;
 cd /&lt;br /&gt;
 tar -xvf /root/borg-root-config.tar &lt;br /&gt;
&lt;br /&gt;
= Edit the borg script= &lt;br /&gt;
&lt;br /&gt;
On the Db servers we add a command to dump the database to /var/mysql-backup-current.sql.bz2&lt;br /&gt;
&lt;br /&gt;
= Initialize the repo=&lt;br /&gt;
&lt;br /&gt;
Copy the export lines to your shell and run then do &lt;br /&gt;
&lt;br /&gt;
 echo $BORG_REPO&lt;br /&gt;
 ASLUSER@host.rsync.net:borg/ASL/db-ord&lt;br /&gt;
&lt;br /&gt;
The borg/ASL/db-ord needs to be created on the server&lt;br /&gt;
 ssh -t ASLUSER@host.rsync.net mkdir -p borg/ASL/db-ord&lt;br /&gt;
&lt;br /&gt;
now we need to init the repo at that location&lt;br /&gt;
 borg init -e keyfile-blake2 -p -v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= export the key =&lt;br /&gt;
&lt;br /&gt;
 borg key export --paper&lt;br /&gt;
&lt;br /&gt;
Email this output GPG encrypted to the admin team members.&lt;br /&gt;
&lt;br /&gt;
'''If we lose this key, there is no way to restore the backup.'''  This means if the server dies, we need the paper key record and the passphrase.&lt;br /&gt;
&lt;br /&gt;
= Do the first backup = &lt;br /&gt;
&lt;br /&gt;
 /root/borg.inc&lt;br /&gt;
&lt;br /&gt;
Check that it's succeed &lt;br /&gt;
&lt;br /&gt;
= move borg.inc to cron =&lt;br /&gt;
&lt;br /&gt;
 mv /root/borg.inc /srv/borg.sh&lt;br /&gt;
&lt;br /&gt;
= edit crontab = &lt;br /&gt;
&lt;br /&gt;
edit /etc/crontab to run daily at 8am UTC&lt;br /&gt;
&lt;br /&gt;
 #borg backup&lt;br /&gt;
 30 8 * * *      root    /srv/borg.sh&lt;br /&gt;
&lt;br /&gt;
Reload the crontab file&lt;br /&gt;
&lt;br /&gt;
 service cron reload&lt;br /&gt;
&lt;br /&gt;
= Mounting and restoring =&lt;br /&gt;
Borg makes it easy to mount a backup on the server using &amp;quot;borgfs&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
If this is done on a different server or during a restore operation on new servers, the key files need to be imported from the paper key.  Selected admin users have the paper keys backed up in encrypted email.&lt;br /&gt;
&lt;br /&gt;
For example on a our db-fnt server:&lt;br /&gt;
&lt;br /&gt;
Take the first 5 lines from the /srv/borg.sh file and export them on the cli:&lt;br /&gt;
&lt;br /&gt;
 export BORG_REMOTE_PATH=/usr/local/bin/borg1/borg1&lt;br /&gt;
 export HOST=&lt;br /&gt;
 export BORG_REPO=&lt;br /&gt;
 export BORG_PASSPHRASE=&lt;br /&gt;
 export BORG=/usr/local/bin/borg&lt;br /&gt;
&lt;br /&gt;
Note if doing this on a different server, BORG_REPO= must be the server you intend to restore from.&lt;br /&gt;
&lt;br /&gt;
 #import the paper key &lt;br /&gt;
 borg key import --paper $BORG_REPO&lt;br /&gt;
  &lt;br /&gt;
 #make a directory to mount the backups on:&lt;br /&gt;
 mkdir /mnt/backups&lt;br /&gt;
   &lt;br /&gt;
 #now mount the borg repo&lt;br /&gt;
 borgfs $BORG_REPO /mnt/backups/&lt;br /&gt;
&lt;br /&gt;
The files will now be in /mnt/backups:&lt;br /&gt;
&lt;br /&gt;
 ls  /mnt/backups/&lt;br /&gt;
 db-fnt.allstarlink.org-2018-10-31_08:30  db-fnt.allstarlink.org-2019-02-28_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2018-11-30_08:30  db-fnt.allstarlink.org-2019-03-02_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2018-12-31_08:30  db-fnt.allstarlink.org-2019-03-03_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-01-31_08:30  db-fnt.allstarlink.org-2019-03-04_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-03_08:30  db-fnt.allstarlink.org-2019-03-05_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-10_08:30  db-fnt.allstarlink.org-2019-03-06_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-17_08:30  db-fnt.allstarlink.org-2019-03-07_08:30&lt;br /&gt;
 db-fnt.allstarlink.org-2019-02-24_08:30  db-fnt.allstarlink.org-2019-03-08_08:30&lt;br /&gt;
&lt;br /&gt;
You can now go into any of these directories and restore files as of the date for the respective directory using normal UNIX utilities. &lt;br /&gt;
&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=DNS_Servers&amp;diff=1463</id>
		<title>DNS Servers</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=DNS_Servers&amp;diff=1463"/>
		<updated>2019-10-16T17:02:22Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* regsvcs.allstarlink.org */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Infrastructure]]&lt;br /&gt;
&lt;br /&gt;
ASL utilizes DNS servers based on powerdns with a mysql backend.  &lt;br /&gt;
&lt;br /&gt;
These DNS servers support the following:&lt;br /&gt;
* AllStarlink.org DNS authoritative&lt;br /&gt;
* registration server redundancy &lt;br /&gt;
* DNS lookup for nodes information&lt;br /&gt;
&lt;br /&gt;
= Authoritative DNS servers =  &lt;br /&gt;
&lt;br /&gt;
The authoritative DNS servers run on karl-tpa.allstarlink.org and smithers-fnt.allstarlink.org with the backend in the distributed database.  These servers may be administered via 'pdnsutil' on the cli or via the gui at http://karl-tpa.allstarlink.org:9191 or http://smithers-fnt.allstarlink.org:9191  over the VPN or via the bastion hosts.  &lt;br /&gt;
&lt;br /&gt;
DNSSEC is enabled on all domains and trust is expanded to all sub servers.&lt;br /&gt;
&lt;br /&gt;
Secondary DNS is very important as provided by ns[1-4].keekles.org and ns6.gandi.net.  This is very important as if the database is hard down in FNT and TPA, the primary DNS will be offline.  With the secondary servers online DNS will continue to work, and NMS requires DNS for the allstarlink.org zone.&lt;br /&gt;
&lt;br /&gt;
= regsvcs.allstarlink.org = &lt;br /&gt;
&lt;br /&gt;
This Zone is served by the registration servers, and is pulled directly from the database.  There is no secondary on these zones, just the three primary servers on the registration servers.  &lt;br /&gt;
&lt;br /&gt;
The redundancy of registration is handled by a TTL of 120 seconds on all the records.  We've added another field in the 'records' table 'UnixSeconds' which is NULL by default, but updated by the heartbeat health check scripts on the servers.  If the heartbeat script detects the DB or connectivity down at a site, it will shut down that server and stop updating the DNS UnixSeconds.  &lt;br /&gt;
&lt;br /&gt;
On the DNS server we have modified the default query for a lookup to: &lt;br /&gt;
&lt;br /&gt;
 gmysql-basic-query=SELECT content,ttl,prio,type,domain_id,disabled,name,auth FROM records WHERE disabled=0 AND (UnixSeconds is NULL OR UnixSeconds &amp;gt; (UNIX_TIMESTAMP() - 120)) and type=? and name=?&lt;br /&gt;
&lt;br /&gt;
This will only return a record if UnixSeconds is Null or has been updated in the last 120 seconds.  &lt;br /&gt;
&lt;br /&gt;
If the node loses connectivity, it will be timed out of DNS due to this in 120 seconds.  This is a &amp;quot;dead-man switch&amp;quot; function which will enable losing any one node in the cluster.&lt;br /&gt;
&lt;br /&gt;
'''register.allstarlink.org''' is a CNAME to '''register.regscvs.allstarlink.org''' under this.   The node list servers are under this as well as '''node[1-4].allstarllink.org'''  CNAME '''nodes.regsvcs.allstarlink.org&lt;br /&gt;
'''&lt;br /&gt;
== recovery of a down server ==&lt;br /&gt;
&lt;br /&gt;
Need to fill this out, right now it's a manual verification, db edit and reset.&lt;br /&gt;
&lt;br /&gt;
= DNS node lookup = &lt;br /&gt;
&lt;br /&gt;
nodes.allstarlink.org is delegated to a DNS running on the db servers.  The users_Nodes table has a trigger which is run and creates entries/edits them on the records table in the 'allstar' database.  This populates a SRV, TXT and A record for every node in the system when it's updated.  The trigger has been optimized and has little to no preformance impact on the registration process.  &lt;br /&gt;
&lt;br /&gt;
Note that servers not in nodes list can appear in DNS, there is no ageing out of entries in DNS.  It's up to the server to know it's registered. &lt;br /&gt;
&lt;br /&gt;
== SRV record ==&lt;br /&gt;
_iax._srv.&amp;lt;nodenumber&amp;gt;.allstarlink.org. will return for a node as follows:&lt;br /&gt;
&lt;br /&gt;
  _iax._udp.50000.nodes.allstarlink.org. 30 IN SRV 10 10 4569 50000.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
where 4569 is the IAX port and then it will do a A lookup on 50000.nodes.allstarlink.org. for the IP.&lt;br /&gt;
&lt;br /&gt;
A remote base will be returned like:&lt;br /&gt;
&lt;br /&gt;
_iax._udp.50000.nodes.allstarlink.org. 30 IN SRV 10 10 4569 50000.remotebase.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
== A record ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nodenumber&amp;gt;.nodes.allstarlink.org. and &amp;lt;nodenumber&amp;gt;.remotebase.nodes.allstarlink.org. will return the IP address of the IAX server or the proxy IP if defined. &lt;br /&gt;
&lt;br /&gt;
== TXT Record == &lt;br /&gt;
&lt;br /&gt;
The TXT record is used for debugging purposes with a query below:&lt;br /&gt;
&lt;br /&gt;
 TXT &amp;lt;nodenumber&amp;gt;.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
This will return:&lt;br /&gt;
 &amp;quot;NN=50000&amp;quot; &amp;quot;RT=2019-02-28 18:41:29&amp;quot; &amp;quot;RB=0&amp;quot; &amp;quot;IP=44.98.248.144&amp;quot; &amp;quot;PIP=&amp;quot; &amp;quot;PT=4569&amp;quot; &amp;quot;RH=register-fnt&amp;quot;&lt;br /&gt;
 NN is node number&lt;br /&gt;
 RT is the last update registration time&lt;br /&gt;
 RB is 0 for node is not a remote base, RB is 1 if it is a remote base&lt;br /&gt;
 IP is the IP address of the node&lt;br /&gt;
 PIP is the proxy IP of the node if set&lt;br /&gt;
 PT is the port&lt;br /&gt;
 RH is the registration server the node last registered to.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=DNS_Servers&amp;diff=1462</id>
		<title>DNS Servers</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=DNS_Servers&amp;diff=1462"/>
		<updated>2019-10-16T17:00:55Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Created page with &amp;quot;Category: Infrastructure  ASL utilizes DNS servers based on powerdns with a mysql backend.    These DNS servers support the following: * AllStarlink.org DNS authoritative...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Infrastructure]]&lt;br /&gt;
&lt;br /&gt;
ASL utilizes DNS servers based on powerdns with a mysql backend.  &lt;br /&gt;
&lt;br /&gt;
These DNS servers support the following:&lt;br /&gt;
* AllStarlink.org DNS authoritative&lt;br /&gt;
* registration server redundancy &lt;br /&gt;
* DNS lookup for nodes information&lt;br /&gt;
&lt;br /&gt;
= Authoritative DNS servers =  &lt;br /&gt;
&lt;br /&gt;
The authoritative DNS servers run on karl-tpa.allstarlink.org and smithers-fnt.allstarlink.org with the backend in the distributed database.  These servers may be administered via 'pdnsutil' on the cli or via the gui at http://karl-tpa.allstarlink.org:9191 or http://smithers-fnt.allstarlink.org:9191  over the VPN or via the bastion hosts.  &lt;br /&gt;
&lt;br /&gt;
DNSSEC is enabled on all domains and trust is expanded to all sub servers.&lt;br /&gt;
&lt;br /&gt;
Secondary DNS is very important as provided by ns[1-4].keekles.org and ns6.gandi.net.  This is very important as if the database is hard down in FNT and TPA, the primary DNS will be offline.  With the secondary servers online DNS will continue to work, and NMS requires DNS for the allstarlink.org zone.&lt;br /&gt;
&lt;br /&gt;
= regsvcs.allstarlink.org = &lt;br /&gt;
&lt;br /&gt;
This Zone is served by the registration servers, and is pulled directly from the database.  There is no secondary on these zones, just the three primary servers on the registration servers.  &lt;br /&gt;
&lt;br /&gt;
The redundancy of registration is handled by a TTL of 120 seconds on all the records.  We've added another field in the 'records' table 'UnixSeconds' which is NULL by default, but updated by the heartbeat health check scripts on the servers.  If the heartbeat script detects the DB or connectivity down at a site, it will shut down that server and stop updating the DNS UnixSeconds.  &lt;br /&gt;
&lt;br /&gt;
On the DNS server we have modified the default query for a lookup to: &lt;br /&gt;
&lt;br /&gt;
  gmysql-basic-query=SELECT content,ttl,prio,type,domain_id,disabled,name,auth FROM records WHERE disabled=0 AND (UnixSeconds is NULL OR UnixSeconds &amp;gt; (UNIX_TIMESTAMP() - 120)) and type=? and name=?&lt;br /&gt;
&lt;br /&gt;
This will only return a record if UnixSeconds is Null or has been updated in the last 120 seconds.  &lt;br /&gt;
&lt;br /&gt;
If the node loses connectivity, it will be timed out of DNS due to this in 120 seconds.  This is a &amp;quot;dead-man switch&amp;quot; function which will enable losing any one node in the cluster.&lt;br /&gt;
&lt;br /&gt;
register.allstarlink.org is a CNAME to register.regscvs.allstarlink.org under this.   The node list servers are under this as well as node[1-4].allstarllink.org  CNAME nodes.regsvcs.allstarlink.org&lt;br /&gt;
&lt;br /&gt;
== recovery of a down server ==&lt;br /&gt;
&lt;br /&gt;
Need to fill this out, right now it's a manual verification, db edit and reset. &lt;br /&gt;
&lt;br /&gt;
= DNS node lookup = &lt;br /&gt;
&lt;br /&gt;
nodes.allstarlink.org is delegated to a DNS running on the db servers.  The users_Nodes table has a trigger which is run and creates entries/edits them on the records table in the 'allstar' database.  This populates a SRV, TXT and A record for every node in the system when it's updated.  The trigger has been optimized and has little to no preformance impact on the registration process.  &lt;br /&gt;
&lt;br /&gt;
Note that servers not in nodes list can appear in DNS, there is no ageing out of entries in DNS.  It's up to the server to know it's registered. &lt;br /&gt;
&lt;br /&gt;
== SRV record ==&lt;br /&gt;
_iax._srv.&amp;lt;nodenumber&amp;gt;.allstarlink.org. will return for a node as follows:&lt;br /&gt;
&lt;br /&gt;
  _iax._udp.50000.nodes.allstarlink.org. 30 IN SRV 10 10 4569 50000.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
where 4569 is the IAX port and then it will do a A lookup on 50000.nodes.allstarlink.org. for the IP.&lt;br /&gt;
&lt;br /&gt;
A remote base will be returned like:&lt;br /&gt;
&lt;br /&gt;
_iax._udp.50000.nodes.allstarlink.org. 30 IN SRV 10 10 4569 50000.remotebase.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
== A record ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nodenumber&amp;gt;.nodes.allstarlink.org. and &amp;lt;nodenumber&amp;gt;.remotebase.nodes.allstarlink.org. will return the IP address of the IAX server or the proxy IP if defined. &lt;br /&gt;
&lt;br /&gt;
== TXT Record == &lt;br /&gt;
&lt;br /&gt;
The TXT record is used for debugging purposes with a query below:&lt;br /&gt;
&lt;br /&gt;
 TXT &amp;lt;nodenumber&amp;gt;.nodes.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
This will return:&lt;br /&gt;
 &amp;quot;NN=50000&amp;quot; &amp;quot;RT=2019-02-28 18:41:29&amp;quot; &amp;quot;RB=0&amp;quot; &amp;quot;IP=44.98.248.144&amp;quot; &amp;quot;PIP=&amp;quot; &amp;quot;PT=4569&amp;quot; &amp;quot;RH=register-fnt&amp;quot;&lt;br /&gt;
 NN is node number&lt;br /&gt;
 RT is the last update registration time&lt;br /&gt;
 RB is 0 for node is not a remote base, RB is 1 if it is a remote base&lt;br /&gt;
 IP is the IP address of the node&lt;br /&gt;
 PIP is the proxy IP of the node if set&lt;br /&gt;
 PT is the port&lt;br /&gt;
 RH is the registration server the node last registered to.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=AllStarLink_Infrastructure&amp;diff=1461</id>
		<title>AllStarLink Infrastructure</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=AllStarLink_Infrastructure&amp;diff=1461"/>
		<updated>2019-10-16T08:55:57Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a page concerning the various servers and hosts which comprise the ASL network services&lt;br /&gt;
&lt;br /&gt;
= Overview = &lt;br /&gt;
&lt;br /&gt;
The ASL architecture is designed to be scalable across donated/purchased virtual machines.  Any bare metal servers will be setup with a VM technology, ASL is agnostic to the chosen hypervisor.  &lt;br /&gt;
&lt;br /&gt;
At the core of ASL service is a distributed database, which is active-active across all nodes.  Registration servers talk to this database along with the nodes list and DNS servers.  These services are the core of ASL services; IAX2 registration, nodes list and DNS.  All other services are nice to have, but don't affect the availability of the network for end users.&lt;br /&gt;
&lt;br /&gt;
The core servers are all interconnected using host to host IPSEC.  This not tunnels, but rather host to host, where traffic is encrypted between hosts using pre-shared keys.  These have proven to be reliable and work well even over the best effort of the internet.  The DB servers require encrypted channels, as they don't support encryption at the application level.  This also simplifies networking between ASL hosts.&lt;br /&gt;
&lt;br /&gt;
DNS is serviced for primary DNS with short TTL's on register.allstarlink.org.  Should any one server go offline, it's pulled from the DNS and turns down after 30 seconds.  For the remainder of ASL hosts, several secondary servers exist.&lt;br /&gt;
&lt;br /&gt;
= Servers =&lt;br /&gt;
All servers should have a local use in the format of jdoe for the user.  Password auth should not be used, ssh should be setup. Sudo should be used for admin access.&lt;br /&gt;
&lt;br /&gt;
when adding a user, use &amp;quot;Firstname Lastname, CALLSIGN&amp;quot; as the name, and the cellphone as the phone number.  &lt;br /&gt;
&lt;br /&gt;
Don't want to put your cellphone in? you don't get to admin the box.&lt;br /&gt;
&lt;br /&gt;
== Tampa Hypervisor ==&lt;br /&gt;
&lt;br /&gt;
All users should have access to this box via SSH keys.  Please place your public key in your home directory and your user should be in the &amp;quot;sudo&amp;quot; group to enable sudo.  &lt;br /&gt;
&lt;br /&gt;
This box is DL360 with 12 cores and 128 GB of ram.  There are 8 146.8 GB 15k SAS disks in a Raid 50 config.  &lt;br /&gt;
&lt;br /&gt;
It's primary IP is 44.98.254.129/27 which is a logical interface &amp;quot;44net&amp;quot; on the 44net bridge.  &lt;br /&gt;
&lt;br /&gt;
enp3s0f0 is 208.38.136.11 and is physically the left most port on the box.  Our upstream router has a static route pointing 44.98.254.128/27 at this interface. &lt;br /&gt;
&lt;br /&gt;
The VM's are given addresses out of 44.98.254.128/27&lt;br /&gt;
&lt;br /&gt;
The ILO is at https://192.168.8.5/ This is behind the VPN and is a seperate network.  You will need VPN credentials and a vpn config for this.&lt;br /&gt;
&lt;br /&gt;
The ILO needs java installed to get at the console, but is licensed for full video access.&lt;br /&gt;
&lt;br /&gt;
The ILO MAC is B4B5.2F5B.B90C&lt;br /&gt;
&lt;br /&gt;
====== The ILO admin password is ======&lt;br /&gt;
&amp;lt;poem style=&amp;quot;border: 2px solid #d6d2c5; background-color: #f9f4e6;padding: 1em; padding-top:0px; font-size:12px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----BEGIN PGP MESSAGE-----&lt;br /&gt;
hQEMA4nyEUPSzEPpAQgAuJvcngnoXbZq/audRVP09zPHKRZWoP6gZhrNpMVpu1fN&lt;br /&gt;
x0vGPbhWw94iloMjAWONeyLkNzOg2KGaSc1I7GY7dKQ8+0Snqez/lb0PAp5P1P+y&lt;br /&gt;
c2owsvqJ616G4mZTZ0ZAUXMfY4Rmoz0YDctJatbGxanT4jLpmQMua9jx6Ukjl+F+&lt;br /&gt;
BZHB+jZwzOeVx3lNOYuX7hrHu6NLjDkoFiBOHDQBY0d0CPamYhRm25d/eIcN2Zpf&lt;br /&gt;
pqXauSZJlFoKBhYRxpw3KzMMJhwR2F4Mda58fwJeuhTVf2HxijvqEOhv4NTgsSNJ&lt;br /&gt;
M7MLn13Yxyru8mEw+TM0JSw4Kd8/bSUE6E7iYYXl8NLAMgEhVuvJkiwUolYu+U3b&lt;br /&gt;
qVGOJD3+oAgdOqa9rZzecLGwCRUErXEWa3/1EvgWh+g31HG49ombZpC4AhHpWqXq&lt;br /&gt;
nPZ/7YJmg9SLmMB2FvGfsaxIXXj+5fSJHHCPfAXNwNb4GmsNIbPkqXjPBELVb3hd&lt;br /&gt;
woJxU0tc57MoJK8322WcoE4uKsV2r4oxZEK5g8/L3otN6Oz4VMgkQQyFUIBnGp7o&lt;br /&gt;
Mflja33bvBflp6rnDH+IlC7qdtOmNqMQ3bWuKUxIWr3P/+xEUBjSwIR8ohW7XaLV&lt;br /&gt;
BNQ5qnRi7iTF0o/JFBy6d6g7oQ1ZbqlDOoYmtwnz9dEkhU8X&lt;br /&gt;
=SIcB&lt;br /&gt;
-----END PGP MESSAGE-----&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/poem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Syslog and fail2ban =====&lt;br /&gt;
&lt;br /&gt;
The VM's are setup for remote syslog to 44.98.254.129.&lt;br /&gt;
&lt;br /&gt;
Fail2ban is configured to nullroute IPs and email the admin contact after 2 bad logins.  As it's done with a nullroute, fail2ban can run on the hypervisor and will catch login attempts on the VM's.  This means if you get locked out via fail2ban, you're locked out of all VMs.  &lt;br /&gt;
&lt;br /&gt;
There is a firewall configured at /etc/network/firewall.sh.  Note this protects the hypervisor (INPUT) and to the 44net subnet (FORWARD).  By default everything is blocked to the external interface and new services must be added to allow them out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Hard Disks are arranged as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|}&lt;br /&gt;
The disks are 146.8 gb 15k SAS drives&lt;br /&gt;
&lt;br /&gt;
Marked: HPDC firmware manufactured by segate for HP.&lt;br /&gt;
&lt;br /&gt;
===== VM management =====&lt;br /&gt;
[https://github.com/kimchi-project Kimchi] is used for server management of the VM's and gives a nice easy way to setup a server.  It's basically a frontend for virsh&lt;br /&gt;
&lt;br /&gt;
The network config is based on this https://jamielinux.com/docs/libvirt-networking-handbook/custom-routed-network.html&lt;br /&gt;
&lt;br /&gt;
To provision a server from a template:&lt;br /&gt;
# login to [https://208.38.136.11:8001 Kimchi]&lt;br /&gt;
# Click on Virtualization and then Add&lt;br /&gt;
# Give the server a logical name and choose a template&lt;br /&gt;
# Click Create&lt;br /&gt;
# The server will be instantiated, but not started, if you want to change things, nows the time.&lt;br /&gt;
# You'll need to provision the network &lt;br /&gt;
# To assign an IP that's static we use DHCP, but assign a static lease.&lt;br /&gt;
# do 'echo 52:54:00:73:XX:XX,44.98.254.x' &amp;gt;&amp;gt; /var/lib/dnsmasq/44net/hostsfile&amp;quot; from the CLI.  This needs the MAC address of the server and the static IP it will be on.&lt;br /&gt;
# do 'service dnsmasq@44net reload' to reload the dnsmasq config&lt;br /&gt;
# Double check everything and you can boot the server.&lt;br /&gt;
It will now boot and install ubuntu and should have a public IP in the 44net range&lt;br /&gt;
&lt;br /&gt;
You will want to ensure it's auto started and will need to do that from the CLI using the virsh &amp;quot;autostart&amp;quot; command.  This ensures the server will boot when the box restarts.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virsh # list&lt;br /&gt;
 Id    Name                           State&lt;br /&gt;
----------------------------------------------------&lt;br /&gt;
 1     ASL-Stats                      running&lt;br /&gt;
 7     TestVM                         running&lt;br /&gt;
&lt;br /&gt;
virsh # dominfo TestVM&lt;br /&gt;
Id:             7&lt;br /&gt;
Name:           TestVM&lt;br /&gt;
UUID:           a4dbcba6-f493-4bdc-b5b0-40b714e9e9a4&lt;br /&gt;
OS Type:        hvm&lt;br /&gt;
State:          running&lt;br /&gt;
CPU(s):         1&lt;br /&gt;
CPU time:       130.6s&lt;br /&gt;
Max memory:     1048576 KiB&lt;br /&gt;
Used memory:    1048576 KiB&lt;br /&gt;
Persistent:     yes&lt;br /&gt;
Autostart:      disable&lt;br /&gt;
Managed save:   no&lt;br /&gt;
Security model: apparmor&lt;br /&gt;
Security DOI:   0&lt;br /&gt;
Security label: libvirt-a4dbcba6-f493-4bdc-b5b0-40b714e9e9a4 (enforcing)&lt;br /&gt;
&lt;br /&gt;
virsh # autostart TestVM&lt;br /&gt;
Domain TestVM marked as autostarted&lt;br /&gt;
&lt;br /&gt;
virsh # dominfo TestVM&lt;br /&gt;
Id:             7&lt;br /&gt;
Name:           TestVM&lt;br /&gt;
UUID:           a4dbcba6-f493-4bdc-b5b0-40b714e9e9a4&lt;br /&gt;
OS Type:        hvm&lt;br /&gt;
State:          running&lt;br /&gt;
CPU(s):         1&lt;br /&gt;
CPU time:       137.6s&lt;br /&gt;
Max memory:     1048576 KiB&lt;br /&gt;
Used memory:    1048576 KiB&lt;br /&gt;
Persistent:     yes&lt;br /&gt;
Autostart:      enable&lt;br /&gt;
Managed save:   no&lt;br /&gt;
Security model: apparmor&lt;br /&gt;
Security DOI:   0&lt;br /&gt;
Security label: libvirt-a4dbcba6-f493-4bdc-b5b0-40b714e9e9a4 (enforcing)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:K3JKH&amp;diff=1459</id>
		<title>User talk:K3JKH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:K3JKH&amp;diff=1459"/>
		<updated>2019-10-10T01:35:30Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:K3JKH&amp;diff=1458</id>
		<title>User:K3JKH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:K3JKH&amp;diff=1458"/>
		<updated>2019-10-10T01:35:30Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have an IRLP node and am wanting to expand with an allstar node.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:N7GHT&amp;diff=1457</id>
		<title>User talk:N7GHT</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:N7GHT&amp;diff=1457"/>
		<updated>2019-10-10T01:35:13Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:N7GHT&amp;diff=1456</id>
		<title>User:N7GHT</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:N7GHT&amp;diff=1456"/>
		<updated>2019-10-10T01:35:13Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;N7GHT working on adding all-star links to several a mature repeaters&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:KG9NA&amp;diff=1455</id>
		<title>User talk:KG9NA</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:KG9NA&amp;diff=1455"/>
		<updated>2019-10-10T01:34:37Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:KG9NA&amp;diff=1454</id>
		<title>User:KG9NA</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:KG9NA&amp;diff=1454"/>
		<updated>2019-10-10T01:34:37Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have been a licensed for more than 25 years and I am now trying to get back into ham radio. My call sign is KG9NA and I look forward to getting into AllStar digital radio.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:K9BIF&amp;diff=1453</id>
		<title>User talk:K9BIF</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:K9BIF&amp;diff=1453"/>
		<updated>2019-10-10T01:34:18Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:K9BIF&amp;diff=1452</id>
		<title>User:K9BIF</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:K9BIF&amp;diff=1452"/>
		<updated>2019-10-10T01:34:18Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I Am the Owner of The M-CARS Repeater System&lt;br /&gt;
https://www.qsl.net/k9bif&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:N0MHO&amp;diff=1451</id>
		<title>User talk:N0MHO</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:N0MHO&amp;diff=1451"/>
		<updated>2019-10-10T01:33:32Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:N0MHO&amp;diff=1450</id>
		<title>User:N0MHO</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:N0MHO&amp;diff=1450"/>
		<updated>2019-10-10T01:33:32Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have been interested in radio for about 45 years it started with CB like so many others and then changed into ham radio. I have ran my own two way radio repair shop and now work for a local telephone company. Our group has 4 repeaters that I take care of and I am interested in All Star Link for the main reason of being able to link our repeaters together.&lt;br /&gt;
.......   ART  ...........&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:N9TCQ&amp;diff=1449</id>
		<title>User talk:N9TCQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:N9TCQ&amp;diff=1449"/>
		<updated>2019-10-10T01:33:07Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:N9TCQ&amp;diff=1448</id>
		<title>User:N9TCQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:N9TCQ&amp;diff=1448"/>
		<updated>2019-10-10T01:33:07Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ham radio to dmr link&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Admin_Committee&amp;diff=1447</id>
		<title>Admin Committee</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Admin_Committee&amp;diff=1447"/>
		<updated>2019-09-17T14:23:47Z</updated>

		<summary type="html">&lt;p&gt;Bryan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''The below is no longer valid'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Admin Committee/Team is the core server admins for AllStarLink. &lt;br /&gt;
&lt;br /&gt;
Fundamentally it's a meritocracy, people who can get stuff done work with others to get stuff done.  If you have the ability, time and want to help out, please reach out to an existing member or send an email to [mailto:helpdesk@allstarlink.org helpdesk@allstarlink.org].  &lt;br /&gt;
&lt;br /&gt;
= Responsibilities =&lt;br /&gt;
The below are general responsibilities of the Admin Committee.  This is not a complete list and we don't expect every member to be able to do everything.&lt;br /&gt;
&lt;br /&gt;
* Maintain all AllStarLink services for the community&lt;br /&gt;
* Develop new methods and procedures enabling the goal of always available services&lt;br /&gt;
* Work with and take direction from the AllStarLink Board of Directors&lt;br /&gt;
* Communicate with the community via app_rpt list&lt;br /&gt;
* Work tickets in the helpdesk  &lt;br /&gt;
&lt;br /&gt;
= Qualifications =&lt;br /&gt;
&lt;br /&gt;
We encourage anyone interested to assist and reach out to [mailto:helpdesk@allstarlink.org helpdesk@allstarlink.org] or another admin team member if they want to help out.  With many people working on the same problem we can make easy work.&lt;br /&gt;
&lt;br /&gt;
* Express an interest in committing time to help&lt;br /&gt;
* Be well known to an existing member of the team&lt;br /&gt;
* Be present in the slack, email and possibly IRC channel&lt;br /&gt;
* Have time to devote to working tickets or working on the other parts of the project&lt;br /&gt;
* Protect the secure information of our members and do not disclose any sensitive information outside of the admin committee with out prior board approval.&lt;br /&gt;
&lt;br /&gt;
= Needs =&lt;br /&gt;
&lt;br /&gt;
The project has needs for anyone with any of the following skills:&lt;br /&gt;
&lt;br /&gt;
* Front End HTML/PHP/SQL&lt;br /&gt;
* Linux sysadmin&lt;br /&gt;
* MariaDB &lt;br /&gt;
* Networking&lt;br /&gt;
* Perl (not for new use)&lt;br /&gt;
* Python&lt;br /&gt;
* Ansible/puppet&lt;br /&gt;
* Linux/KVM&lt;br /&gt;
* VMware&lt;br /&gt;
* more people to work tickets&lt;br /&gt;
* Technical Writers&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:ZS6MN&amp;diff=1437</id>
		<title>User talk:ZS6MN</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:ZS6MN&amp;diff=1437"/>
		<updated>2019-07-02T06:03:18Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:ZS6MN&amp;diff=1436</id>
		<title>User:ZS6MN</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:ZS6MN&amp;diff=1436"/>
		<updated>2019-07-02T06:03:18Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pensioener love to play radio&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:KJ3LR&amp;diff=1435</id>
		<title>User talk:KJ3LR</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:KJ3LR&amp;diff=1435"/>
		<updated>2019-07-02T06:02:39Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:KJ3LR&amp;diff=1434</id>
		<title>User:KJ3LR</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:KJ3LR&amp;diff=1434"/>
		<updated>2019-07-02T06:02:39Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have been an Amateur radio op since 1991.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1433</id>
		<title>Server Provisioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1433"/>
		<updated>2019-07-02T01:16:33Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Mandatory Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is intended to be a reference for setting up a VM or Server for AllStatLink.  &lt;br /&gt;
&lt;br /&gt;
= Server Overview = &lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
AllStarLink has standardized on Ubuntu 16.04 LTS for it's servers. &lt;br /&gt;
&lt;br /&gt;
The minimum configuration of any server will be 2 cores of 2 GHz or faster, 4 GiB of ram and 40 GiB of Disk.  &lt;br /&gt;
&lt;br /&gt;
All new servers shall support IPv6, or have it available from the hosting provider.&lt;br /&gt;
&lt;br /&gt;
Reverse IP's shall be delegated via a CNAME to $NAME.PTR.allstarlink.org, where $NAME is the name of the server.&lt;br /&gt;
&lt;br /&gt;
All servers shall be partitioned to use / as the only partition unless a specific configuration is required. &lt;br /&gt;
&lt;br /&gt;
== Install guide == &lt;br /&gt;
&lt;br /&gt;
When provisioning a new server&lt;br /&gt;
&lt;br /&gt;
* check the VM is setup (cpu/mem/disk) as it should be, if not contact the provider&lt;br /&gt;
&lt;br /&gt;
   cat /proc/cpuinfo |grep processor&lt;br /&gt;
   processor       : 0&lt;br /&gt;
   processor       : 1&lt;br /&gt;
   processor       : 2&lt;br /&gt;
   processor       : 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* on the server install python (apt-get install python).  This is needed for the ansibile provisioning&lt;br /&gt;
* setup the server in the infrastructure configs and push the users and keys to it.  &lt;br /&gt;
&lt;br /&gt;
=== Mandatory Software ===&lt;br /&gt;
&lt;br /&gt;
All servers require this software&lt;br /&gt;
&lt;br /&gt;
 apt-get install ntp ntpdate python vim screen ipsec-tools strongswan fail2ban snmp haveged libacl1-dev python3-dev libssl-dev gcc g++ fio pbzip2 ncdu&lt;br /&gt;
&lt;br /&gt;
=== Mandatory Configs ===&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu 18 Config ====&lt;br /&gt;
&lt;br /&gt;
Ubuntu 18 uses the net netplan config.  It's gay as fuck.&lt;br /&gt;
&lt;br /&gt;
First you need to disable the resolved service:&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl disable systemd-resolved.service&lt;br /&gt;
 sudo systemctl stop systemd-resolved&lt;br /&gt;
 rm /etc/resolv.conf &lt;br /&gt;
 sudo touch /etc/cloud/cloud-init.disabled&lt;br /&gt;
 sudo apt-get purge cloud-init&lt;br /&gt;
 apt-get install ifupdown&lt;br /&gt;
&lt;br /&gt;
Configure  /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
 systemctl unmask networking&lt;br /&gt;
 systemctl enable networking&lt;br /&gt;
 systemctl restart networking&lt;br /&gt;
&lt;br /&gt;
 systemctl stop systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online&lt;br /&gt;
 systemctl disable systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online&lt;br /&gt;
 systemctl mask systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online&lt;br /&gt;
 apt-get --assume-yes purge nplan netplan.io&lt;br /&gt;
&lt;br /&gt;
==== Network Config ====&lt;br /&gt;
* The network should be configured to use /etc/network/interfaces, and add DNS and the firewall to it and search in the allstarlink.org domain&lt;br /&gt;
&lt;br /&gt;
 # The primary network interface&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet6 static&lt;br /&gt;
    address 9805:0900:0340:1000::2600/64&lt;br /&gt;
    autoconf 0&lt;br /&gt;
    accept_ra 2	&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
     address 44.103.0.49&lt;br /&gt;
     netmask 255.255.255.0&lt;br /&gt;
     network 44.103.0.0&lt;br /&gt;
     broadcast 44.103.0.255&lt;br /&gt;
     gateway 44.103.0.1 &lt;br /&gt;
     dns-nameservers 44.103.0.4 1.1.1.1&lt;br /&gt;
     dns-search allstarlink.org&lt;br /&gt;
     up /etc/network/firewall.sh&lt;br /&gt;
&lt;br /&gt;
* There is typically only one network interface, and it will be named dynamically.  We must setup this using udev to be persistent&lt;br /&gt;
&lt;br /&gt;
    root@server# ifconfig |grep HWaddr&lt;br /&gt;
    eth0      Link encap:Ethernet  HWaddr 52:54:00:73:86:06  &lt;br /&gt;
&lt;br /&gt;
Now take this HWaddr and put it in the config file&lt;br /&gt;
    echo 'SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:73:86:06&amp;quot;, ATTR{dev_id}==&amp;quot;0x0&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, NAME=&amp;quot;eth0&amp;quot;' &amp;gt;/etc/udev/rules.d/70-persistent-net.rules&lt;br /&gt;
&lt;br /&gt;
* configure screen to use the scroll back buffer&lt;br /&gt;
   vim /etc/screenrc&lt;br /&gt;
   uncomment &amp;quot;termcapinfo xterm|xterms|xs|rxvt ti@:te@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* configure bash completion for interactive shells&lt;br /&gt;
    vim /etc/bash.bashrc&lt;br /&gt;
    uncomment the stuff below &lt;br /&gt;
    # enable bash completion in interactive shells &lt;br /&gt;
&lt;br /&gt;
* set the host name&lt;br /&gt;
    echo &amp;quot;domain.allstarlink.org&amp;quot; &amp;gt;/etc/hostname&lt;br /&gt;
&lt;br /&gt;
* set the default editor&lt;br /&gt;
    update-alternatives --config editor &lt;br /&gt;
    Then select #3 vim.basic&lt;br /&gt;
&lt;br /&gt;
* setup a firewall as /etc/network/firewall.sh and chmod +x it.  You'll need to edit this based on the machine.  Note the stuff in tampa uses a firewall on the HV too.&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    INET_IF=eth0&lt;br /&gt;
    &lt;br /&gt;
    #Flush and zero all tables&lt;br /&gt;
    modprobe ip_tables&lt;br /&gt;
    modprobe ipt_limit&lt;br /&gt;
    modprobe iptable_mangle&lt;br /&gt;
    modprobe ipt_state&lt;br /&gt;
    modprobe ipt_LOG&lt;br /&gt;
    modprobe iptable_filter&lt;br /&gt;
    &lt;br /&gt;
    iptables -F INPUT&lt;br /&gt;
    iptables -F FORWARD&lt;br /&gt;
    iptables -t nat -F POSTROUTING&lt;br /&gt;
    iptables -t nat -F PREROUTING&lt;br /&gt;
    &lt;br /&gt;
    #init the log-and-drop chain&lt;br /&gt;
    iptables -F log-and-drop&lt;br /&gt;
    iptables -X log-and-drop&lt;br /&gt;
    iptables -N log-and-drop&lt;br /&gt;
    #init log-and-reject&lt;br /&gt;
    iptables -F log-and-reject&lt;br /&gt;
    iptables -X log-and-reject&lt;br /&gt;
    iptables -N log-and-reject&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;all tables flushed and dropped&amp;quot;&lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-drop -j LOG --log-prefix &amp;quot;[IPTables] Drop &amp;quot;&lt;br /&gt;
    iptables -A log-and-drop -j DROP&lt;br /&gt;
    &lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-reject -j LOG --log-prefix &amp;quot;[IPTables] Reject &amp;quot;&lt;br /&gt;
    iptables -A log-and-reject -j REJECT&lt;br /&gt;
    echo &amp;quot;logging chains setup&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # The packets having the TCP flags activated are dropped&lt;br /&gt;
    # and so for the ones with no flag at all (often used with Nmap scans)&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop&lt;br /&gt;
    &lt;br /&gt;
    #Global blocks&lt;br /&gt;
    #iptables -t filter -A INPUT -j DROP -s 119.118.232.185/24&lt;br /&gt;
    &lt;br /&gt;
    # allow IPSEC from other boxes&lt;br /&gt;
    IPSECsrc='199.47.174.150,44.98.254.151,44.103.0.48,44.103.0.49,44.98.254.145,44.72.21.13,44.72.21.12'&lt;br /&gt;
    #Technically the next two are not needed as we have the policy&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 50 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 51 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p udp --dport 500 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    # this is needed to allow all ipsec packets when it's host to host&lt;br /&gt;
    iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &lt;br /&gt;
    &lt;br /&gt;
    # allow all ssh in&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22&lt;br /&gt;
    &lt;br /&gt;
    #allow http and https&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 80&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 443&lt;br /&gt;
    # allow asterisk 4569&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 4569&lt;br /&gt;
    # allow DNS&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 53&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 53&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;end of services&amp;quot;&lt;br /&gt;
    # allow ping at 2 per sec&lt;br /&gt;
     iptables -t filter -A INPUT -j ACCEPT --in-interface $INET_IF --protocol icmp --icmp-type echo-request --match limit --limit 4/s --limit-burst 3&lt;br /&gt;
     iptables -t filter -A INPUT -j log-and-drop  --in-interface $INET_IF --protocol icmp --icmp-type echo-request&lt;br /&gt;
    # allow responces to local initated connections&lt;br /&gt;
    #iptables -A INPUT -i  $INET_IF --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    #iptables -A FORWARD -i $INET_IF  --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --match state --state RELATED,ESTABLISHED&lt;br /&gt;
    # Set rp_filter to 2&lt;br /&gt;
    for i in `find /proc/sys/net/ipv*/conf -name rp_filter`&lt;br /&gt;
    do&lt;br /&gt;
            echo &amp;quot;2&amp;quot; &amp;gt;$i&lt;br /&gt;
    done&lt;br /&gt;
    # setup a default deny rule for outside traffic&lt;br /&gt;
    iptables -t filter -A INPUT --in-interface $INET_IF -j log-and-drop&lt;br /&gt;
&lt;br /&gt;
* setup fail2ban for ssh and have it null route offenders. edit ignoreip as needed&lt;br /&gt;
    vi /etc/fail2ban/jail.conf&lt;br /&gt;
    ignoreip = 127.0.0.1/8 199.47.172.0/22 44.98.254.0/24 44.72.21.0/24 44.103.0.0/24&lt;br /&gt;
    bantime  = 3600&lt;br /&gt;
    # A host is banned if it has generated &amp;quot;maxretry&amp;quot; during the last &amp;quot;findtime&amp;quot;&lt;br /&gt;
    # seconds.&lt;br /&gt;
    findtime  = 3600&lt;br /&gt;
    # &amp;quot;maxretry&amp;quot; is the number of failures before a host get banned.&lt;br /&gt;
    maxretry = 2&lt;br /&gt;
    banaction = route&lt;br /&gt;
&lt;br /&gt;
* Set the TimeZone to UTC&lt;br /&gt;
    sudo timedatectl set-timezone UTC&lt;br /&gt;
* Set the server up in forward and reverse DNS&lt;br /&gt;
** for reverse have the provider do a CNAME in their reverse file pointing to $DOMAIN.PTR.allstarlink.org.  In the allstarlink.org DNS zone add an entry &lt;br /&gt;
    example:&lt;br /&gt;
    stats             IN      PTR     stats.allstarlink.org.&lt;br /&gt;
This will do a lookup on 130.254.98.44.in-addr.arpa. and return a CNAME pointing to stats.PTR.allstarlink.org, which has a PTR record pointing to stats.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
=== Configure IPSEC ===&lt;br /&gt;
AllStarLink servers use strong crypto using host to host IPSEC between them for protection of services.  This is configured only between servers that need it, as we don't have dynamic tunneling enabled, and each server needs a config for each tunnel.  This can quickly add up to lots of configrations.&lt;br /&gt;
&lt;br /&gt;
This example will show two servers, 1 and 2 with IP 44.1.1.1 and 44.2.2.2 respectively. &lt;br /&gt;
&lt;br /&gt;
==== Server 1 ====&lt;br /&gt;
We need to provision the ipsec tools to know about the connections and configure a pre shared key (PSK). &lt;br /&gt;
Note the left server is always the local server.&lt;br /&gt;
&lt;br /&gt;
    /etc/ipsec.conf&lt;br /&gt;
    conn one-to-two&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.1.1.1&lt;br /&gt;
            right=4.2.2.2&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.1.1.1 44.2.2.2 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Server 2 ====&lt;br /&gt;
&lt;br /&gt;
/etc/ipsec.conf&lt;br /&gt;
    conn two-to-one&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.2.2.2&lt;br /&gt;
            right=4.1.1.1&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.2.2.2 44.1.1.1 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Verify IPsec ====&lt;br /&gt;
&lt;br /&gt;
The 'ipsec' command is used to verify the tunnel is up between the servers&lt;br /&gt;
&lt;br /&gt;
    root@server# ipsec status&lt;br /&gt;
    two-to-one[839]: ESTABLISHED 98 minutes ago, 44.1.1.1[44.1.1.1]...44.2.2.2[44.2.2.2]&lt;br /&gt;
    two-to-one{13209}:  INSTALLED, TRANSPORT, reqid 695, ESP SPIs: c824e4db_i c1e4bf5c_o&lt;br /&gt;
    two-to-one{13209}:   44.1.1.1/32 === 44.2.2.2/32&lt;br /&gt;
If they are not up, check /var/log/syslog and restart ipsec on both servers.  Some times a server can get in a bad status if there is a mis-config.  Also it's worth noting that IPSEC is processed by iptables once it's decrypted, the &amp;lt;code&amp;gt;iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &amp;lt;/code&amp;gt; line in the firewall allows all IPsec packets once decrypted to bypass the firewall.  This is able to prevent traffic between unencrypted services on the servers (e.g. mysql will not connect if the ipsec is down).&lt;br /&gt;
&lt;br /&gt;
=== Configure Postfix ===&lt;br /&gt;
&lt;br /&gt;
Postfix is installed to forward mail for root to a smtp host.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install postfix mailutils&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will run an installer with a curses interface and you must select '''Satallite System'''.  Check the '''System mail''' name is the hostname of the server, and the '''SMTP relay host''' is ''morty.keekles.org''. '''Root and postmaster mail''' should be ''rootmail@allstarlink.org''.&lt;br /&gt;
&lt;br /&gt;
Should you need to reconfigure this use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; dpkg-reconfigure postfix &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other aliases are setup in /etc/aliases.  You must run ''newaliases'' after this is updated for them to take effect.&lt;br /&gt;
&lt;br /&gt;
= Verification =&lt;br /&gt;
&lt;br /&gt;
It's important to verify the server provisiong before being put into production. &lt;br /&gt;
&lt;br /&gt;
== Items to check ==&lt;br /&gt;
* reboot the server/vm, do all services start properly?&lt;br /&gt;
* Is the IP address configured on the server on eth0?&lt;br /&gt;
* Is the hostname set?&lt;br /&gt;
* Is it configured in DNS both forward and reverse?&lt;br /&gt;
* Is the firewall active (try netcat on a non-permitted port)&lt;br /&gt;
* IPSEC is active &amp;lt;code&amp;gt;ipsec status&amp;lt;/code&amp;gt;?&lt;br /&gt;
* Does Screen work in an xterm with scroll back?&lt;br /&gt;
* Is the time set via ntp &amp;lt;code&amp;gt;ntptime&amp;lt;/code&amp;gt; and is the timezone set to UTC?&lt;br /&gt;
* Is fail2ban working?  Make a couple test connections and see if the IP is null routed &amp;lt;code&amp;gt;ip route show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may need to check your other services on this server now.&lt;br /&gt;
&lt;br /&gt;
= Network Monitoring = &lt;br /&gt;
It's time to hand off the server to the NMS team.  Please ensure SNMP is configured and an IPSEC tunnel is built to nms.allstarlink.org&lt;br /&gt;
Logging will be sucked up by graylog.&lt;br /&gt;
&lt;br /&gt;
Please ensure it's being watched in librenms by asking on the admin list or in the slack.&lt;br /&gt;
&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1432</id>
		<title>Server Provisioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1432"/>
		<updated>2019-07-02T01:09:10Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Ubuntu 18 Config */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is intended to be a reference for setting up a VM or Server for AllStatLink.  &lt;br /&gt;
&lt;br /&gt;
= Server Overview = &lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
AllStarLink has standardized on Ubuntu 16.04 LTS for it's servers. &lt;br /&gt;
&lt;br /&gt;
The minimum configuration of any server will be 2 cores of 2 GHz or faster, 4 GiB of ram and 40 GiB of Disk.  &lt;br /&gt;
&lt;br /&gt;
All new servers shall support IPv6, or have it available from the hosting provider.&lt;br /&gt;
&lt;br /&gt;
Reverse IP's shall be delegated via a CNAME to $NAME.PTR.allstarlink.org, where $NAME is the name of the server.&lt;br /&gt;
&lt;br /&gt;
All servers shall be partitioned to use / as the only partition unless a specific configuration is required. &lt;br /&gt;
&lt;br /&gt;
== Install guide == &lt;br /&gt;
&lt;br /&gt;
When provisioning a new server&lt;br /&gt;
&lt;br /&gt;
* check the VM is setup (cpu/mem/disk) as it should be, if not contact the provider&lt;br /&gt;
&lt;br /&gt;
   cat /proc/cpuinfo |grep processor&lt;br /&gt;
   processor       : 0&lt;br /&gt;
   processor       : 1&lt;br /&gt;
   processor       : 2&lt;br /&gt;
   processor       : 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* on the server install python (apt-get install python).  This is needed for the ansibile provisioning&lt;br /&gt;
* setup the server in the infrastructure configs and push the users and keys to it.  &lt;br /&gt;
&lt;br /&gt;
=== Mandatory Software ===&lt;br /&gt;
&lt;br /&gt;
All servers require this software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install ntp ntpdate python vim screen ipsec-tools strongswan fail2ban snmp haveged libacl1-dev python3-dev libssl-dev gcc g++ fio pbzip2 ncdu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mandatory Configs ===&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu 18 Config ====&lt;br /&gt;
&lt;br /&gt;
Ubuntu 18 uses the net netplan config.  It's gay as fuck.&lt;br /&gt;
&lt;br /&gt;
First you need to disable the resolved service:&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl disable systemd-resolved.service&lt;br /&gt;
 sudo systemctl stop systemd-resolved&lt;br /&gt;
 rm /etc/resolv.conf &lt;br /&gt;
 sudo touch /etc/cloud/cloud-init.disabled&lt;br /&gt;
 sudo apt-get purge cloud-init&lt;br /&gt;
 apt-get install ifupdown&lt;br /&gt;
&lt;br /&gt;
Configure  /etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
 systemctl unmask networking&lt;br /&gt;
 systemctl enable networking&lt;br /&gt;
 systemctl restart networking&lt;br /&gt;
&lt;br /&gt;
 systemctl stop systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online&lt;br /&gt;
 systemctl disable systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online&lt;br /&gt;
 systemctl mask systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online&lt;br /&gt;
 apt-get --assume-yes purge nplan netplan.io&lt;br /&gt;
&lt;br /&gt;
==== Network Config ====&lt;br /&gt;
* The network should be configured to use /etc/network/interfaces, and add DNS and the firewall to it and search in the allstarlink.org domain&lt;br /&gt;
&lt;br /&gt;
 # The primary network interface&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet6 static&lt;br /&gt;
    address 9805:0900:0340:1000::2600/64&lt;br /&gt;
    autoconf 0&lt;br /&gt;
    accept_ra 2	&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
     address 44.103.0.49&lt;br /&gt;
     netmask 255.255.255.0&lt;br /&gt;
     network 44.103.0.0&lt;br /&gt;
     broadcast 44.103.0.255&lt;br /&gt;
     gateway 44.103.0.1 &lt;br /&gt;
     dns-nameservers 44.103.0.4 1.1.1.1&lt;br /&gt;
     dns-search allstarlink.org&lt;br /&gt;
     up /etc/network/firewall.sh&lt;br /&gt;
&lt;br /&gt;
* There is typically only one network interface, and it will be named dynamically.  We must setup this using udev to be persistent&lt;br /&gt;
&lt;br /&gt;
    root@server# ifconfig |grep HWaddr&lt;br /&gt;
    eth0      Link encap:Ethernet  HWaddr 52:54:00:73:86:06  &lt;br /&gt;
&lt;br /&gt;
Now take this HWaddr and put it in the config file&lt;br /&gt;
    echo 'SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:73:86:06&amp;quot;, ATTR{dev_id}==&amp;quot;0x0&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, NAME=&amp;quot;eth0&amp;quot;' &amp;gt;/etc/udev/rules.d/70-persistent-net.rules&lt;br /&gt;
&lt;br /&gt;
* configure screen to use the scroll back buffer&lt;br /&gt;
   vim /etc/screenrc&lt;br /&gt;
   uncomment &amp;quot;termcapinfo xterm|xterms|xs|rxvt ti@:te@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* configure bash completion for interactive shells&lt;br /&gt;
    vim /etc/bash.bashrc&lt;br /&gt;
    uncomment the stuff below &lt;br /&gt;
    # enable bash completion in interactive shells &lt;br /&gt;
&lt;br /&gt;
* set the host name&lt;br /&gt;
    echo &amp;quot;domain.allstarlink.org&amp;quot; &amp;gt;/etc/hostname&lt;br /&gt;
&lt;br /&gt;
* set the default editor&lt;br /&gt;
    update-alternatives --config editor &lt;br /&gt;
    Then select #3 vim.basic&lt;br /&gt;
&lt;br /&gt;
* setup a firewall as /etc/network/firewall.sh and chmod +x it.  You'll need to edit this based on the machine.  Note the stuff in tampa uses a firewall on the HV too.&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    INET_IF=eth0&lt;br /&gt;
    &lt;br /&gt;
    #Flush and zero all tables&lt;br /&gt;
    modprobe ip_tables&lt;br /&gt;
    modprobe ipt_limit&lt;br /&gt;
    modprobe iptable_mangle&lt;br /&gt;
    modprobe ipt_state&lt;br /&gt;
    modprobe ipt_LOG&lt;br /&gt;
    modprobe iptable_filter&lt;br /&gt;
    &lt;br /&gt;
    iptables -F INPUT&lt;br /&gt;
    iptables -F FORWARD&lt;br /&gt;
    iptables -t nat -F POSTROUTING&lt;br /&gt;
    iptables -t nat -F PREROUTING&lt;br /&gt;
    &lt;br /&gt;
    #init the log-and-drop chain&lt;br /&gt;
    iptables -F log-and-drop&lt;br /&gt;
    iptables -X log-and-drop&lt;br /&gt;
    iptables -N log-and-drop&lt;br /&gt;
    #init log-and-reject&lt;br /&gt;
    iptables -F log-and-reject&lt;br /&gt;
    iptables -X log-and-reject&lt;br /&gt;
    iptables -N log-and-reject&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;all tables flushed and dropped&amp;quot;&lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-drop -j LOG --log-prefix &amp;quot;[IPTables] Drop &amp;quot;&lt;br /&gt;
    iptables -A log-and-drop -j DROP&lt;br /&gt;
    &lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-reject -j LOG --log-prefix &amp;quot;[IPTables] Reject &amp;quot;&lt;br /&gt;
    iptables -A log-and-reject -j REJECT&lt;br /&gt;
    echo &amp;quot;logging chains setup&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # The packets having the TCP flags activated are dropped&lt;br /&gt;
    # and so for the ones with no flag at all (often used with Nmap scans)&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop&lt;br /&gt;
    &lt;br /&gt;
    #Global blocks&lt;br /&gt;
    #iptables -t filter -A INPUT -j DROP -s 119.118.232.185/24&lt;br /&gt;
    &lt;br /&gt;
    # allow IPSEC from other boxes&lt;br /&gt;
    IPSECsrc='199.47.174.150,44.98.254.151,44.103.0.48,44.103.0.49,44.98.254.145,44.72.21.13,44.72.21.12'&lt;br /&gt;
    #Technically the next two are not needed as we have the policy&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 50 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 51 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p udp --dport 500 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    # this is needed to allow all ipsec packets when it's host to host&lt;br /&gt;
    iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &lt;br /&gt;
    &lt;br /&gt;
    # allow all ssh in&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22&lt;br /&gt;
    &lt;br /&gt;
    #allow http and https&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 80&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 443&lt;br /&gt;
    # allow asterisk 4569&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 4569&lt;br /&gt;
    # allow DNS&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 53&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 53&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;end of services&amp;quot;&lt;br /&gt;
    # allow ping at 2 per sec&lt;br /&gt;
     iptables -t filter -A INPUT -j ACCEPT --in-interface $INET_IF --protocol icmp --icmp-type echo-request --match limit --limit 4/s --limit-burst 3&lt;br /&gt;
     iptables -t filter -A INPUT -j log-and-drop  --in-interface $INET_IF --protocol icmp --icmp-type echo-request&lt;br /&gt;
    # allow responces to local initated connections&lt;br /&gt;
    #iptables -A INPUT -i  $INET_IF --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    #iptables -A FORWARD -i $INET_IF  --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --match state --state RELATED,ESTABLISHED&lt;br /&gt;
    # Set rp_filter to 2&lt;br /&gt;
    for i in `find /proc/sys/net/ipv*/conf -name rp_filter`&lt;br /&gt;
    do&lt;br /&gt;
            echo &amp;quot;2&amp;quot; &amp;gt;$i&lt;br /&gt;
    done&lt;br /&gt;
    # setup a default deny rule for outside traffic&lt;br /&gt;
    iptables -t filter -A INPUT --in-interface $INET_IF -j log-and-drop&lt;br /&gt;
&lt;br /&gt;
* setup fail2ban for ssh and have it null route offenders. edit ignoreip as needed&lt;br /&gt;
    vi /etc/fail2ban/jail.conf&lt;br /&gt;
    ignoreip = 127.0.0.1/8 199.47.172.0/22 44.98.254.0/24 44.72.21.0/24 44.103.0.0/24&lt;br /&gt;
    bantime  = 3600&lt;br /&gt;
    # A host is banned if it has generated &amp;quot;maxretry&amp;quot; during the last &amp;quot;findtime&amp;quot;&lt;br /&gt;
    # seconds.&lt;br /&gt;
    findtime  = 3600&lt;br /&gt;
    # &amp;quot;maxretry&amp;quot; is the number of failures before a host get banned.&lt;br /&gt;
    maxretry = 2&lt;br /&gt;
    banaction = route&lt;br /&gt;
&lt;br /&gt;
* Set the TimeZone to UTC&lt;br /&gt;
    sudo timedatectl set-timezone UTC&lt;br /&gt;
* Set the server up in forward and reverse DNS&lt;br /&gt;
** for reverse have the provider do a CNAME in their reverse file pointing to $DOMAIN.PTR.allstarlink.org.  In the allstarlink.org DNS zone add an entry &lt;br /&gt;
    example:&lt;br /&gt;
    stats             IN      PTR     stats.allstarlink.org.&lt;br /&gt;
This will do a lookup on 130.254.98.44.in-addr.arpa. and return a CNAME pointing to stats.PTR.allstarlink.org, which has a PTR record pointing to stats.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
=== Configure IPSEC ===&lt;br /&gt;
AllStarLink servers use strong crypto using host to host IPSEC between them for protection of services.  This is configured only between servers that need it, as we don't have dynamic tunneling enabled, and each server needs a config for each tunnel.  This can quickly add up to lots of configrations.&lt;br /&gt;
&lt;br /&gt;
This example will show two servers, 1 and 2 with IP 44.1.1.1 and 44.2.2.2 respectively. &lt;br /&gt;
&lt;br /&gt;
==== Server 1 ====&lt;br /&gt;
We need to provision the ipsec tools to know about the connections and configure a pre shared key (PSK). &lt;br /&gt;
Note the left server is always the local server.&lt;br /&gt;
&lt;br /&gt;
    /etc/ipsec.conf&lt;br /&gt;
    conn one-to-two&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.1.1.1&lt;br /&gt;
            right=4.2.2.2&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.1.1.1 44.2.2.2 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Server 2 ====&lt;br /&gt;
&lt;br /&gt;
/etc/ipsec.conf&lt;br /&gt;
    conn two-to-one&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.2.2.2&lt;br /&gt;
            right=4.1.1.1&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.2.2.2 44.1.1.1 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Verify IPsec ====&lt;br /&gt;
&lt;br /&gt;
The 'ipsec' command is used to verify the tunnel is up between the servers&lt;br /&gt;
&lt;br /&gt;
    root@server# ipsec status&lt;br /&gt;
    two-to-one[839]: ESTABLISHED 98 minutes ago, 44.1.1.1[44.1.1.1]...44.2.2.2[44.2.2.2]&lt;br /&gt;
    two-to-one{13209}:  INSTALLED, TRANSPORT, reqid 695, ESP SPIs: c824e4db_i c1e4bf5c_o&lt;br /&gt;
    two-to-one{13209}:   44.1.1.1/32 === 44.2.2.2/32&lt;br /&gt;
If they are not up, check /var/log/syslog and restart ipsec on both servers.  Some times a server can get in a bad status if there is a mis-config.  Also it's worth noting that IPSEC is processed by iptables once it's decrypted, the &amp;lt;code&amp;gt;iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &amp;lt;/code&amp;gt; line in the firewall allows all IPsec packets once decrypted to bypass the firewall.  This is able to prevent traffic between unencrypted services on the servers (e.g. mysql will not connect if the ipsec is down).&lt;br /&gt;
&lt;br /&gt;
=== Configure Postfix ===&lt;br /&gt;
&lt;br /&gt;
Postfix is installed to forward mail for root to a smtp host.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install postfix mailutils&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will run an installer with a curses interface and you must select '''Satallite System'''.  Check the '''System mail''' name is the hostname of the server, and the '''SMTP relay host''' is ''morty.keekles.org''. '''Root and postmaster mail''' should be ''rootmail@allstarlink.org''.&lt;br /&gt;
&lt;br /&gt;
Should you need to reconfigure this use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; dpkg-reconfigure postfix &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other aliases are setup in /etc/aliases.  You must run ''newaliases'' after this is updated for them to take effect.&lt;br /&gt;
&lt;br /&gt;
= Verification =&lt;br /&gt;
&lt;br /&gt;
It's important to verify the server provisiong before being put into production. &lt;br /&gt;
&lt;br /&gt;
== Items to check ==&lt;br /&gt;
* reboot the server/vm, do all services start properly?&lt;br /&gt;
* Is the IP address configured on the server on eth0?&lt;br /&gt;
* Is the hostname set?&lt;br /&gt;
* Is it configured in DNS both forward and reverse?&lt;br /&gt;
* Is the firewall active (try netcat on a non-permitted port)&lt;br /&gt;
* IPSEC is active &amp;lt;code&amp;gt;ipsec status&amp;lt;/code&amp;gt;?&lt;br /&gt;
* Does Screen work in an xterm with scroll back?&lt;br /&gt;
* Is the time set via ntp &amp;lt;code&amp;gt;ntptime&amp;lt;/code&amp;gt; and is the timezone set to UTC?&lt;br /&gt;
* Is fail2ban working?  Make a couple test connections and see if the IP is null routed &amp;lt;code&amp;gt;ip route show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may need to check your other services on this server now.&lt;br /&gt;
&lt;br /&gt;
= Network Monitoring = &lt;br /&gt;
It's time to hand off the server to the NMS team.  Please ensure SNMP is configured and an IPSEC tunnel is built to nms.allstarlink.org&lt;br /&gt;
Logging will be sucked up by graylog.&lt;br /&gt;
&lt;br /&gt;
Please ensure it's being watched in librenms by asking on the admin list or in the slack.&lt;br /&gt;
&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1431</id>
		<title>Server Provisioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1431"/>
		<updated>2019-07-02T01:01:38Z</updated>

		<summary type="html">&lt;p&gt;Bryan: /* Mandatory Configs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is intended to be a reference for setting up a VM or Server for AllStatLink.  &lt;br /&gt;
&lt;br /&gt;
= Server Overview = &lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
AllStarLink has standardized on Ubuntu 16.04 LTS for it's servers. &lt;br /&gt;
&lt;br /&gt;
The minimum configuration of any server will be 2 cores of 2 GHz or faster, 4 GiB of ram and 40 GiB of Disk.  &lt;br /&gt;
&lt;br /&gt;
All new servers shall support IPv6, or have it available from the hosting provider.&lt;br /&gt;
&lt;br /&gt;
Reverse IP's shall be delegated via a CNAME to $NAME.PTR.allstarlink.org, where $NAME is the name of the server.&lt;br /&gt;
&lt;br /&gt;
All servers shall be partitioned to use / as the only partition unless a specific configuration is required. &lt;br /&gt;
&lt;br /&gt;
== Install guide == &lt;br /&gt;
&lt;br /&gt;
When provisioning a new server&lt;br /&gt;
&lt;br /&gt;
* check the VM is setup (cpu/mem/disk) as it should be, if not contact the provider&lt;br /&gt;
&lt;br /&gt;
   cat /proc/cpuinfo |grep processor&lt;br /&gt;
   processor       : 0&lt;br /&gt;
   processor       : 1&lt;br /&gt;
   processor       : 2&lt;br /&gt;
   processor       : 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* on the server install python (apt-get install python).  This is needed for the ansibile provisioning&lt;br /&gt;
* setup the server in the infrastructure configs and push the users and keys to it.  &lt;br /&gt;
&lt;br /&gt;
=== Mandatory Software ===&lt;br /&gt;
&lt;br /&gt;
All servers require this software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install ntp ntpdate python vim screen ipsec-tools strongswan fail2ban snmp haveged libacl1-dev python3-dev libssl-dev gcc g++ fio pbzip2 ncdu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mandatory Configs ===&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu 18 Config ====&lt;br /&gt;
&lt;br /&gt;
Ubuntu 18 uses the &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Network Config ====&lt;br /&gt;
* The network should be configured to use /etc/network/interfaces, and add DNS and the firewall to it and search in the allstarlink.org domain&lt;br /&gt;
&lt;br /&gt;
 # The primary network interface&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet6 static&lt;br /&gt;
    address 9805:0900:0340:1000::2600/64&lt;br /&gt;
    autoconf 0&lt;br /&gt;
    accept_ra 2	&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
     address 44.103.0.49&lt;br /&gt;
     netmask 255.255.255.0&lt;br /&gt;
     network 44.103.0.0&lt;br /&gt;
     broadcast 44.103.0.255&lt;br /&gt;
     gateway 44.103.0.1 &lt;br /&gt;
     dns-nameservers 44.103.0.4 1.1.1.1&lt;br /&gt;
     dns-search allstarlink.org&lt;br /&gt;
     up /etc/network/firewall.sh&lt;br /&gt;
&lt;br /&gt;
* There is typically only one network interface, and it will be named dynamically.  We must setup this using udev to be persistent&lt;br /&gt;
&lt;br /&gt;
    root@server# ifconfig |grep HWaddr&lt;br /&gt;
    eth0      Link encap:Ethernet  HWaddr 52:54:00:73:86:06  &lt;br /&gt;
&lt;br /&gt;
Now take this HWaddr and put it in the config file&lt;br /&gt;
    echo 'SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:73:86:06&amp;quot;, ATTR{dev_id}==&amp;quot;0x0&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, NAME=&amp;quot;eth0&amp;quot;' &amp;gt;/etc/udev/rules.d/70-persistent-net.rules&lt;br /&gt;
&lt;br /&gt;
* configure screen to use the scroll back buffer&lt;br /&gt;
   vim /etc/screenrc&lt;br /&gt;
   uncomment &amp;quot;termcapinfo xterm|xterms|xs|rxvt ti@:te@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* configure bash completion for interactive shells&lt;br /&gt;
    vim /etc/bash.bashrc&lt;br /&gt;
    uncomment the stuff below &lt;br /&gt;
    # enable bash completion in interactive shells &lt;br /&gt;
&lt;br /&gt;
* set the host name&lt;br /&gt;
    echo &amp;quot;domain.allstarlink.org&amp;quot; &amp;gt;/etc/hostname&lt;br /&gt;
&lt;br /&gt;
* set the default editor&lt;br /&gt;
    update-alternatives --config editor &lt;br /&gt;
    Then select #3 vim.basic&lt;br /&gt;
&lt;br /&gt;
* setup a firewall as /etc/network/firewall.sh and chmod +x it.  You'll need to edit this based on the machine.  Note the stuff in tampa uses a firewall on the HV too.&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    INET_IF=eth0&lt;br /&gt;
    &lt;br /&gt;
    #Flush and zero all tables&lt;br /&gt;
    modprobe ip_tables&lt;br /&gt;
    modprobe ipt_limit&lt;br /&gt;
    modprobe iptable_mangle&lt;br /&gt;
    modprobe ipt_state&lt;br /&gt;
    modprobe ipt_LOG&lt;br /&gt;
    modprobe iptable_filter&lt;br /&gt;
    &lt;br /&gt;
    iptables -F INPUT&lt;br /&gt;
    iptables -F FORWARD&lt;br /&gt;
    iptables -t nat -F POSTROUTING&lt;br /&gt;
    iptables -t nat -F PREROUTING&lt;br /&gt;
    &lt;br /&gt;
    #init the log-and-drop chain&lt;br /&gt;
    iptables -F log-and-drop&lt;br /&gt;
    iptables -X log-and-drop&lt;br /&gt;
    iptables -N log-and-drop&lt;br /&gt;
    #init log-and-reject&lt;br /&gt;
    iptables -F log-and-reject&lt;br /&gt;
    iptables -X log-and-reject&lt;br /&gt;
    iptables -N log-and-reject&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;all tables flushed and dropped&amp;quot;&lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-drop -j LOG --log-prefix &amp;quot;[IPTables] Drop &amp;quot;&lt;br /&gt;
    iptables -A log-and-drop -j DROP&lt;br /&gt;
    &lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-reject -j LOG --log-prefix &amp;quot;[IPTables] Reject &amp;quot;&lt;br /&gt;
    iptables -A log-and-reject -j REJECT&lt;br /&gt;
    echo &amp;quot;logging chains setup&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # The packets having the TCP flags activated are dropped&lt;br /&gt;
    # and so for the ones with no flag at all (often used with Nmap scans)&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop&lt;br /&gt;
    &lt;br /&gt;
    #Global blocks&lt;br /&gt;
    #iptables -t filter -A INPUT -j DROP -s 119.118.232.185/24&lt;br /&gt;
    &lt;br /&gt;
    # allow IPSEC from other boxes&lt;br /&gt;
    IPSECsrc='199.47.174.150,44.98.254.151,44.103.0.48,44.103.0.49,44.98.254.145,44.72.21.13,44.72.21.12'&lt;br /&gt;
    #Technically the next two are not needed as we have the policy&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 50 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 51 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p udp --dport 500 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    # this is needed to allow all ipsec packets when it's host to host&lt;br /&gt;
    iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &lt;br /&gt;
    &lt;br /&gt;
    # allow all ssh in&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22&lt;br /&gt;
    &lt;br /&gt;
    #allow http and https&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 80&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 443&lt;br /&gt;
    # allow asterisk 4569&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 4569&lt;br /&gt;
    # allow DNS&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 53&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 53&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;end of services&amp;quot;&lt;br /&gt;
    # allow ping at 2 per sec&lt;br /&gt;
     iptables -t filter -A INPUT -j ACCEPT --in-interface $INET_IF --protocol icmp --icmp-type echo-request --match limit --limit 4/s --limit-burst 3&lt;br /&gt;
     iptables -t filter -A INPUT -j log-and-drop  --in-interface $INET_IF --protocol icmp --icmp-type echo-request&lt;br /&gt;
    # allow responces to local initated connections&lt;br /&gt;
    #iptables -A INPUT -i  $INET_IF --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    #iptables -A FORWARD -i $INET_IF  --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --match state --state RELATED,ESTABLISHED&lt;br /&gt;
    # Set rp_filter to 2&lt;br /&gt;
    for i in `find /proc/sys/net/ipv*/conf -name rp_filter`&lt;br /&gt;
    do&lt;br /&gt;
            echo &amp;quot;2&amp;quot; &amp;gt;$i&lt;br /&gt;
    done&lt;br /&gt;
    # setup a default deny rule for outside traffic&lt;br /&gt;
    iptables -t filter -A INPUT --in-interface $INET_IF -j log-and-drop&lt;br /&gt;
&lt;br /&gt;
* setup fail2ban for ssh and have it null route offenders. edit ignoreip as needed&lt;br /&gt;
    vi /etc/fail2ban/jail.conf&lt;br /&gt;
    ignoreip = 127.0.0.1/8 199.47.172.0/22 44.98.254.0/24 44.72.21.0/24 44.103.0.0/24&lt;br /&gt;
    bantime  = 3600&lt;br /&gt;
    # A host is banned if it has generated &amp;quot;maxretry&amp;quot; during the last &amp;quot;findtime&amp;quot;&lt;br /&gt;
    # seconds.&lt;br /&gt;
    findtime  = 3600&lt;br /&gt;
    # &amp;quot;maxretry&amp;quot; is the number of failures before a host get banned.&lt;br /&gt;
    maxretry = 2&lt;br /&gt;
    banaction = route&lt;br /&gt;
&lt;br /&gt;
* Set the TimeZone to UTC&lt;br /&gt;
    sudo timedatectl set-timezone UTC&lt;br /&gt;
* Set the server up in forward and reverse DNS&lt;br /&gt;
** for reverse have the provider do a CNAME in their reverse file pointing to $DOMAIN.PTR.allstarlink.org.  In the allstarlink.org DNS zone add an entry &lt;br /&gt;
    example:&lt;br /&gt;
    stats             IN      PTR     stats.allstarlink.org.&lt;br /&gt;
This will do a lookup on 130.254.98.44.in-addr.arpa. and return a CNAME pointing to stats.PTR.allstarlink.org, which has a PTR record pointing to stats.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
=== Configure IPSEC ===&lt;br /&gt;
AllStarLink servers use strong crypto using host to host IPSEC between them for protection of services.  This is configured only between servers that need it, as we don't have dynamic tunneling enabled, and each server needs a config for each tunnel.  This can quickly add up to lots of configrations.&lt;br /&gt;
&lt;br /&gt;
This example will show two servers, 1 and 2 with IP 44.1.1.1 and 44.2.2.2 respectively. &lt;br /&gt;
&lt;br /&gt;
==== Server 1 ====&lt;br /&gt;
We need to provision the ipsec tools to know about the connections and configure a pre shared key (PSK). &lt;br /&gt;
Note the left server is always the local server.&lt;br /&gt;
&lt;br /&gt;
    /etc/ipsec.conf&lt;br /&gt;
    conn one-to-two&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.1.1.1&lt;br /&gt;
            right=4.2.2.2&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.1.1.1 44.2.2.2 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Server 2 ====&lt;br /&gt;
&lt;br /&gt;
/etc/ipsec.conf&lt;br /&gt;
    conn two-to-one&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.2.2.2&lt;br /&gt;
            right=4.1.1.1&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.2.2.2 44.1.1.1 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Verify IPsec ====&lt;br /&gt;
&lt;br /&gt;
The 'ipsec' command is used to verify the tunnel is up between the servers&lt;br /&gt;
&lt;br /&gt;
    root@server# ipsec status&lt;br /&gt;
    two-to-one[839]: ESTABLISHED 98 minutes ago, 44.1.1.1[44.1.1.1]...44.2.2.2[44.2.2.2]&lt;br /&gt;
    two-to-one{13209}:  INSTALLED, TRANSPORT, reqid 695, ESP SPIs: c824e4db_i c1e4bf5c_o&lt;br /&gt;
    two-to-one{13209}:   44.1.1.1/32 === 44.2.2.2/32&lt;br /&gt;
If they are not up, check /var/log/syslog and restart ipsec on both servers.  Some times a server can get in a bad status if there is a mis-config.  Also it's worth noting that IPSEC is processed by iptables once it's decrypted, the &amp;lt;code&amp;gt;iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &amp;lt;/code&amp;gt; line in the firewall allows all IPsec packets once decrypted to bypass the firewall.  This is able to prevent traffic between unencrypted services on the servers (e.g. mysql will not connect if the ipsec is down).&lt;br /&gt;
&lt;br /&gt;
=== Configure Postfix ===&lt;br /&gt;
&lt;br /&gt;
Postfix is installed to forward mail for root to a smtp host.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install postfix mailutils&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will run an installer with a curses interface and you must select '''Satallite System'''.  Check the '''System mail''' name is the hostname of the server, and the '''SMTP relay host''' is ''morty.keekles.org''. '''Root and postmaster mail''' should be ''rootmail@allstarlink.org''.&lt;br /&gt;
&lt;br /&gt;
Should you need to reconfigure this use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; dpkg-reconfigure postfix &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other aliases are setup in /etc/aliases.  You must run ''newaliases'' after this is updated for them to take effect.&lt;br /&gt;
&lt;br /&gt;
= Verification =&lt;br /&gt;
&lt;br /&gt;
It's important to verify the server provisiong before being put into production. &lt;br /&gt;
&lt;br /&gt;
== Items to check ==&lt;br /&gt;
* reboot the server/vm, do all services start properly?&lt;br /&gt;
* Is the IP address configured on the server on eth0?&lt;br /&gt;
* Is the hostname set?&lt;br /&gt;
* Is it configured in DNS both forward and reverse?&lt;br /&gt;
* Is the firewall active (try netcat on a non-permitted port)&lt;br /&gt;
* IPSEC is active &amp;lt;code&amp;gt;ipsec status&amp;lt;/code&amp;gt;?&lt;br /&gt;
* Does Screen work in an xterm with scroll back?&lt;br /&gt;
* Is the time set via ntp &amp;lt;code&amp;gt;ntptime&amp;lt;/code&amp;gt; and is the timezone set to UTC?&lt;br /&gt;
* Is fail2ban working?  Make a couple test connections and see if the IP is null routed &amp;lt;code&amp;gt;ip route show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may need to check your other services on this server now.&lt;br /&gt;
&lt;br /&gt;
= Network Monitoring = &lt;br /&gt;
It's time to hand off the server to the NMS team.  Please ensure SNMP is configured and an IPSEC tunnel is built to nms.allstarlink.org&lt;br /&gt;
Logging will be sucked up by graylog.&lt;br /&gt;
&lt;br /&gt;
Please ensure it's being watched in librenms by asking on the admin list or in the slack.&lt;br /&gt;
&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1430</id>
		<title>Server Provisioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=Server_Provisioning&amp;diff=1430"/>
		<updated>2019-07-02T00:57:22Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Updated v6 config&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is intended to be a reference for setting up a VM or Server for AllStatLink.  &lt;br /&gt;
&lt;br /&gt;
= Server Overview = &lt;br /&gt;
&lt;br /&gt;
== Basic Requirements ==&lt;br /&gt;
AllStarLink has standardized on Ubuntu 16.04 LTS for it's servers. &lt;br /&gt;
&lt;br /&gt;
The minimum configuration of any server will be 2 cores of 2 GHz or faster, 4 GiB of ram and 40 GiB of Disk.  &lt;br /&gt;
&lt;br /&gt;
All new servers shall support IPv6, or have it available from the hosting provider.&lt;br /&gt;
&lt;br /&gt;
Reverse IP's shall be delegated via a CNAME to $NAME.PTR.allstarlink.org, where $NAME is the name of the server.&lt;br /&gt;
&lt;br /&gt;
All servers shall be partitioned to use / as the only partition unless a specific configuration is required. &lt;br /&gt;
&lt;br /&gt;
== Install guide == &lt;br /&gt;
&lt;br /&gt;
When provisioning a new server&lt;br /&gt;
&lt;br /&gt;
* check the VM is setup (cpu/mem/disk) as it should be, if not contact the provider&lt;br /&gt;
&lt;br /&gt;
   cat /proc/cpuinfo |grep processor&lt;br /&gt;
   processor       : 0&lt;br /&gt;
   processor       : 1&lt;br /&gt;
   processor       : 2&lt;br /&gt;
   processor       : 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* on the server install python (apt-get install python).  This is needed for the ansibile provisioning&lt;br /&gt;
* setup the server in the infrastructure configs and push the users and keys to it.  &lt;br /&gt;
&lt;br /&gt;
=== Mandatory Software ===&lt;br /&gt;
&lt;br /&gt;
All servers require this software&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install ntp ntpdate python vim screen ipsec-tools strongswan fail2ban snmp haveged libacl1-dev python3-dev libssl-dev gcc g++ fio pbzip2 ncdu&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mandatory Configs ===&lt;br /&gt;
&lt;br /&gt;
* The network should be configured to use /etc/network/interfaces, and add DNS and the firewall to it and search in the allstarlink.org domain&lt;br /&gt;
&lt;br /&gt;
 # The primary network interface&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet6 static&lt;br /&gt;
    address 9805:0900:0340:1000::2600/64&lt;br /&gt;
    autoconf 0&lt;br /&gt;
    accept_ra 2	&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
     address 44.103.0.49&lt;br /&gt;
     netmask 255.255.255.0&lt;br /&gt;
     network 44.103.0.0&lt;br /&gt;
     broadcast 44.103.0.255&lt;br /&gt;
     gateway 44.103.0.1 &lt;br /&gt;
     dns-nameservers 44.103.0.4 1.1.1.1&lt;br /&gt;
     dns-search allstarlink.org&lt;br /&gt;
     up /etc/network/firewall.sh&lt;br /&gt;
&lt;br /&gt;
* There is typically only one network interface, and it will be named dynamically.  We must setup this using udev to be persistent&lt;br /&gt;
&lt;br /&gt;
    root@server# ifconfig |grep HWaddr&lt;br /&gt;
    eth0      Link encap:Ethernet  HWaddr 52:54:00:73:86:06  &lt;br /&gt;
&lt;br /&gt;
Now take this HWaddr and put it in the config file&lt;br /&gt;
    echo 'SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;52:54:00:73:86:06&amp;quot;, ATTR{dev_id}==&amp;quot;0x0&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, NAME=&amp;quot;eth0&amp;quot;' &amp;gt;/etc/udev/rules.d/70-persistent-net.rules&lt;br /&gt;
&lt;br /&gt;
* configure screen to use the scroll back buffer&lt;br /&gt;
   vim /etc/screenrc&lt;br /&gt;
   uncomment &amp;quot;termcapinfo xterm|xterms|xs|rxvt ti@:te@&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* configure bash completion for interactive shells&lt;br /&gt;
    vim /etc/bash.bashrc&lt;br /&gt;
    uncomment the stuff below &lt;br /&gt;
    # enable bash completion in interactive shells &lt;br /&gt;
&lt;br /&gt;
* set the host name&lt;br /&gt;
    echo &amp;quot;domain.allstarlink.org&amp;quot; &amp;gt;/etc/hostname&lt;br /&gt;
&lt;br /&gt;
* set the default editor&lt;br /&gt;
    update-alternatives --config editor &lt;br /&gt;
    Then select #3 vim.basic&lt;br /&gt;
&lt;br /&gt;
* setup a firewall as /etc/network/firewall.sh and chmod +x it.  You'll need to edit this based on the machine.  Note the stuff in tampa uses a firewall on the HV too.&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    INET_IF=eth0&lt;br /&gt;
    &lt;br /&gt;
    #Flush and zero all tables&lt;br /&gt;
    modprobe ip_tables&lt;br /&gt;
    modprobe ipt_limit&lt;br /&gt;
    modprobe iptable_mangle&lt;br /&gt;
    modprobe ipt_state&lt;br /&gt;
    modprobe ipt_LOG&lt;br /&gt;
    modprobe iptable_filter&lt;br /&gt;
    &lt;br /&gt;
    iptables -F INPUT&lt;br /&gt;
    iptables -F FORWARD&lt;br /&gt;
    iptables -t nat -F POSTROUTING&lt;br /&gt;
    iptables -t nat -F PREROUTING&lt;br /&gt;
    &lt;br /&gt;
    #init the log-and-drop chain&lt;br /&gt;
    iptables -F log-and-drop&lt;br /&gt;
    iptables -X log-and-drop&lt;br /&gt;
    iptables -N log-and-drop&lt;br /&gt;
    #init log-and-reject&lt;br /&gt;
    iptables -F log-and-reject&lt;br /&gt;
    iptables -X log-and-reject&lt;br /&gt;
    iptables -N log-and-reject&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;all tables flushed and dropped&amp;quot;&lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-drop -j LOG --log-prefix &amp;quot;[IPTables] Drop &amp;quot;&lt;br /&gt;
    iptables -A log-and-drop -j DROP&lt;br /&gt;
    &lt;br /&gt;
    # Specific chain used for logging packets before blocking them&lt;br /&gt;
    iptables -A log-and-reject -j LOG --log-prefix &amp;quot;[IPTables] Reject &amp;quot;&lt;br /&gt;
    iptables -A log-and-reject -j REJECT&lt;br /&gt;
    echo &amp;quot;logging chains setup&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # The packets having the TCP flags activated are dropped&lt;br /&gt;
    # and so for the ones with no flag at all (often used with Nmap scans)&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL ALL -j log-and-drop&lt;br /&gt;
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j log-and-drop&lt;br /&gt;
    &lt;br /&gt;
    #Global blocks&lt;br /&gt;
    #iptables -t filter -A INPUT -j DROP -s 119.118.232.185/24&lt;br /&gt;
    &lt;br /&gt;
    # allow IPSEC from other boxes&lt;br /&gt;
    IPSECsrc='199.47.174.150,44.98.254.151,44.103.0.48,44.103.0.49,44.98.254.145,44.72.21.13,44.72.21.12'&lt;br /&gt;
    #Technically the next two are not needed as we have the policy&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 50 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p 51 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    iptables -A INPUT -i $INET_IF -p udp --dport 500 -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot;&lt;br /&gt;
    # this is needed to allow all ipsec packets when it's host to host&lt;br /&gt;
    iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &lt;br /&gt;
    &lt;br /&gt;
    # allow all ssh in&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 22&lt;br /&gt;
    &lt;br /&gt;
    #allow http and https&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 80&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 443&lt;br /&gt;
    # allow asterisk 4569&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 4569&lt;br /&gt;
    # allow DNS&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol tcp --dport 53&lt;br /&gt;
    #iptables -t filter -A INPUT -j ACCEPT --protocol udp --dport 53&lt;br /&gt;
    &lt;br /&gt;
    echo &amp;quot;end of services&amp;quot;&lt;br /&gt;
    # allow ping at 2 per sec&lt;br /&gt;
     iptables -t filter -A INPUT -j ACCEPT --in-interface $INET_IF --protocol icmp --icmp-type echo-request --match limit --limit 4/s --limit-burst 3&lt;br /&gt;
     iptables -t filter -A INPUT -j log-and-drop  --in-interface $INET_IF --protocol icmp --icmp-type echo-request&lt;br /&gt;
    # allow responces to local initated connections&lt;br /&gt;
    #iptables -A INPUT -i  $INET_IF --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    #iptables -A FORWARD -i $INET_IF  --match state --state NEW,INVALID -j log-and-drop&lt;br /&gt;
    iptables -t filter -A INPUT -j ACCEPT --match state --state RELATED,ESTABLISHED&lt;br /&gt;
    # Set rp_filter to 2&lt;br /&gt;
    for i in `find /proc/sys/net/ipv*/conf -name rp_filter`&lt;br /&gt;
    do&lt;br /&gt;
            echo &amp;quot;2&amp;quot; &amp;gt;$i&lt;br /&gt;
    done&lt;br /&gt;
    # setup a default deny rule for outside traffic&lt;br /&gt;
    iptables -t filter -A INPUT --in-interface $INET_IF -j log-and-drop&lt;br /&gt;
&lt;br /&gt;
* setup fail2ban for ssh and have it null route offenders. edit ignoreip as needed&lt;br /&gt;
    vi /etc/fail2ban/jail.conf&lt;br /&gt;
    ignoreip = 127.0.0.1/8 199.47.172.0/22 44.98.254.0/24 44.72.21.0/24 44.103.0.0/24&lt;br /&gt;
    bantime  = 3600&lt;br /&gt;
    # A host is banned if it has generated &amp;quot;maxretry&amp;quot; during the last &amp;quot;findtime&amp;quot;&lt;br /&gt;
    # seconds.&lt;br /&gt;
    findtime  = 3600&lt;br /&gt;
    # &amp;quot;maxretry&amp;quot; is the number of failures before a host get banned.&lt;br /&gt;
    maxretry = 2&lt;br /&gt;
    banaction = route&lt;br /&gt;
&lt;br /&gt;
* Set the TimeZone to UTC&lt;br /&gt;
    sudo timedatectl set-timezone UTC&lt;br /&gt;
* Set the server up in forward and reverse DNS&lt;br /&gt;
** for reverse have the provider do a CNAME in their reverse file pointing to $DOMAIN.PTR.allstarlink.org.  In the allstarlink.org DNS zone add an entry &lt;br /&gt;
    example:&lt;br /&gt;
    stats             IN      PTR     stats.allstarlink.org.&lt;br /&gt;
This will do a lookup on 130.254.98.44.in-addr.arpa. and return a CNAME pointing to stats.PTR.allstarlink.org, which has a PTR record pointing to stats.allstarlink.org.&lt;br /&gt;
&lt;br /&gt;
=== Configure IPSEC ===&lt;br /&gt;
AllStarLink servers use strong crypto using host to host IPSEC between them for protection of services.  This is configured only between servers that need it, as we don't have dynamic tunneling enabled, and each server needs a config for each tunnel.  This can quickly add up to lots of configrations.&lt;br /&gt;
&lt;br /&gt;
This example will show two servers, 1 and 2 with IP 44.1.1.1 and 44.2.2.2 respectively. &lt;br /&gt;
&lt;br /&gt;
==== Server 1 ====&lt;br /&gt;
We need to provision the ipsec tools to know about the connections and configure a pre shared key (PSK). &lt;br /&gt;
Note the left server is always the local server.&lt;br /&gt;
&lt;br /&gt;
    /etc/ipsec.conf&lt;br /&gt;
    conn one-to-two&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.1.1.1&lt;br /&gt;
            right=4.2.2.2&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.1.1.1 44.2.2.2 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Server 2 ====&lt;br /&gt;
&lt;br /&gt;
/etc/ipsec.conf&lt;br /&gt;
    conn two-to-one&lt;br /&gt;
            authby=secret&lt;br /&gt;
            #auto=start enabled the tunnel to come up even if there is not traffic for it.  &lt;br /&gt;
            auto=start&lt;br /&gt;
            keyexchange=ike&lt;br /&gt;
            left=4.2.2.2&lt;br /&gt;
            right=4.1.1.1&lt;br /&gt;
            leftikeport=500&lt;br /&gt;
            rightikeport=500   &lt;br /&gt;
            type=transport&lt;br /&gt;
            esp=aes128gcm16!&lt;br /&gt;
            dpddelay=5&lt;br /&gt;
            dpdtimeout=20&lt;br /&gt;
            dpdaction=restart&lt;br /&gt;
&lt;br /&gt;
    vim /etc/ipsec.secrets&lt;br /&gt;
    44.2.2.2 44.1.1.1 : PSK &amp;quot;This is the AllStarLink PSK&amp;quot;&lt;br /&gt;
Then do an 'ipsec restart' on the server.&lt;br /&gt;
&lt;br /&gt;
==== Verify IPsec ====&lt;br /&gt;
&lt;br /&gt;
The 'ipsec' command is used to verify the tunnel is up between the servers&lt;br /&gt;
&lt;br /&gt;
    root@server# ipsec status&lt;br /&gt;
    two-to-one[839]: ESTABLISHED 98 minutes ago, 44.1.1.1[44.1.1.1]...44.2.2.2[44.2.2.2]&lt;br /&gt;
    two-to-one{13209}:  INSTALLED, TRANSPORT, reqid 695, ESP SPIs: c824e4db_i c1e4bf5c_o&lt;br /&gt;
    two-to-one{13209}:   44.1.1.1/32 === 44.2.2.2/32&lt;br /&gt;
If they are not up, check /var/log/syslog and restart ipsec on both servers.  Some times a server can get in a bad status if there is a mis-config.  Also it's worth noting that IPSEC is processed by iptables once it's decrypted, the &amp;lt;code&amp;gt;iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT --src &amp;quot;$IPSECsrc&amp;quot; &amp;lt;/code&amp;gt; line in the firewall allows all IPsec packets once decrypted to bypass the firewall.  This is able to prevent traffic between unencrypted services on the servers (e.g. mysql will not connect if the ipsec is down).&lt;br /&gt;
&lt;br /&gt;
=== Configure Postfix ===&lt;br /&gt;
&lt;br /&gt;
Postfix is installed to forward mail for root to a smtp host.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt-get install postfix mailutils&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will run an installer with a curses interface and you must select '''Satallite System'''.  Check the '''System mail''' name is the hostname of the server, and the '''SMTP relay host''' is ''morty.keekles.org''. '''Root and postmaster mail''' should be ''rootmail@allstarlink.org''.&lt;br /&gt;
&lt;br /&gt;
Should you need to reconfigure this use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; dpkg-reconfigure postfix &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
other aliases are setup in /etc/aliases.  You must run ''newaliases'' after this is updated for them to take effect.&lt;br /&gt;
&lt;br /&gt;
= Verification =&lt;br /&gt;
&lt;br /&gt;
It's important to verify the server provisiong before being put into production. &lt;br /&gt;
&lt;br /&gt;
== Items to check ==&lt;br /&gt;
* reboot the server/vm, do all services start properly?&lt;br /&gt;
* Is the IP address configured on the server on eth0?&lt;br /&gt;
* Is the hostname set?&lt;br /&gt;
* Is it configured in DNS both forward and reverse?&lt;br /&gt;
* Is the firewall active (try netcat on a non-permitted port)&lt;br /&gt;
* IPSEC is active &amp;lt;code&amp;gt;ipsec status&amp;lt;/code&amp;gt;?&lt;br /&gt;
* Does Screen work in an xterm with scroll back?&lt;br /&gt;
* Is the time set via ntp &amp;lt;code&amp;gt;ntptime&amp;lt;/code&amp;gt; and is the timezone set to UTC?&lt;br /&gt;
* Is fail2ban working?  Make a couple test connections and see if the IP is null routed &amp;lt;code&amp;gt;ip route show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may need to check your other services on this server now.&lt;br /&gt;
&lt;br /&gt;
= Network Monitoring = &lt;br /&gt;
It's time to hand off the server to the NMS team.  Please ensure SNMP is configured and an IPSEC tunnel is built to nms.allstarlink.org&lt;br /&gt;
Logging will be sucked up by graylog.&lt;br /&gt;
&lt;br /&gt;
Please ensure it's being watched in librenms by asking on the admin list or in the slack.&lt;br /&gt;
&lt;br /&gt;
[[Category: Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:KC6WJJ&amp;diff=1425</id>
		<title>User talk:KC6WJJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:KC6WJJ&amp;diff=1425"/>
		<updated>2019-06-07T04:42:03Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:KC6WJJ&amp;diff=1424</id>
		<title>User:KC6WJJ</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:KC6WJJ&amp;diff=1424"/>
		<updated>2019-06-07T04:42:03Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am a disabled Viet Nam Vet, retired police officer and retired gunsmith.  I have been a HAM sense 1991.  I have climbed towers and setup field day trailers when I was with The Super System in the 90's.   enjoy talking to other people and where else can you talk to people from all over. &lt;br /&gt;
&lt;br /&gt;
I like to build things and like to learn new things.  I am teaching some of my grand children to become Hams, as our future is in our young people.&lt;br /&gt;
&lt;br /&gt;
I am helping to set up a Ham Radio station at the City of Orange, American Legion.  Our hpoe is to get young vets to get into Ham &lt;br /&gt;
radio.&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User_talk:Ab8yk&amp;diff=1423</id>
		<title>User talk:Ab8yk</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User_talk:Ab8yk&amp;diff=1423"/>
		<updated>2019-06-07T04:41:42Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[]&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
	<entry>
		<id>https://wiki.pttlink.org/index.php?title=User:Ab8yk&amp;diff=1422</id>
		<title>User:Ab8yk</title>
		<link rel="alternate" type="text/html" href="https://wiki.pttlink.org/index.php?title=User:Ab8yk&amp;diff=1422"/>
		<updated>2019-06-07T04:41:42Z</updated>

		<summary type="html">&lt;p&gt;Bryan: Creating user page for new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;long time echolink but trying out allstar&lt;/div&gt;</summary>
		<author><name>Bryan</name></author>
	</entry>
</feed>