AX.25 and Direwolf under Linux

I initially was interested in getting Winlink working, so I could send and receive email from anywhere in the world, even thousands of miles from a phone tower, or Internet connection.
As the name suggests, it's heavily focussed around Windows. I don't have any Windows computers in my house, and I don't want to use Wine, so that looked like a dead-end.

So I changed my approach a little. I wondered if it was possible to get an IP connection over an HF radio link. And that's what AX.25 is. I remember seeing AX.25 stuff in the kernel options when compiling my own kernels many years ago.
The good thing about the OSI networking model is that you can replace any layer, and the other layers don't care.
Indeed - people have used pigeons as their physical layer before.
So, as the other layers won't notice the difference, all your existing software will work as normal.
Just really really slowly. 300bps is incredibly slow. If you thought a 56k modem was slow, you ain't seen nothing yet. Still - a slow connection is better than no connection.
One other thing - encryption is banned in amateur radio, so you can't use HTTPS, or SSH, or anything else like that over the link.

To get two Linux computers talking over AX.25 and Direwolf

Perform the following steps on both computers. Remember to use a different IP address (in the same subnet!) on each computer.
Also, make sure you use different callsigns

sudo apt-get install ax25-tools direwolf
sudo modprobe -v ax25
# Add the following to /etc/ax25/axports
yourcall yourcall 0 255 7 My Thing

# In one terminal:
direwolf -p -B 300

# In a second terminal
# The device has to match the one output by direwolf
sudo kissattach /dev/pts/1 yourcall
sudo kissparms -p yourcall -t 300 -l 10 -s 12 -r 80 -f n
sudo ifconfig ax0
ping -c 1

Does it work?

I've had this setup working between two laptops sat next to one another, with no radio link involved. I managed to ping between them, and telnet to port 22 and see the SSH banner.
If you want to try more than one ping, try increasing the interval (-i) and timeout (-W)
The next step is to find a Linux user, with a ham licence, within a decent distance of my not-too-super station who wants to try getting computers talking over HF.
I'm not quite sure what the real-world application of having two computers that could communicate over IP with each other over an HF link is. Hooking up one end to an internet connection wouldn't be that useful (see the no encryption bit above), and most software is too chatty to use.

Error handling

AX.25 seems to use a 16-bit CRC, and if there is a single error in the packet, the checksum is invalid, and the packet is discarded. On a noisy HF circuit, this could make it very inefficient, retrying each packet, over and over, until it gets through perfectly.
It appears that AX.25 doesn't employ any forward error correction. The fact that FX.25 exists seems to imply that there isn't any. (I can't find any reference to FX.25 in my Linux distro though, so I'm assuming it's not supported).


I had a problem with a version of Direwolf, so I downloaded and compiled my own version from https://github.com/wb2osz/direwolf, which was pretty painless.
I didn't get PTT working, but I didn't try very hard. I'll try again later, and update this.

IP addresses

Yes, I'm aware that has been assigned. Yes, I'm aware I won't be able to reach the "real" while I'm playing with this. Yes, I'm aware of RFC1918. Yes, I'm aware of AMPRNet. No, it *really* doesn't matter for a closed network between two nodes.