An expensive antenna

In one hour I will get ready to dance. As every Sunday this year, I will dance two times one hour; first as follower, then as leader. While I started the first course two years ago, I just started the second one. This is exciting, except there is a big two hours gap in between the two courses. (The reason for this gap is pure logistics: there are five different courses every Sunday, and I go to two of them which happen to be separate on the schedule.) The question of how to use these two hours has kept me busy for a few weeks already, as I really dislike spending time doing nothing. Because all other participants only take one course, there is nobody with whom I could entertain a conversation during this break. Since the place is a retirement home, the opportunities to socialize with the “permanent staff” are limited. I could take a book with me, but then again the place is used for dancing so there is loud music and I can’t focus on reading.

Obviously, I have work to do and I like to spend time online, so I simply decided to take my laptop with me and figure out a way to get connected.

No wireless, no cable, what’s left?

Tethering of course:

laptop ---> phone ---> internet

The steps are straightforward and recorded here for posterity:

  1. get a mobile data plan;
  2. get an Android phone;
  3. install OpenVPN on the laptop (package openvpn2 with MacPorts);
  4. if not available on the laptop by default, enable/install support for the tun/tap devices (TunTap for MacOS X);
  5. install Azilink on the phone, and download the corresponding OpenVPN configuration file on the laptop;
  6. install the Android SDK on the laptop (only the adb tool is really required);
  7. enable USB debugging on the phone;
  8. plug the phone to the laptop with the USB cable; use “connect as disk drive” to prevent the phone from going to sleep;
  9. run AziLink on the phone, ensure the service is running,
  10. use adb and OpenVPN as explained on the AziLink web site (For MacOS X, this script automates this step).

Technical note: this does not require “root access” to the phone. The AziLink service implements a NAT proxy entirely in Java. However because this approach cannot inject ICMP packets in the network stack, ICMP ping requests from the laptop will be converted to UDP pings, which will likely not work. So do not be surprised if “ping” does not work. Regular TCP and UDP should work.