Configuring Direwolf for HF IP over AX25 using tncattach.
First of all, IP over AX25 is not talked about as much as it should be. I know it’s old and slow, but we can send entire Ethernet frames over it, and it still has existing support within modern TNCs. As long as APRS is still kicking, AX25 will be too. There’s a lot of niche sub-hobby’s in amateur radio, and “oldschool” packet radio is one of them. We’re going to take this “oldschool” technology and show how it can be used to create a modern day wold wide client-server network infrastructure independent of the “grid”.
- Debian based Linux distribution such as Ubuntu(or Debian)
- An HF Radio
- An Audio interface with PTT functionality for your HF Radio.
PTT instead of vox is required due to the fast switching nature of packet radio.
- Have a non root user with sudo privileges. If you don’t know how to give your user sudo privileges, check out how here first. All commands below are ran as a regular user.
- You know how to edit text files via the command line.
Installing and Configuring Direwolf
The Install is straightforward and the below should work on any Debian Based Linux Distribution:
sudo apt update sudo apt install git gcc g++ make cmake libasound2-dev libudev-dev -y cd git clone https://www.github.com/wb2osz/direwolf && cd direwolf mkdir build && cd build cmake .. make -j4 sudo make install make install-conf
Your Direwolf configuration file is now located at /home/youruser/direwolf.conf.
The Configuration will vary depending on your radio audio interface, and every configuration can not be explained here (as there are a lot). In simple terms, you need to configure an Audio Interface and a PTT Interface. If you only have one audio interface, the audio partition can be left alone.
To Determine your audio interface issue the command:
You will see a card interface (0-9) and a sub-device Interface (0-9). Note this combination down, and insert it into the Direwolf configuration file at ~/direwolf.conf.
Next you will need to determine your PTT interface. There are many options for this, so please refer to the Direwolf official documentation section 9.2.9 here. If you are using the DigiRig, once again TheTechPrepper already has a great post about it here. The article states its for Baofeng, but PTT will be the same for any radio with the DigiRig. Just stop at “YAAC Installation”.
Special Configuration for HF and AX25
Now that Audio and PTT are finished, we are going to add a few more changes to the configuration file to get us legal on HF. Find the “MODEM” line and comment out any existent lines by adding a “#” in front. Then add the below:
#nano ~/direwolf.conf MODEM 300 1600:1800 7@30 /4 #You may also try the following to see if you get more decoded frames: #The "D" Is focused toward HF decoding, but have mixed results and more CPU use. #MODEM 300 1600:1800 7@30 /4 D
Next add the following line to get AX25 to be a little more error resistant:
#nano ~/direwolf.conf FIX_BITS 1 AX25 #The below may be added if your radio is not keying fast enough and missing the packet header: TXDELAY 30
Installing and Configuring tncattach:
tncattach is a modern update on kissattach that will allow us to pass Ethernet frames.
sudo apt install net-tools screen ax25-tools -y cd ~ git clone https://github.com/markqvist/tncattach.git cd tncattach make sudo make install
Putting it all Together
Run direwolf/tncattach via network Kiss Interface:
We will keep it simple and open three terminal interfaces. One for direwolf, another for tncattach, and one to play with.
In the first terminal, run this command to start Direwolf:
/usr/local/bin/direwolf -c ~/direwolf.conf
In another terminal window, run the following command to start tncattach WITH Ethernet frames in a point to multipoint network: (replacing the callsign with yours). You may need to adjust the IP for your needs, but
sudo tncattach --kisstcp --tcphost=127.0.0.1 --tcpport=8001 -s 'Amateur Radio Station KN4MKB' -t 20 -m 300 --noipv6 -i 18.104.22.168/8 -v -e
If you only need a point to point network without Ethernet frames, you can run the following instead to decrease the overhead and increase the speed (The other End would need to use 22.214.171.124/30):
sudo tncattach --kisstcp --tcphost=127.0.0.1 --tcpport=8001 -s 'Amateur Radio Station KN4MKB' -t 300 -m 300 --noipv6 -i 126.96.36.199/30 -v
Run direwolf and tncattach via serial interface
This method should have the same outcome as the above, but serves as an alternate if the above does not work for some reason or another.
In the first terminal start direwolf:
/usr/local/bin/direwolf -t 0 -p -c ~/direwolf.conf
Note the serial interface Example “/dev/pts/1”
In the second terminal start tncattach with Ethernet frames for a point to multipoint network using the serial interface above, and your callsign.
sudo tncattach /dev/pts/1 115200 -s 'Amateur Radio Station KN4MKB' -t 300 -m 300 --noipv6 -i 188.8.131.52/8 -e
If you only need a point to point network such as a client-server, you can use the following to run without Ethernet frames to decrease overhead and increase bandwidth:
sudo tncattach /dev/pts/1 115200 -s 'Amateur Radio Station KN4MKB' -t 300 -m 300 --noipv6 -i 184.108.40.206/30 -v
Testing out the network.
On your third and final terminal, we will try and ping the distant end. This assumes you are using IP 220.127.116.11, and the other side is using 18.104.22.168.
#Issue two ping commands with long timeouts to a distant station: ping -s 1 -i 20 -W 20 -c 2 22.214.171.124
You can even start a webserver with python on one side, and attempt to connect to it in your browser.
sudo apt-get install python python -m http.server 81
Visit http://126.96.36.199:81 to try and connect to the other side.
Untested Optimizations for Direwolf:
These settings have not been tried by me personally, but have been known to work well elsewhere.
MODEM 300 2130:2230 D PTT GPIO 21 DWAIT 0 SLOTTIME 12 PERSIST 63 TXDELAY 40 TXTAIL 10 FIX_BITS 1 AX25