I’ve been a T-Mobile customer since the company was called Voicestream – yeah, that long. One of the things I always loved about the service was that I could tether a PDA, tablet, or laptop to my phone and be able to get work done anywhere I needed to. I’m not a road warrior, so I don’t use a lot of data when tethered, nor do I tether very often, but I need to be able to tether with only a little notice. Regardless of whether I was using Windows Mobile or Android, tethering was never terribly difficult, I just opened the settings, turned it on, and away I went. When Android KitKat came out, tethering was “broken”. Now again with Android Lollipop, Nexus 6 tethering is “broken” again as well.

Carriers have the right to regulate what their customers do on their networks, however, one sticking point is paid data. If a customer is paying for 5GB data (for example), it should not matter how that data is delivered. The customer has paid for 5GB data, and data is data. That data should be accessible on any device the customer so desires. Carriers may have language in their contracts that contradict this, but the sentiment is sound: 5GB is 5GB regardless of whether it’s on-device or tethered.

Carrier-branded devices may include a proprietary tethering app, but stock Android includes tethering capabilities built-in. Since Android KitKat, however, Android has been passing along information to carriers to let them know if the data is on-device, or tethered. This makes the carriers happy (because they get to sell you a separate or upgraded plan to “allow” you to tether), but may not be fair to the end users who now have to pay extra for something they technically already had.

Thankfully, there’s a way to tell Android not to differentiate tethered data from on-device data – but it does require root access. Unlike previous methods, there’s now an additional step.

settings.db

Android KitKat introduced a new “flag” which the OS sends along to the carrier to indicate whether the data is from a tethered device rather than from the device itself. This flag is present in Android Lollipop as well, though, like before, T-Mobile may be the only carrier (currently) using it.

To get around this, all we need to do is change the flag. You’ll need to have OEM unlocked and rooted your phone before you get started, but once that’s done, here’s how to toggle the flag:

  1. Modifying system files could render your device useless, so by continuing you’re assuming that risk
  2. Since this involves working around a carrier setting, you also need to make sure that your plan doesn’t prohibit you to tether (Note: your plan doesn’t have specifically allow you to tether, it just has to not prohibit you from doing so)
  3. (Optional) Using a root file explorer, navigate to /data/data/com.android.providers.settings/databases/ and make a copy of settings.db
  4. Install and open a SQL editor and grant it root access when prompted (such as SQLite Editor)
  5. Tap the APPS tab and then “Settings Storage”
  6. Tap on settings.db then global
  7. Tap on the + symbol to add a new key/value pair
  8. In the name field type in tether_dun_required
  9. In the value field type in 0 (zero)
  10. Tap Save
  11. Open the Android system Settings
  12. Under WIRELESS & NETWORKS tap More…
  13. Tap Mobile networks then APNs
  14. (If you’re using T-Mobile) Make sure your T-Mobile configuration is selected (mine is T-Mobile GPRS), then tap on it
  15. (If you’re using T-Mobile) Make sure your APN protocol and APN roaming protocol are both set to IPv4 (it doesn’t look like tethering works with IPv6 yet)
  16. (If you’re using T-Mobile) Make sure your APN is set to fast.t-mobile.com
  17. Reboot
  18. See if tethering works for you. If not, continue with the next section.

build.prop

Some are reporting that the change above doesn’t work all the time, and may not work with AT&T. If that describes you, modify your build.prop file.

  1. Modifying system files could render your device useless, so by continuing you’re assuming that risk
  2. Since this involves working around a carrier setting, you also need to make sure that your plan doesn’t prohibit you to tether (Note: your plan doesn’t have specifically allow you to tether, it just has to not prohibit you from doing so)
  3. Using a root file explorer, navigate to /system/
  4. (Optional) Make a copy of the build.prop
  5. Open the build.prop file with a text editor
  6. Add the following line to the bottom of build.prop file: net.tethering.noprovisioning=true
  7. Save the file and reboot your device

While these steps have been confirmed to work with both T-Mobile and AT&T, we haven’t checked to see if they’ll work with Sprint, Verizon, or other carriers. If it works for you, regardless of which carrier you use, we want to hear about it! Head down to the comments and let us know!