2024-03-10 10:58:53 +11:00
|
|
|
# jrouter
|
|
|
|
|
2024-03-31 09:33:21 +11:00
|
|
|
Home-grown alternative implementation of Apple Internet Router 3.0
|
|
|
|
|
|
|
|
## Goals
|
|
|
|
|
|
|
|
* Full compatibility with Apple Internet Router 3.0
|
|
|
|
* Function on modern operating systems
|
|
|
|
* EtherTalk support
|
|
|
|
|
|
|
|
TashTalk could be a stretch goal, if I can acquire one!
|
|
|
|
|
2024-04-17 09:21:14 +10:00
|
|
|
## Caveats
|
|
|
|
|
|
|
|
Things I plan to fix Real Soon Now:
|
|
|
|
|
|
|
|
* It currently listens to all AppleTalk and AARP traffic on the EtherTalk port.
|
|
|
|
This might not play well with other AppleTalk software, e.g. netatalk.
|
|
|
|
* Also it currently uses the default Ethernet address for the interface for
|
|
|
|
sending packets. I plan to add the ability to configure a different address.
|
|
|
|
* It doesn't do any of the required packet splitting to keep packets under the
|
|
|
|
AppleTalk size limits. In particular ZIP GetZoneList Replies are incorrect
|
|
|
|
when the zone list would exceed the limit.
|
|
|
|
* It logs a lot and has no other monitoring or observability capability. I plan
|
|
|
|
to add a Prometheus metrics endpoint and at least add log levels / verbosity
|
|
|
|
flag.
|
|
|
|
* The AURP implementation is strictly incomplete, and lost connections with
|
|
|
|
configured peers aren't re-established after some backoff. This won't be too
|
|
|
|
difficult.
|
|
|
|
|
|
|
|
Things I plan to fix At Some Point:
|
|
|
|
|
|
|
|
* For expediency I made it act as a _seed router_. At some point I might add
|
|
|
|
"soft seed" functionality.
|
|
|
|
|
|
|
|
|
2024-03-31 09:33:21 +11:00
|
|
|
## How to use
|
|
|
|
|
2024-04-15 11:38:30 +10:00
|
|
|
WARNING: It Barely Works™
|
|
|
|
|
|
|
|
First, set up a `jrouter.yaml` (use the one in this repo as an example).
|
|
|
|
|
|
|
|
TODO: explain the configuration file
|
|
|
|
|
|
|
|
Building and running:
|
|
|
|
|
|
|
|
```shell
|
2024-04-15 11:42:12 +10:00
|
|
|
sudo apt install libpcap-dev
|
2024-04-15 11:38:30 +10:00
|
|
|
go install gitea.drjosh.dev/josh/jrouter@latest
|
|
|
|
sudo setcap 'CAP_NET_BIND_SERVICE=ep CAP_NET_RAW=ep' ~/go/bin/jrouter
|
|
|
|
~/go/bin/jrouter
|
|
|
|
```
|
|
|
|
|
|
|
|
* `NET_BIND_SERVICE` is needed to bind UDP port 387 (for talking between AIRs)
|
|
|
|
* `NET_RAW` is needed for EtherTalk
|
|
|
|
|
|
|
|
TODO: instructions for non-Linux machines
|