Earlier this year I had lots of fun participating in GlobalTalk, a fun collaborative experiment where a bunch of folks interconnected their home AppleTalk networks into one global network that allowed their classic Macs and other devices to communicate across vast distances. While AppleTalk is normally tied to a physical location (contemporary uses were usually limited to offices or schools), I was eager to experiment with using it on the go.

With ubiquitous mobile internet these days, this shouldn’t be hard. However, Apple Internet Router, the software we’ve been using to route AppleTalk over the internet, relies on UDP port 387, which it needs to expose to other routers it’s connecting to. At home, that’s easy — we all just open that inbound port in our firewalls and forward it to the AIR internal IP. If you’re lucky, your ISP may provide you with a permanent public IP. If you’re not lucky, you can still set up dynamic DNS to a domain name. However, on the move it’s a different story. Normally you don’t get a static IP on your mobile connection and you can’t open up inbound ports. And if you’re trying to use someone else’s WiFi or wired internet, you still need them to make those firewall changes. Not very practical when you want to be on the move.

My solution? VPN and a bunch of small, physical equipment. Here’s the general idea:

  • an OpenVPN server with a static public IP and firewall is the end of our “internal” network and the edge to the public internet. Its public IP is seen by the rest of the GlobalTalk network. It port forwards UDP 387 to its only VPN client (OpenWRT router). It runs in AWS but it could be anywhere.
  • an OpenWRT router installed on a Raspberry Pi connects to the OpenVPN server via whatever internet connection is available. It can be Ethernet or WiFi via USB dongle. OpenWRT port forwards UDP 387 to AIR running in QEMU on a MBP that’s connected to the OpenWRT’s internal network
  • The OpenWRT router is connected to an ethernet switch to establish its internal network
  • A MBP running QEMU with AIR is setup with USB ethernet passthrough. This connection goes to the ethernet switch. AIR is setup with IP on the OpenWRT “internal” network, and the OpenWRT is forwarding UDP 387 to that IP
  • AppleTalk devices are connected to the ethernet switch. Those that support AppleTalk over Ethernet connect directly. A TashTalk is connected to provide LocalTalk connections via daisy chained dongles

But where would I deploy this? While I chuckled at the idea of running this on a subway train, I decided to target VCF Festival East. GlobalTalk was such a big thing for me in the spring, and I thought it would be fun to show other folks what some of us have been doing with our networked classic Macs.

Replacing the cheap wireless router with a RPi

My plan pretty much worked exactly as outlined above. There were some hiccups — I initially tried using a cheap router with OpenWRT and spent hours trying to get it to run properly. Finally I moved to a Raspberry Pi as the OpenWRT router and never looked back. My primary reason for trying to use a network device was to cut down on physical equipment needed — the cheapo router had a built in switch. But using the Rpi + extra dongles for Ethernet wasn’t horrible. I still packed the cheap wireless router, in case of emergency.

Ultimately, this setup easily fit inside a backpack, but it was bulky. Because AppleTalk requires physical Ethernet (or at least it needs to think it’s using physical Ethernet), the whole configuration used lots of cables and dongles. Had I managed to emulate AIR directly on the RPi — perhaps by running Josh Perez’s jrouter — this would have been a lot simpler. But this was just around the time they were developing it, and AIR inside QEMU was the most flexible Apple Internet Router deployment I had available to me.

With a few hours to spare the night before VCF East, I successfully tested the mobile GlobalTalk setup from my LocalTalk enabled PowerBook. The connection didn’t touch my home network — it was all running over my cell phone connection!

With the setup successfully tested, I set out for VCF East. I travelled by bike and train, so this setup was truly certified “mobile”!

Once I got there, I tried to get connected by Ethernet. I had reached out to the organizers earlier, asking if they could provide a port or a cable. Unfortunately, that didn’t pan out. VCF is a guest at the InfoAge Science Center, and network infrastructure is somewhat hard to come by in the hundred year old Camp Evans buildings. Not an issue for the mobile GlobalTalk setup though — I was able to connect to their public WiFi. It was a good call to bring the wireless router with me, because the small USB WiFi dongle on the RPi couldn’t maintain a strong enough connection. I switched out the wireless router into wireless bridge mode and connected to VCF East public WiFi. We were good to go!

And this is where, sadly, this story mostly ends. I didn’t have a table this year, so I offered the connection to some other folks. They were very gracious to host me at their table, but our attempt to share their ImageWriter II over GlobalTalk unfortunately failed — due to an issue with TashTalk (which has since been fixed!), I wasn’t able to extend the LocalTalk connection to their printer. We ended up running the connection for the duration of the event, and some dear friends left us messages in the networked share I set up inside the temporary VCF East zone.

Messages left in the “VCF Share”

Nonetheless, I consider this experiment a success! In retrospect, there are two things I would have done differently

  • beyond just having a proof of concept, I should have confirmed *what* to do with the GlobalTalk connection ahead of time. That way I could have anticipated ImageWriter II + TashTalk compatibility problem
  • I should have used a real device instead of emulating QEMU for AIR. While emulation allowed for remote access, had I used my PowerBook G3 (which I had with me!) to run AIR, it would have handled LocalTalk bridging on its own, without a need for TashTalk

Things have quieted down since the peak of GlobalTalk, but folks have continued developing since then. I’ve mostly disassembled my mobile AppleTalk rig, and if I were to build it again I would probably uses Josh Perez’s jrouter. Make sure you also watch their excellent talk about GlobalTalk!