Pourquoi Android refuse-t-il de résoudre les enregistrements DNS pointant vers des adresses IP internes?

14

J'ai un comportement très étrange sur un appareil Android (Nexus 7) lorsque j'essaie d'accéder aux applications réseau locales. Au lieu d'obtenir l'IP réelle de la machine sur le LAN, l'appareil Android obtient l' IP publique , ce qui signifie que Chrome, Firefox ou tout autre navigateur affiche simplement la page Web du routeur.

J'ai un serveur DNS interne qui gère les réseaux locaux. Faire à pingpartir d'un PC fonctionne correctement:

$ ping s.pelicandd.com

PING pelicandd.com (192.168.1.15) 56(84) bytes of data.
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=1 ttl=64 time=0.524 ms
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=2 ttl=64 time=0.578 ms
^C

Sur un appareil HTC One (accessible avec adb shell), cela fonctionne bien aussi:

shell@m7:/ $ ping s.pelicandd.com

PING pelicandd.com (192.168.1.15) 56(84) bytes of data.
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from front.pelicandd.com (192.168.1.15): icmp_seq=2 ttl=64 time=27.8 ms
^C

Cependant, c'est ce que j'obtiens en faisant la même chose à pingpartir du Nexus 7:

shell@flo:/ $ ping s.pelicandd.com

PING pelicandd.com (90.78.26.42) 56(84) bytes of data.
64 bytes from LFbn-1-2441-42.w90-78.abo.wanadoo.fr (90.78.26.42): icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from LFbn-1-2441-42.w90-78.abo.wanadoo.fr (90.78.26.42): icmp_seq=2 ttl=64 time=8.63 ms
^C

Au lieu de se résoudre à l'IP interne, il se résout à l'IP public.

La configuration réseau est, à l'exception de l'adresse IP de l'appareil, exactement la même sur les deux appareils: les paramètres IP sont définis sur Statique et les serveurs DNS sont les serveurs internes. Les deux appareils Android sont connectés via Wi-Fi (contrairement au PC). Une différence majeure, cependant, est que le Nexus 7 utilise Android 6.0.1, tandis que HTC One utilise Android 5.0.2.

Il n'y en a pas nm-tool, digou nslookupsur Nexus 7. L'appareil n'est pas enraciné.

Le problème existait depuis que j'ai acheté l'appareil il y a quelques semaines, donc cela pourrait difficilement être le problème avec le cache DNS.

Que puis-je faire pour inspecter davantage ce problème?

Arseni Mourzenko
la source
Tout d'abord, vous devez bien sûr inspecter le problème. Veuillez donc installer les outils IP à partir de Play Store, créer des nslookup, etc., et nous en saurons plus. Surtout l'utilisation du serveur DNS Nexus, la recherche DNS, etc. Essayez ces outils IP . Il est en polonais, mais vous pouvez bien sûr le changer. Cet outil que j'utilise en cas de tels problèmes.
mackowiakp
Hm. Dans IP Info , il affiche les adresses DNS correctes. Dans la recherche DNS , l'IP correcte est affichée (192.168.1.15). Cependant, l' onglet Traceroute affiche la mauvaise adresse IP publique (90.78.26.42).
Arseni Mourzenko
Donc - à mon avis - il y a un problème avec l'entrée DNS interne pour Nexus. J'utilise la configuration simmilar et tout fonctionne bien
mackowiakp
Le DNS interne fonctionne bien sur mon Nexus 6p, Nexus 5, Nexus 10, etc. Avez-vous essayé de flasher des images d'usine sur le Nexus 7 (si son chargeur de démarrage est déverrouillé) pour vous assurer qu'il exécute un logiciel reconnu? (Je suppose que vous l'avez utilisé, car le Nexus 7 n'est pas un nouvel appareil).
derobert
Je l'ai acheté d'occasion, mais j'ai effectué une réinitialisation avant de l'utiliser, suivie des mises à niveau jusqu'à la dernière version d'Android. J'imagine que cela suffit pour garantir qu'il n'exécute aucun logiciel personnalisé, étant donné que l'appareil n'est pas enraciné.
Arseni Mourzenko

Réponses:

5

Nous avons récemment rencontré ce problème, et nous l'avons limité à SEULEMENT sur les appareils fonctionnant sous Android v5 et versions ultérieures. Android v4 et tous les autres systèmes d'exploitation n'ont aucun problème.

Avec cette friandise, nous avons déterminé qu'Android v5 et les versions plus récentes insistent sur l'utilisation d'IPv6 pour la résolution de noms DNS. (Étant donné que nous avons complètement désactivé IPv6 sur notre réseau, cela résout le problème.) Si Android v5 (+) ne peut pas obtenir de réponse IPv6 du DNS local, il tend la main à l'hôte de nom public de Google (8.8.8.8) . Par conséquent, pas de DNS interne, juste externe.

Nous avons contourné le problème en créant des enregistrements DNS sur nos serveurs DNS publics pour certains noms internes et adresses IP. Cela fait, le DNS public de Google pourrait résoudre ces noms internes avec des adresses IP internes, et les appareils pourraient alors atteindre nos hôtes internes.

Nous procédons à l'activation complète d'IPv6 sur nos serveurs DNS internes (contrôleurs de domaine) en tant que correctif permanent.

=========================================

MISE À JOUR - Eh bien, il s'avère que cela peut être un hareng rouge total ... ou non. Mon réseau domestique est Win2008R2, un seul domaine avec DHCP et DNS et sans liaison IPv6. Testé un appareil Android v5 à partir de là et sans problème. Le réseau Office concerné est Win2012 (non-R2), à domaine unique.

Le WAP de bureau actuel contourné avec le WAP Linksys autonome et le SSID séparé pour les tests, le problème persiste.

Différences entre les réseaux bureautiques et domestiques (auxquelles je peux penser): - Version Windows - 2012 vs 2008 R2 - modèle de routeur (Cisco vs Linksys) - Modèle WAP (Aruba Networks de marque Dell vs Linksys)

Procéder à tous les tests supplémentaires auxquels je peux penser pour réduire le problème. Toute suggestion ou contribution est extrêmement appréciée!

=========================================

LE PROBLÈME EST ALLÉ (?!)

Notre problème a semblé disparaître de lui-même suite à un changement de topologie de réseau que je ne pense pas être lié, mais voici les informations au cas où.

(D'énormes excuses pour cette longue histoire, mais c'est à ce moment-là que nos problèmes Android ont disparu, alors montrez-le si vous le pouvez. Je fournis probablement beaucoup trop de détails ici, mais parce que je ne vois pas de connexion directe, Je mets tout en place exactement comme c'est arrivé.)

Notre FAI est Comcast Business Class - un modem câble avec un bloc IP statique de cinq adresses (nombre étrange mais c'est ainsi que Comcast les vend). Le modem câble de Comcast est essentiellement une combinaison modem / pare-feu / routeur / commutateur, avec notre bloc IP statique programmé à distance.

Depuis plus de 10 ans et presque autant d'employeurs, j'ai toujours construit des réseaux de bureau de la même manière:
Configurer une IP LAN pour le modem / routeur ISP, qui traite le trafic NAT depuis Internet. Cela ne pourrait pas être plus simple, et c'est ainsi que mon réseau de bureaux actuel est configuré depuis quatre ans.

Récemment, notre service Internet de bureau a baissé. Habituellement, un redémarrage du modem le corrige, mais quand il ne l'a pas fait, nous avons appelé Comcast qui a envoyé un technicien, qui a remplacé le modem câble pour rétablir le service.

Quelques jours plus tard, la même chose s'est reproduite. Nous avons rappelé, et la technologie sur place (technologie différente qu'auparavant) a de nouveau tenté de remplacer le modem, cette fois par un modèle plus récent. Étonnamment, le modem câble plus récent ne prend pas en charge la modification de l'adresse de sous-réseau LAN. Le sous-réseau par défaut est 10.1.10.0/24, et il ne peut pas être modifié. (Seul le 4e octet était configurable.) Comme notre sous-réseau de bureau est 192.168.100.0/24, j'ai fait savoir au technicien que nous ne pouvions pas l'utiliser sans pouvoir changer le sous-réseau LAN. Il a compris, mais ne savait pas pourquoi le modem câble empêcherait le changement. Il a donc installé un modem de remplacement du même modèle que précédemment, que nous avons configuré à l'identique, et l'accès à Internet a été restauré.

Encore un jour ou deux passes, et le service redescend. Cette fois, lorsque j'ai appelé Comcast, la première technologie avec laquelle j'ai parlé a posé des questions détaillées et bien informées sur la configuration de notre réseau. Lorsque j'ai expliqué que le modem câble était configuré avec une IP LAN sur notre sous-réseau, il a semblé perplexe. Il a dit que la plupart des clients Comcast connectent un routeur NAT'ing entre le modem câble et le LAN plutôt que d'utiliser le NAT'ing du modem câble. En fait, il a dit qu'il n'était pas au courant que le modem câble supportait NAT'ing.

Comcast a envoyé une autre technologie avec un tout nouveau modem câble (dernier modèle qui ne prend pas en charge la modification du sous-réseau LAN). Il a effectué des tests approfondis sur le modem existant et a finalement déterminé qu'il ne faisait que passer le trafic IPv6 - pas IPv4. Il a également confirmé ce que la technologie du téléphone avait dit - qu'il est recommandé d'utiliser un routeur séparé pour NAT'ing, et de ne pas modifier le sous-réseau LAN sur le modem câble (ce que nous ne pouvons pas faire sur les nouveaux modems de toute façon).

Et maintenant, nous arrivons enfin au changement de réseau que nous avons fait. J'ai installé un simple routeur LinkSys entre le modem câble et notre routeur principal, configuré avec notre IP statique côté modem et une IP LAN à l'intérieur. Le service Internet a ensuite été rétabli et est resté stable depuis un certain temps maintenant.

Une fois le service Internet rétabli, j'ai pensé à l'étrangeté du problème IPv6 avec le modem câble, ce qui m'a rappelé le problème Android v5. J'ai ensuite testé nos appareils Android au bureau et j'ai été stupéfait de voir que le problème DNS ne se produisait plus.

L'ajout du routeur LinkSys pour NAT'ing est le SEUL CHANGEMENT DE RÉSEAU QUE NOUS AVONS FAIT. Coïncidence?? Peut-être, mais il semblait un peu particulier que les deux soient liés à IPv6.

Quoi qu'il en soit, désolé encore pour la longue histoire, mais notre problème Android a disparu. Faites-en ce que vous pouvez.

Dimarc67

Dimarc67
la source
En effet, cela devrait être la cause dans mon cas également, car, de même, je n'utilise pas IPv6 en interne. J'ai contourné le problème DNS en créant un serveur VPN local et en demandant à l'appareil Android d'utiliser le VPN à la place; ça marche, mais c'est évidemment trop drastique.
Arseni Mourzenko
@ArseniMourzenko Avez-vous déjà résolu ce problème? J'ai littéralement perdu deux jours à ne rien faire d'autre que d'essayer de résoudre ce problème, car il a littéralement cassé beaucoup de ce qui fonctionnait auparavant. Et oui, j'ai essayé un VPN mais il a réduit le taux de transfert de 100 Mbps + à environ 20
Michael
@Michael: puisque mes serveurs DNS locaux sont configurés pour ne prendre en charge que IPv4, la réponse de Dimarc67 était pertinente pour moi (c'est aussi pourquoi cela est marqué comme la réponse acceptée). De là, je viens de configurer un VPN pour tous les appareils Android, et je suis heureux de l'utiliser depuis lors. Je n'ai remarqué aucune réduction du taux de transfert - cela m'est égal, vu la façon dont j'utilise les appareils mobiles. Pour ce que ça vaut, j'utilise OpenVPN côté serveur Debian et OpenVPN Connect sur les appareils Android.
Arseni Mourzenko
2

Je suis tombé sur ce message en essayant d'obtenir que mon appareil Android 6.0 utilise le serveur DNS configuré localement pour résoudre les noms d'hôte locaux. Une réponse ci-dessus indique qu'Android 5.0 et les versions ultérieures insistent sur l'utilisation de serveurs DNS IPv6. Ce fut l'indice qui m'a conduit à ma solution.

Mon routeur faisait la publicité des serveurs DNS IPv6 fournis par mon FAI en utilisant DHCP-PD. J'ai reconfiguré mon routeur pour arrêter la publicité des serveurs DNS IPv6 et maintenant l'appareil Android 6.0 résout le nom d'hôte local en utilisant le serveur DNS IPv4 fourni par DHCP (IPv4).

J'ai également un DNAT pour rediriger toutes les requêtes DNS (port TCP / UDP 53) vers mon serveur DNS local. Cela était en place avant de désactiver la publicité du routeur avec les serveurs DNS IPv6, donc je ne sais pas si Android 5.0+ retombe sur les serveurs DNS de Google (comme indiqué dans la réponse précédente) et je les ai pris avec ma règle DNAT ou si mon Android Le périphérique 6.0 vient d'utiliser le serveur DNS IPv4 attribué par DHCP. Dans les deux cas, la résolution du nom d'hôte local fonctionne maintenant.

Rappel absent
la source
La désactivation d'IPV6 sur mon routeur a résolu le problème sur TOUS mes appareils Android!
Ken J
2

J'ai finalement pu résoudre ce problème en configurant moi-même un serveur DHCP sur le même réseau, ce qui configure le domaine de recherche correct à envoyer aux clients.

Une fois que j'avais un serveur DHCP, dans mon cas, isc-dhcpd avec la configuration dans dhcp.conf:

option domain-name "myrealdomain.tld";

Android a pu résoudre les enregistrements A locaux définis sur mon serveur DNS.

Erik Westrup
la source