When visiting my residence up in the northern woods of Michigan, finding any sort of Internet connection (much less some nice cable internet) is a challenge. Unfortunately, the place I have is so deep in the woods, the only recourse would be to set up a ~34 meter tall tower!! (to reach above the 100ft trees) That would net me an 800Mhz wireless connection to a wireless internet company in the area.
Not wanting to spend a couple $1000 just to get some crappy wireless access, I figured out a way to use my iPhone’s internet and patch it through to all of the other computers in the house.
What I Used
- Jail-broken 3GS iPhone (3.0 Firmware)
- Cisco/Linksys Router (the WRT610N to be exact)
- A Computer Running Ubuntu Linux
– Any jail-broken phone that has had Internet Tethering turned on should work
– Any router or switch should work
– Any computer / os combination with routing/masquerading software should work
The iPhone jailbreaking process is (fairly) simple – but you deserve better instructions than I can provide here. I would recommend checking TheBigBoss.org – The Ultimate iPhone News and Guide website.
Your settings can be whatever happens to suit your needs, however, I personally setup my router to use WPA2/PSK encryption on the 5.0 Ghz range set to Wireless-N for the wireless router. I feel it provides a reasonable level of security and speed. (I also always set a whitelist to allow only the MAC addresses that I want accessing my network.
The router IP address I set to 192.168.1.1 and set the DHCP table for each computer on the network to have its own personal IP address. (192.168.1.101, …102, …103, …)
On each machine I changed the IP settings to “Manual” settings instead of DHCP (even though I have the DHCP server running on the router .. i know .. i know..) . Obviously this process is done differently on each OS. In my instance the three other machines were WinXP, OSX, and Linux. I made sure each machines IP address matched its corresponding IP in the DHCP table on the router, set the Mask to 255.255.255.0 and the Gateway to 192.168.102 (“Tabasco” .. my personal machine that is connected to the iPhone…
The Real Router
On my computer (an Intel Core-2-Duo 8400 with 4GB RAM running Ubuntu “Karmic Koala”) , I have a USB bluetooth device which I purchased for less than $10. I configured the bluetooth device to act as my computer’s method to connect to the computer. In Ubuntu it was as simple as adding the device through the bluetooth dock item and then clicking on the network dock item and selecting “Connect“. (Obviously you must have Internet Tethering turned on at this point).
For the routing software I (loosely) followed the directions at the Ubuntu Linux Howto Blog on Setting up Your Computer as a Router. (I just downloaded the Ubuntu compatible .DEB package from Webmin and worked from there).
Overall, I am impressed. The actually speed is nothing to boast about, I’m obviously not in a 4G area (not that the iPhone supports it anyway), nor even a 3G area. That’s right folks, I’m stuck with EDGE speeds. Shockingly (only at night and rarely during the day) I actually manage to achieve speeds of 30KB/s (bytes not bits), which is much better than dial-up. The ping isn’t so great, but that really isn’t a surprise at all.
There are some things to note. When the phone is in “tethering” mode, if a call comes in, the internet connection is disrupted. Completely disconnected in fact. Sometimes when this happens it is difficult and annoying to reconnect the computer to the iPhone. I recommend disconnecting the connection on the computer, turning off bluetooth & internet tethering on the phone. Then turn the internet tethering back on (it will ask you to turn on bluetooth as well, hit OK) and then connect again on the computer.
To solve this problem I went to (on the iPhone) Settings -> Phone -> Call Forwarding and then forwarded my calls to another phone in the house.
I have left the phone connnected for days at a time without disruption and uploaded hundreds of MB of data and downloaded GB’s. All in all, very happy with the results.