Here’s a pain-free way to get your Google Ion tethered to OSX Leopard.

It is easy (no re-imaging your phone, rooting it, etc.) and it works — in fact, I’m writing this page from a tethered connection using Safari!

One-Time Setup

Couldn’t be easier!

  1. Install tetherbot on your Android phone. The instructions on the TetherBot page are good, but if you want to cut to the chase, just download it from your phone and install the package. You may have to alter your settings to allow non-market installs to go through.
  2. Install the Android 1.5 SDK on your machine. This is the slowest part because the download is large, but all you have to do is unzip it somewhere you can remember.
  3. Inside the SDK directory structure is a top-level directory called “tools.” Add it to your path.
  4. Download Proxifier for OSX and install it. You get a 30-day free trial. (Believe me, I tried all the open source alternatives. Maybe you’ll have better luck, but for me, tsocks torsocks danteand ptunnel were all bust.)
  5. Open proxifier. Go to options > proxy settings and add a SOCKS5 proxy at 127.0.0.1, port 1080.
  6. Also in proxifier, go to options > name resolution and enable it.
  7. Close proxifier. You’re done.

Now, the payoff!

Here’s what you’ll need to do every time you want to use a tethered connection.

  1. Turn off your wifi connection. Disconnect your ethernet plug!
  2. Connect phone to computer via USB.
  3. Run tetherbot on your phone and activate the SOCKS proxy by pressing the “Start Socks” button.
  4. From a terminal, run adb forward tcp:1080 tcp:1080 so that the SOCKS proxy is accessible on your OSX machine.
  5. Now open proxifer. Wait a few moments and open up your favorite app, or try sshing into your favorite remote machine. Enjoy!

If you have any improvements on the above, let me know.

Odds And Ends

A few points for the curious:

  1. I am aware of the OSX application called AndroidTether which, in theory, should preclude the need for installing the entire Android SDK just to run the adb command. Unfortunately, I found the AndroidTether app to be unreliable, whereas with adb things have been humming along for several hours now, without a hitch.
  2. You might wonder why I went through the trouble of installing Proxifier when it is possible to configure system-wide proxy settings from Leopard’s “Network Preferences” control panel. There are two reasons why, unfortunately, the control panel approach doesn’t work. First, system-wide proxy settings in OSX are tied to a specific network interface like your WiFi card or Ethernet port. Unfortunately, you’ll want to disable those interfaces when you’re truly on the road (rather than just testing at home) — and then you’ll lose your proxy settings. Safari will be confused. The second reason is that even when system-wide proxy is enabled, DNS requests appear to be routed through your primary interface. This also isn’t going to work well when you’re on the road. Proxifier, by contrast, routes even DNS requests via the SOCKS proxy. There is some trickery involved in this, because DNS uses UDP and we’ve only got a TCP connection available. Proxifier actually creates “fake” temporary IP addresses for the DNS names you query; resolution takes place locally. Pretty clever.
  3. If you only want to surf the web when you’re tethered, it turns out that proxifier isn’t necessary. Firefox 3.X offers direct SOCKS proxy support. In addition to setting up proxy information (which is easily done from preferences) you will need to go to about:config and turn on the configuration option that allows Firefox to perform DNS lookups via a SOCKS5 proxy.
  4. Apple has acknowledged a bug in Mail.app 3.6 that causes it to ignore proxy settings (whether they’re system-wide or done via proxifier.) As a result, I’m not able to use my mail client of choice when tethered. I found that Thunderbird is good in a pinch, though it has no support for importing contacts or rules on OSX. In general, Mail.app just seems better built. Alas.