I recently discovered SimpleRT which works very well with Linux (and apparently OSX as well). Simply enable USB Debugging on your device (no root required), install the APK linked from that page on your device and connect it to your PC via USB, and then run the binary on your PC.
It will set up the connection as a VPN tunnel (
tun0 by default) and your device should prompt you to (a) allow SimpleRT to create/oversee the VPN connection as well as (b) whether to run it when the device is configured as a particular USB accessory (which is what the binary does).
The project does not include a pre-built binary, so I’ve uploaded one I built for Ubuntu.
Below is a manual method that should work on Linux or Windows: http://blog.mathieu.carbou.me/post/60454997009/reverse-usb-tethering-with-android-2-2
For Windows: Install USB drivers from Android SDK
For Linux: Nothing to do
On Nexus One: Connect USB cable and activate USB Tethering. You should see on linux or windows a new network interface.
On Linux Computer, setup a bridge:
# usb0 is the new network interface # eth0 is the main interface connected to internet (or a gateway) sudo ifconfig eth0 0.0.0.0 sudo ifconfig usb0 0.0.0.0 sudo brctl addbr br0 sudo brctl addif br0 eth0 sudo brctl addif br0 usb0 sudo ifconfig br0 up sudo dhclient br0
See https://help.ubuntu.com/community/NetworkConnectionBridge to setup bridges
On windows, Bridge the 2 network interfaces
Setup usb0 interface of your phone. You have to options:
From your computer, execute:./adb shell netcfg usb0 dhcp
Or in a root terminal on your phone, type:su netcfg usb0 dhcp
You should now be able to connect to Internet on your phone using your computer’s Internet connection.
Try to do a ping www.google.com to be sure !
To shut down the reverse-tethering, first unbridge interfaces on your computer:sudo ifconfig eth0 down sudo ifconfig usb0 down sudo ifconfig br0 down sudo brctl delbr br0 sudo ifconfig eth0 up sudo dhclient eth0
Then on your phone, uncheck the USB Tethering option !
You can also use Windows to create a WiFi network (using Connectify) and connect your device to that: http://www.nexusoneforum.net/forum/nexus-one-faq-how-tos/3133-reverse-tether-getting-internet-your-phone.html
There are some more possibilities — but all of them I know of require a rooted device.
Using the Reverse Tether App
First, there’s an App named Reverse Tether available for free on the Play Store (it’s a limited trial, which restricts the time you can be connected — but at least you can test this way whether your device is fully supported; the full version is about USD 5). According to an article at AndroidAuthority, setup should be as easy as 1-2-3: Plug in the USB cable, start the app, let it auto-configure (manual configuration is available as well) — and there you go. You can also let it ask you to connect when it finds an USB-connection.
Manual methods using Wifi
I know, this is not USB — but for completeness (and giving alternatives) I thought I might add these as well:
fiddling with the system and patching around
Several manual methods are available as well (and described e.g. at XDA) — but they are mostly technically complex, and expecting you to patch system files; not for the every-day-user, but rather for the tech-freak.
Terminal and go
However, another nice method should just involve 3 lines in the terminal, and is described in a post here, to connect to an ad-hoc Wifi network. Basically, it should go like this:
su ifconfig wlan0 up iwconfig mode auto; iwconfig wlan0 essid "your SSID" channel 11 mode auto ifconfig wlan0 10.0.0.x netmask 255.255.255.0
manipulating some config file
Another quite easy method is also described here, and involves editing the
wpa_supplicant.conf file once (manually adding your ad-hoc Wifi network).
Do I need to say, really? Use a Wifi router. There are even some small “Travel routers” around for less than USD 50. And then connect your phone like you use to connect it to other Wifi networks…
I know this is an even later answer, but it is worth mentioning it.
No rooting needed!
No app installation needed!* Which is not even possible if you do not have some other internet connection.
There is a project called gnirehtet.
- Install adb on to the host PC (Windows/Linux/Mac)
- Download the gnirehtet zip-file to the host
- Unzip it
- Run the command
That’s it! For more information, read the readme file of gnirehtet on their website.
*=Behind the scenes it will install an apk file on to your device via the USB connection.