What is Tethering
Tethering is a way to have Internet access on your PC through your smartphone using it's network connection. Usb and wifi access point tethering is natively supported from Android Froyo ( 2.2 ). Older versions of the Android OS, mostly unofficial roms have this option enabled.
Wifi access point
Using an android phone as a WiFi access point (using 3G) has been accessible by default since Froyo (Android 2.2) without needing to root the phone. Moreover, this method will not discharge the battery rapidly, unlike USB. See : menu/wireless & networks/Internet tethering/Wifi access point
- Root access to the phone (for old Android versions, Froyo (Android 2.2) and beyond can do it natively)
- Usb connection cable from your phone to pc
- Disconnect your pc from for current wifi or ethernet network
- Connect the phone to your pc using the usb cable
- Enable the the tethering option from your phone. This is usually done from Settings --> Wireless & Networks --> Internet tethering
(The following step may not be needed. usbnet module may not be necessary, do it only if you don't see a usb0 interface in the ifconfig step)
- Load the usbnet module(if it's not already loaded). You will need root access to do that
- Make sure that the usb interface is recognized by the system by using the following command
you should be able to see a usb0 device listed like this(notice the usb0 device):
root@arch:~# ifconfig -a eth0 Link encap:Ethernet HWaddr 00:16:36:FA:3E:31 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:316435 errors:0 dropped:0 overruns:0 frame:0 TX packets:316435 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22875193 (21.8 Mb) TX bytes:22875193 (21.8 Mb) usb0 Link encap:Ethernet HWaddr C2:5A:11:8D:43:F5 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
- Configure the new network device via dhcp using the following command
ifconfig usb0 up && dhcpcd usb0
To stop the network sharing, issue the command
dhcpcd -x usb0
USB tethering with openvpn
This method works for any old Android version and does not requires root access nor modifications in the phone (it is also suitable for Android 2.2 and later, but no longer required).
It does not requires changes to your browser; in fact transparently handles all network traffic for any PC application (except ICMP pings). It is somewhat CPU intensive in the phone at high usage rates (a 500 kbyte/sec data transfer rate may take more than 50% of phone CPU on a powerful Acer Liquid).
In Arch you need to install the openvpn package. Is is also required the Android SDK installed (which can be obtained here). In the phone, the azilink application, a Java-based NAT that will communicate with OpenVPN in your computer.
Configuring the phone connection in Arch Linux
Once installed the Android SDK, in order to use the provided tools your phone must be properly setup in udev and your linux user need to be granted rights. Otherwise you may need root privileges to use the Android SDK, which is non recommended. To perform this configuration, turn on USB debugging on the phone (usually in Settings -> Applications -> Development -> USB debugging), connect it to the PC by the USB cable and run the lsusb command. The device should be listed. Example output for the Acer Liquid phone:
Bus 001 Device 006: ID 0502:3202 Acer, Inc.
Then, create the following file, replacing ciri by your own Linux user name, and 0502 by the vendor ID of your own phone:
As root run the udevadm control restart command (or reboot your computer) to make the change effective. Now run in your linux PC the adb shell command from the Android SDK as plain (non root) user: you should get a unix prompt in your phone.
Run the AziLink application in the phone and select "About" at the bottom to receive instruccions, which basically are:
- You'll have to enable USB debugging on the phone if it was not already enabled (usually in Settings -> Applications -> Development -> USB debugging).
- Connect the phone with the USB cable to the PC.
- Run AziLink and make sure that the Service active option at the top is checked.
- Run the following commands in your linux PC:
- As plain user: adb forward tcp:41927 tcp:41927 (requires Android SDK installed)
- As root: openvpn AziLink.ovpn
Tethering with proxy
With this method tethering is achieved by port forwarding from the phone to the pc. This is suitable only for browsing. For firefox, you should set network.proxy.socks_remote_dns to true in about:config ( adress bar )
- Root access to the PC
- Android SDK which can be obtained here
- Usb connection cable from your phone to pc
- Proxoid application(free download from the Android market)
Follow the instructions demonstrated in the following link