Jan 16 2010
Tethering an iPhone with SSH and Windows 7
I don’t need to tether through my iPhone — I always seem to be near a hotspot — but nonetheless I thought that spending 10 minutes to set it up was worth it, because when you need tethering, you really need tethering. If you’re willing to drop $10 bucks there are a couple of apps in Cydia that can do this easy (PhoneModem and MyWi, I think), but I just wanted something that I could use in an emergency.
Unfortunately, despite the fact that there were some good guides on how to do it, it turned out there were a few gotchas, and it took significantly longer than 10 minutes. So, in the hopes that I can save someone else the time:
Use this guide, but:
- in Windows 7, you’ll want to use the “Network and Sharing Center” (right click on your network icon) to create a new “computer-to-computer” network. This is the one the iPhone will connect to.
- When you configure Putty, you’ll want to make sure you go to the SSH/Tunnels page and a) add a dynamic tunnel to a local port (assume 8080) — you won’t need to specify a destination and can leave that blank, and b) go to the “Connection” page and specify a keepalive of 5 or so. This keeps the SSH connection between the computer and the iPhone from dying every 30 seconds.
- You cannot use Chrome right now, because it does not properly forward DNS requests to the proxy (it took me hours to figure this out). Use Firefox and specify a SOCKS v5 proxy at port 8080 (or whatever) for the proxy, but you’ll also need to make sure to go to the about:config page and change the network.proxy.socks_remote_dns to “true”.
- Doing things in a particular order makes this work better. If the 3G connection on the iPhone is not active, then there doesn’t seem to be a way to activate after it links to your ad hoc connection. So: turn off wireless, go to a web page (this activates the 3G), turn on wireless, connect to your computer. This way both the 3G and wireless connections are established. An easy way to see if the 3G is active is to run MobileTerminal (or just SSH into the iPhone) and run ipconfig; if the pdp_ip0 device is pointing to a real IP, then your 3G is active.