Data plan investigation: Zero-rating

Apr 27, 2023

I have a curious habit. When checking out the best deals from my country's cell companies, I searched Google for illegitimate websites instead of going straight to the sources. They have a tendency to hide their promotional data plans deep within the Internet, and only show standard data plans on their websites. I came across a few ones that caught my attention. They all had something to do with free data under selected services:

- YT30 from Viettel allowed you to watch Youtube videos and didn't count towards your data caps

- Big50Y from Vinaphone allowed watching Youtube, Tiktok, using Zalo apps not counting towards caps and gave you 5 GB per day

- Y60, our subject of investigation today, allowed the same things and gave you 2GB per day.They came with a requirement of the promotion only applies to the Youtube, Tiktok apps.

So I plan to investigate whether it could be applied to the website, and could it be used on a laptop when tethered to.

Preparation

When I tried to register Y60 data plan on my Mobifone, I did not qualify for it because it required that I was born before 1995. But I was able to register for G1 data plan, which included free data for the following apps: Instagram, ZingTv, Zing MP3, Gmail, Google Drive, Zalo, Viber, Tiktok, FPT Play. I also found another SIM on Vinaphone to register GT1 data plan, which included free data for Youtube, VieOn, Nhaccuatui, Tiktok.

For Mobifone, they required you to install an app called mobifoneGo. This app would tell you when an app launched is permitted for free data. In addition, it also allows you to buy extra data plans for specific apps you want free.

Result

According to my findings, mobifoneGo created a VPN that only tunneled traffic through if it was coming from the selected apps. For example, I used FPT Play to watch some TV using 4G. When I activated 4G, a VPN tunnel was opened and when FPT Play was opened, the program showed a notification stating that I had obtained unlimited data and using FPT Play didn't reduce my data cap. If it had been any other apps, it wouldn't have worked and my data cap would be decreased. I tried broadcasting Wifi to my laptop to see if https://fptplay.vn/ counted as free data but it didn't work, not even creating a proxy using Every Proxy to go through the VPN tunnel on the phone solved it. It reduced my data cap. The desktop-sized picture is when I ran out of my data cap.

![](/images/blog/230427/fpt out of gb with phone.png)

![](/images/blog/230427/fpt out of gb with proxy pc.jpg)

For Vinaphone, it was simpler. You would get free data by either visit the website like https://youtube.com/, https://tiktok.com/, https://vieon.vn/, or use the equivalent apps. However, only Youtube got free data, the rest didn't get free data, it subtracted my data cap. I see a false advertising here!

Routing table in Android from Mobifone

Utilizing Termux, which is a terminal for Android, I looked for some information regarding the tunnel.

ip route show table 0

- With mobifoneGo:

default dev tun0 table tun0 proto static scope link

10.0.0.2 dev tun0 table tun0 proto static scope link

default dev dummy0 table dummy0 proto static scope link

default via 10.100.58.145 dev rmnet_usb0 table rmnet_usb0 proto static

10.100.58.144/30 dev rmnet_usb0 table rmnet_usb0 proto static scope link

10.51.40.254 via 10.100.58.145 dev rmnet_usb0 src 10.100.58.146

10.53.120.254 via 10.100.58.145 dev rmnet_usb0 src 10.100.58.146

10.100.58.144/30 dev rmnet_usb0 proto kernel scope link src 10.100.58.146

local 10.0.0.2 dev tun0 table local proto kernel scope host src 10.0.0.2

broadcast 10.100.58.144 dev rmnet_usb0 table local proto kernel scope link src 10.100.58.146

local 10.100.58.146 dev rmnet_usb0 table local proto kernel scope host src 10.100.58.146

broadcast 10.100.58.147 dev rmnet_usb0 table local proto kernel scope link src 10.100.58.146

[...]

- Without mobifoneGo:

default dev dummy0 table dummy0 proto static scope link

default via 10.100.58.145 dev rmnet_usb0 table rmnet_usb0 proto static

10.100.58.144/30 dev rmnet_usb0 table rmnet_usb0 proto static scope link

10.51.40.254 via 10.100.58.145 dev rmnet_usb0 src 10.100.58.146

10.53.120.254 via 10.100.58.145 dev rmnet_usb0 src 10.100.58.146

10.100.58.144/30 dev rmnet_usb0 proto kernel scope link src 10.100.58.146

broadcast 10.100.58.144 dev rmnet_usb0 table local proto kernel scope link src 10.100.58.146

local 10.100.58.146 dev rmnet_usb0 table local proto kernel scope host src 10.100.58.146

broadcast 10.100.58.147 dev rmnet_usb0 table local proto kernel scope link src 10.100.58.146

[...]

As you can see, the 4G modem is rmnet_usb0, the tunnel is tun0. tun0 didn't add any new route into the routing table, so I guess this is a local VPN that changes the IP header from packets belonging to the allowed apps so that Mobifone server can detect some kind of free data flag, because it's unlikely for it to tamper with the original content of a packet, which was usually encrypted by protocols like HTTPS in APIs or video streams.

traceroute 8.8.8.8

- With mobifoneGo:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets

2 10.53.86.53 (10.53.86.53) 32.868 ms 31.891 ms 31.189 ms

3 10.53.125.82 (10.53.125.82) 27.192 ms 10.53.125.83 (10.53.125.83) 26.642 ms 26.123 ms

4 10.53.124.88 (10.53.124.88) 25.665 ms 25.177 ms 24.627 ms

5 10.53.124.131 (10.53.124.131) 24.017 ms 10.53.124.130 (10.53.124.130) 23.223 ms 10.53.124.131 (10.53.124.131) 22.370 ms

6 10.53.125.103 (10.53.125.103) 21.179 ms 22.430 ms 21.790 ms

8 10.53.165.41 (10.53.165.41) 27.832 ms 27.374 ms 26.764 ms

9 10.53.119.218 (10.53.119.218) 53.620 ms 53.101 ms 52.582 ms

10 142.250.47.38 (142.250.47.38) 51.971 ms 51.422 ms 59.356 ms

12 dns.google (8.8.8.8) 57.587 ms 63.294 ms 62.622 ms

[...]

- Without mobiifoneGo:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets

2 10.53.86.53 (10.53.86.53) 33.631 ms 27.100 ms 26.123 ms

3 10.53.125.82 (10.53.125.82) 25.116 ms 24.536 ms 18.127 ms

4 10.53.124.88 (10.53.124.88) 17.487 ms 24.567 ms 21.240 ms

5 10.53.124.131 (10.53.124.131) 28.382 ms 10.53.124.130 (10.53.124.130) 27.832 ms 27.221 ms

6 10.53.125.102 (10.53.125.102) 26.672 ms 10.53.125.103 (10.53.125.103) 27.008 ms 26.245 ms

7 10.53.165.206 (10.53.165.206) 25.361 ms * *

8 10.53.165.41 (10.53.165.41) 27.130 ms 34.577 ms 30.976 ms

9 10.53.119.218 (10.53.119.218) 57.739 ms 50.903 ms 50.324 ms

10 142.250.47.38 (142.250.47.38) 57.160 ms 65.888 ms 56.335 ms

12 dns.google (8.8.8.8) 59.235 ms 62.500 ms 58.167 ms

[...]

There isn't much change in the way a packet traveled through 4G either way.

How Vinaphone found out about my free data

As most traffic is end-to-end encrypted by HTTPS, the only way I see Vinaphone detect the free data is through reading the destination of a packet being sent. They have a IP whitelist for the free-data plan. For example, Youtube had the following IP list when I queried it using my DNS Server:

;; ANSWER SECTION:

youtube.com. 120 IN A 64.233.170.136

youtube.com. 120 IN A 64.233.170.93

youtube.com. 120 IN A 64.233.170.91

youtube.com. 120 IN A 64.233.170.190

So it's likely Vinaphone allowed these IPs to not reduce my data cap when I watched videos on them. It worked even when I tethered the phone to my laptop to access Youtube on the web browser.

Zero-rating and net neutrality

Basically, when you use Internet on your phone through technologies like 3G, 4G, LTE, you have a data plan ahead with some limit on how much you can consume. And some carriers sell special plans that allow you to access some online services without reducing your data caps, usually related to video streaming, communication... That practice is known as zero-rating. I got introduced to this concept by chance. First by coming across BIG50Y data plan from Vinaphone, and the word came about later when I was researching on this topic. This practice just showed up in Vietnam recently, while had shown up in the US before. Like Binge On from T-Mobile that doesn't reduce data cap when you watch videos on Youtube, Netflix, HBO... but how they go about doing it is [throttling bandwidth of any videos regardless of services](EFF Confirms: T-Mobile’s Binge On Optimization is Just Throttling, Applies Indiscriminately to All Video).

Facebook also jumped on the zero-rating bandwagon with their own Free Basics (internet.org) program, which granted you free access to Facebook (duh!) and other services that had made deal with Facebook. It used to be deployed in third world nations like India, Myanmar, but has since been removed. Because it's a double-edged sword.

On the one hand, this exercise goes against net neutrality.

What is net neutrality you may ask? Net neutrality is the principle that an ISP has to provide access to all sites, online services with the same speed, same treatments without blocking, slowing down or give "special treatment" to any others. It's the idea that governs free Internet as we now know today. So zero-rating is essentially ISP playing favorites to those paying to sponsor your data, whether is content provider like Youtube, social media like Facebook, or both like Tiktok. ISP can also play favorites to their own services. Why would you want to watch live streaming on website A when service B, offered by the ISP, charged nothing and reduced no data cap. Thus creating an unfair advantage to anyone not willing to "pay-to-win", as the term from online games goes. The consumers are disincentivized to explore alternative sites, leaving "sponsored" sites the only choices they have, closing of the Internet to a few sites. There were surveys conducted in various countries showed that people thought Facebook is the Internet.

Another problem arises is privacy and security concern over the practice of checking packet (or packet inspection) to see whether it goes to the zero-rated destination, or man-in-the-middle proxy to check its content like Free Basics.

The practice gives too much power to the ISP, who can now decide which service providers it likes, which it doesn't and limit them.

An article on TechCrunch pointed out the logical fallacy I liked about zero-rating. Basically, if you can infinitely watch video on their chosen platform, then there must be enough bandwidth to handle it. If that were true, data caps wouldn't be necessary at all. Which brings the whole zero-rating practice to question.

There are, however, arguments to be made about the necessity of zero-rating in very poor countries like Laos, or continents in Africa. Where there isn't enough money to eat, let alone spending it on data and Internet, zero-rating at least gives people a chance to learn, a platform for commerce, a tool for cheaper communication, however limited. According to a Reddit comment about Free Basics, "it does include free access to Wikipedia as well as other sites like Dictionary.com, a translator, BBC News, lots of Indian news sites, WikiHow, Unicef and various other sources of health information." Depriving people of the Internet altogether means losing out on an utility we all take for granted today. As a short term solution, it's an unequivocal yes. There are an unbelievable number of African businesses that exist only because of the Facebook's Free Basics program. But calling it "Digital colonialism" is not fall from the truth, as Facebook became the Internet itself in the eyes of a majority of Africans. Hence why it was banned in India.

Another use case for the practice is free access to public service, such as in medical, education, as pointed out by this blog post. The Colombian Government sanctioned zero-rated educational services so that students wouldn't miss school during COVID pandemic. The Australian and the UK partnered up with mobile carriers to curb misinformation about public health, reduce cost barrier, achieve health equality. "Not only did the service allow people to use online services to access medical records, book appointments, and other services, but it also enabled them to obtain information on several health topics".

Conclusion

After a lot of articles, researches on these topics, it's hard for me to decide whether this should be acceptable. I'm pro net-neutrality. I'm against the idea of a walled-garden for the Internet. But zero-rating has its use, IMHO only for public services or disaster situation. It shouldn't be used as a way to stifle competition.

Note: Fun fact about T-Mobile's Binge On

If you check out this article, Electronic Frontier Foundation (EFF) did an experiment to check if T-Mobile throttled their downloads based on their contents and protocols. From the result, it could be seen that they throttled bandwidth only when they could detect the content type or file type, which was only possible on HTTP because HTTPS encrypted data.

References:

- Net neutrality

- Zero-rating and what's wrong with it?

- How does an unlimited YouTube data plan work (StreamOn, T-mobile, De)?

- G1 MobiFone

- GT1 Vinaphone

- Can I get the routing table entry in Android?

- Free Basics vs. Free Internet: Your Guide to the Raging Net Neutrality Debate

- Free Basics Technical Guidelines

- The Rise and Fall... and Rise Again of Facebook's Free Basics: Civil Society and the Challenge of Resistance to Corporate Connectivity Projects

- Is Unlimited Data Really Unlimited?

- It's a battle for internet freedom