As Daniel Pocock points out, Google made a change in Android 4.4 which allows operators to know when users are using tethering and conveniently block tethered devices from accessing internet.
This can be fixed permanently using the following procedure (UPDATE: no root required):
- Enable developer mode (Go to Settings -> About phone, and click on the build number until the developer mode is enabled).
- Enable USB debugging under Settings -> Developer options
- Connect the device with a USB cable to a computer with the Android SDK platform tools installed
- Start an adb shell:
- In the adb shell, run this command:
settings put global tether_dun_required 0
For rooted phones, this alternate procedure can be done without connecting the device to a computer:
- Root the phone
- Install a SQLite editor such as SQLite Debugger
- Using the SQLite editor, navigate to the file /data/data/com.android.providers.settings/databases/settings.db (this is the part that requires root)
- Enter the database global
- Change the value of field tether_dun_required to 0.