IPv6 on Mobile Devices

My Telco here in Singapore (M1) is providing IPv6 service on their cellular dataplan if you know how to configure your phone. The trick on Android is to change your service type to “LTE/3G/2G”, and the the APN protocol to “IPv4/IPv6”. On iPhone no special settings are required – it just works. It is a bit tricky to find your mobile IP addresses on iOS – get the HE.Net app from the App Store (shown below).

Android:

The IPv6 address 2401:7400:6000:93d9:1:1:9366:9705 is configured on my phone, along with the private IPv4 address 10.194.78.202. The external public IPv4 address is 246.106.56.119. Note that on Android, if the Wi-Fi configures an IPv6 address, no additional IPv6 addresses are configured on the dataplan. This screenshot required disabling the Wi-Fi. Note that on my ISP, if the phone goes to sleep, it will keep the same /64 prefix when it wakes back up. If I reboot, I get a new /64 prefix. Your mileage may differ.

Note that the phone actually gets a /64 block, not a single /128 address. If you set up a hot spot, both IPv4 and IPv6 are shared, and devices that connect to the hot spot get an IPv6 address in the same /64 block as the address on the phone. This may be significant as we start running servers on phones! Sixscape has created a way to securely register your IPv6 address from a mobile device (using IRP).

Outgoing IPv6 using the dataplan address works fine also.

Note that I can even ping this address from my Windows node:

C:\Windows\system32>ping 2401:7400:6000:93d9:1:1:9366:9705

Pinging 2401:7400:6000:93d9:1:1:9366:9705 with 32 bytes of data:
Reply from 2401:7400:6000:93d9:1:1:9366:9705: time<1ms
Reply from 2401:7400:6000:93d9:1:1:9366:9705: time=51ms
Reply from 2401:7400:6000:93d9:1:1:9366:9705: time=107ms
Reply from 2401:7400:6000:93d9:1:1:9366:9705: time=104ms

Ping statistics for 2401:7400:6000:93d9:1:1:9366:9705:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 107ms, Average = 65ms

iPhone:

On the Wi-Fi interface, a link local IPv6 address and two global IPv6 addresses have automatically configured.

On the dataplan (Cellular Data) another link local IPv6 address and two more global IPv6 addresses have automatically configured.

For outgoing IPv6, here is the result from surfing to ipv6-test.com on the iPhone (with WiFi disabled, so the dataplan IPv6 address was used):

As on Android, I can ping both of these addresses from my Windows node:

C:\Windows\system32>ping 2401:7400:4000:da1d:957:287b:d2a7:3117

Pinging 2401:7400:4000:da1d:957:287b:d2a7:3117 with 32 bytes of data:
Reply from 2401:7400:4000:da1d:957:287b:d2a7:3117: time=258ms
Reply from 2401:7400:4000:da1d:957:287b:d2a7:3117: time=74ms
Reply from 2401:7400:4000:da1d:957:287b:d2a7:3117: time=92ms
Reply from 2401:7400:4000:da1d:957:287b:d2a7:3117: time=106ms

Ping statistics for 2401:7400:4000:da1d:957:287b:d2a7:3117:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 74ms, Maximum = 258ms, Average = 132ms

C:\Windows\system32>ping 2401:7400:4000:da1d:8fa:de81:dd26:d505

Pinging 2401:7400:4000:da1d:8fa:de81:dd26:d505 with 32 bytes of data:
Reply from 2401:7400:4000:da1d:8fa:de81:dd26:d505: time=703ms
Reply from 2401:7400:4000:da1d:8fa:de81:dd26:d505: time=90ms
Reply from 2401:7400:4000:da1d:8fa:de81:dd26:d505: time=111ms
Reply from 2401:7400:4000:da1d:8fa:de81:dd26:d505: time=100ms

Ping statistics for 2401:7400:4000:da1d:8fa:de81:dd26:d505:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 90ms, Maximum = 703ms, Average = 251ms

On Android, if there is an IPv6 address on Wi-Fi, any IPv6 address on the dataplan is ignored. On iOS, it will configure IPv6 from both Wi-Fi and dataplan, but if there is an IPv6 Wi-Fi address available, connections will use it rather than the dataplan address.