This has cost me some hours of finally tracking it down, but I would like to know if someone can please shed light on this issue?

Android 6 and 7 do not accept DNS servers with IPv6 ULA addresses. Using some diagnosis apps, I can see that Android does in fact learn the DNS server addresses from router advertisements. But after some seconds, Android deletes them. But it keeps any SLAACed ULAs. Unfortunately, without DNS, these devices are pretty much useless in IPv6 networks with ULAs. (But see note below.)

In contrast, when using GUAs for the DNS server address, Android 6 happily learns and uses them.

Any reason why Android dislikes DNS servers with ULAs and only accepts "real" global addresses? Seems to take the meaning of "globalization" to a new level... ;)

Update 2: Android 7 in general does not accept ULAs, but instead considers such a network as not working and won't connect to it (tested with an Ethernet-wired Samsung Tab S7 running Android 7.0). Update: Android 6.x actually can accept DNS server ULAs, but I'm seeing this only when the network interface not only has an ULA, but also a GUA assigned. No GUA, then DNS server ULA get rejected. Now that is strange. I've updated the title to reflect this finding.

  • Sounds like a bug to me. Unfortunately Android has been plagued with IPv6 bugs during its history. – Michael Hampton Mar 15 '18 at 17:36
  • I'm not sure that this is a bug, it looks like design: Google wants its devices to be connected, and IPv6 ULAs can (but necessarily is a safe sign) be a sign of an IT department running an island IPv6, NAPT or not, side by side with full IPv4 connectivity. So this rule ensures that Android devices leave such IT-borked environments. – TheDiveO Mar 15 '18 at 18:18
  • Hm, I suppose that's possible. – Michael Hampton Mar 15 '18 at 18:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.