You’ve most likely found yourself in situations where you needed internet on your computer but had no WiFi network close-by. What do you do? Fire up a hotspot from your smartphone and share its internet connection with the laptop. The technical term for sharing a phone’s internet connection with another device — be it over WiFi, Bluetooth or USB — is tethering.
Recently, however, I found myself in the opposite position: I had internet on my laptop but not on my phone! Reverse tethering to the rescue!
In one of my experiments, I flashed Replicant — a fully free, Android-based operating system for mobile phones — onto an old Samsung Galaxy S2.
Now, since Replicant is fully free, it does not come with the proprietary drivers necessary to operate the WiFi module in that phone. That means, the only way to get an internet connection on the phone is through the mobile data (3G) on a SIM card. Now, in addition to the (for current standard) sluggishness of the processor, this rules the phone out as a daily driver for me1. Nonetheless, I was curious what I could do with Replicant running on the phone.
After the initial excitement that Free Software could power a phone where most functionalities are provided, the phone ended up unused in one of my drawers.
When writing the blog post on BOINC, where I call on people to use their computing devices as long as they work, my unused Samsung Galaxy S2 came to my mind.
I was fairly confident that I could install the BOINC Android client from the F-Droid store on the phone, too. But I had to get internet on it somehow… Especially as I also wanted to upload/download BOINC tasks completed on the S2 later on as well.
To set up
gnirehtet on your computer and Android phone, just
follow the steps as outlined in the project’s
README: this should
get you up and running with reverse tethering.
gnirehtet’s README (understandably) does not list all command
line options it supports. You can get this info by running
In my case I needed to execute
gnirehtet run on a different port
because the default port of 31416 was used on my machine already. The
-p option allows you to specify the port to run
After experimenting with
gnirehtet and convincing myself that it
does the job, I decided to make the executable findable by my
shell. Thus, I would not have to specify the full path to the
gnirehtet executable every time I want to run it.
To that end, I first copied the folder containing the
/opt - a directory “reserved for the installation
of add-on application software
according to the Filesystem Hierarchy Standard.
Then, I checked what my
PATH environment variable looked like with
echo $PATH. Since
/usr/bin was on my
$PATH, I decided to
simply create a symlink in
/usr/bin which points to the
gnirehtet executable in
/opt. Works like a charm.
I have heard of people whose needs were satisfied with this setup, so it might work for you as well. ↩︎