AX.25 to Telnet Packet Bridge for Kali Linux
This project provides a two-way bridge between AX.25 packet connections from a Kantronics packet communicator and a telnet BBS at bbs.local.mesh.
- Listens for AX.25 connections on your callsign
- Presents a text-based menu to users upon connection
- Allows switching between BBS access and local commands
- Forwards data bidirectionally between AX.25 clients and the telnet BBS at bbs.local.mesh:23
- Supports multiple concurrent connections (up to 50)
- Connection timeouts and input validation for robustness
- Resource management with connection limits
- Performance monitoring and statistics
- Kali Linux
- ax25-tools and ax25-apps packages
- AX.25 interface configured (e.g., ax0)
- Python 3
- Access to bbs.local.mesh telnet BBS
-
Install AX.25 tools:
sudo apt update sudo apt install ax25-tools ax25-apps -
Configure AX.25 interface (replace /dev/ttyUSB0 with your serial device connected to Kantronics TNC):
sudo kissattach /dev/ttyUSB0 ax0 sudo ifconfig ax0 up sudo axparms -setcall ax0 YOUR_CALLSIGN -
Ensure the Kantronics TNC is in KISS mode and connected.
-
Clone or download this repository.
-
Configure AX.25 interface (replace /dev/ttyUSB0 with your serial device connected to Kantronics TNC):
sudo kissattach /dev/ttyUSB0 ax0 sudo ifconfig ax0 up sudo axparms -setcall ax0 YOUR_CALLSIGN -
Run the bridge with your callsign:
python3 bridge.py --callsign YOUR_CALLSIGNOptional arguments:
--host BBS_HOST: Telnet BBS hostname (default: bbs.local.mesh)--port BBS_PORT: Telnet BBS port (default: 23)--interface AX25_IF: AX.25 interface name (default: ax0)
Example:
python3 bridge.py --callsign N0CALL --host bbs.example.com --port 8023 -
From your packet communicator, connect to your callsign (e.g., using AX.25 commands to connect to YOUR_CALLSIGN).
-
The bridge will present a text menu allowing users to choose between connecting to the BBS or accessing local commands.
When users connect via AX.25, they are presented with a text menu:
Welcome to the AX.25 Bridge
1. Connect to BBS
2. Local Commands
Choose an option:
- Connects the user directly to the telnet BBS
- Full bidirectional data forwarding
- All keystrokes are sent directly to the BBS - you can type 'q', 'exit', or any BBS commands normally
- The bridge does not interpret commands in this mode
Available commands:
HELP- Show available commandsSTATUS- Show bridge statusBBS- Switch to BBS connectionCONNECT <host>[:port]- Connect to any telnet server (default port 23)EXIT- Disconnect (requires confirmation)
Users can switch between modes at any time.
All AX.25 users will appear to connect from the bridge's IP address to telnet servers. Each user gets their own separate telnet connection, but they originate from the same source IP.
To help BBS systems identify individual users, the bridge sends an identification banner when connecting:
[AX.25 Bridge - User: CALLSIGN]
This appears at the start of the telnet session and can help with logging and user identification on the BBS side. To automatically start the bridge when the system boots:
-
Copy the service file:
sudo cp ax25-bridge.service /etc/systemd/system/ -
Edit the service file to set your callsign and any other parameters:
sudo nano /etc/systemd/system/ax25-bridge.serviceUpdate the
ExecStartline with your callsign and desired options. -
Reload systemd and enable the service:
sudo systemctl daemon-reload sudo systemctl enable ax25-bridge -
Start the service:
sudo systemctl start ax25-bridge -
Check status:
sudo systemctl status ax25-bridge -
View logs:
sudo journalctl -u ax25-bridge -f
The service will automatically restart if it crashes and start on boot.
- Connection timeouts (30 seconds) prevent hanging connections
- Input validation prevents malformed hostnames/ports in CONNECT command
- Maximum 50 concurrent connections to handle high user loads
- Daemon threads for efficient resource management
- Performance monitoring with connection statistics
- Automatic cleanup prevents resource leaks