Warum weigert sich Android, DNS-Einträge aufzulösen, die auf interne IP-Adressen verweisen?

Ich habe ein sehr seltsames Verhalten auf einem Android-Gerät (Nexus 7), wenn ich versuche, auf lokale Netzwerkanwendungen zuzugreifen. Anstatt die tatsächliche IP der Maschine im LAN zu erhalten, erhält das Android-Gerät die öffentliche IP, was bedeutet, dass Chrome, Firefox oder jeder andere Browser einfach die Webseite des Routers anzeigt.

Ich habe einen internen DNS-Server, der die lokalen Netzwerke verwaltet. Von einem PC pingaus funktioniert es richtig:

$ 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

Auf einem HTC One-Gerät (Zugriff mit adb shell) funktioniert es auch gut:

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

Dies ist jedoch das, was ich bekomme, wenn ich dasselbe pingvon Nexus 7 aus mache:

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

Anstatt zur internen IP aufzulösen, wird zur öffentlichen aufgelöst.

Die Netzwerkkonfiguration ist – bis auf die IP-Adresse des Geräts – auf beiden Geräten exakt gleich: IP-Einstellungen sind auf Statisch eingestellt , DNS-Server sind die internen. Beide Android-Geräte sind (im Gegensatz zum PC) über Wi-Fi verbunden. Ein wesentlicher Unterschied besteht jedoch darin, dass Nexus 7 Android 6.0.1 verwendet, während HTC One Android 5.0.2 verwendet.

Auf Nexus 7 gibt es kein nm-tool, digoder nslookup. Das Gerät ist nicht gerootet.

Das Problem bestand seit ich das Gerät vor ein paar Wochen gekauft habe, also kann es wohl kaum am DNS-Cache liegen.

Was kann ich tun, um dieses Problem weiter zu untersuchen?

Zunächst müssen Sie natürlich das Problem untersuchen. Installieren Sie also bitte IP Tools aus dem Play Store, machen Sie einige nslookup`s und so weiter und dann wissen wir mehr. Insbesondere DNS-Server Nexus-Nutzung, DNS-Lookup und so weiter. Probieren Sie diese IP-Tools aus . Es ist in polnischer Sprache, aber Sie können es natürlich ändern. Dieses Tool verwende ich bei solchen Problemen.
Hm. In IP Info zeigt es die korrekten DNS-Adressen an. Beim DNS-Lookup wird die richtige IP angezeigt (192.168.1.15). Die Registerkarte Traceroute zeigt jedoch die falsche öffentliche IP (90.78.26.42).
Also - meiner Meinung nach - stimmt etwas mit dem internen DNS-Eintrag für Nexus nicht. Ich verwende eine ähnliche Konfiguration und alles funktioniert OK
Internes DNS funktioniert auf meinem Nexus 6p, Nexus 5, Nexus 10 usw. einwandfrei. Haben Sie versucht, werkseitige Images auf das Nexus 7 zu flashen (wenn sein Bootloader entsperrt ist), um sicherzustellen, dass darauf bekanntermaßen gute Software ausgeführt wird? (Ich nehme an, Sie haben es gebraucht bekommen, da das Nexus 7 kein neues Gerät ist).
Ich habe es gebraucht gekauft, aber vor der Verwendung einen Reset durchgeführt, gefolgt von den Upgrades auf die neueste Android-Version. Ich kann mir vorstellen, dass dies ausreicht, um sicherzustellen, dass keine benutzerdefinierte Software ausgeführt wird, da das Gerät nicht gerootet ist.
Ich musste auf die Verwendung von c-ares ( c-ares.haxx.se ) zurückgreifen, das für Android entwickelt wurde, anstelle des integrierten DNS-Resolvers von Android. Mit c-ares können Sie sogar Suchen nach Hostnamen durchführen, ohne dass eine Suchdomäne in lokalen Netzwerken angehängt ist. (z. B. mycomputer, statt mycomputer.local.tld)

Antworten (3)

Wir sind kürzlich auf dieses Problem gestoßen und haben es auf NUR auf Geräten mit Android v5 und höher eingegrenzt. Android v4 und alle anderen Betriebssysteme haben kein Problem.

Mit diesem Leckerbissen haben wir festgestellt, dass Android v5 und neuer darauf besteht, IPv6 für die DNS-Namensauflösung zu verwenden. (Da wir IPv6 in unserem Netzwerk vollständig deaktiviert haben, stimmt dies mit dem Problem überein.) Wenn Android v5(+) keine IPv6-Antwort vom lokalen DNS erhalten kann, erreicht es den Host mit öffentlichem Namen von Google (8.8.8.8). . Also kein internes DNS, nur extern.

Wir haben das Problem umgangen, indem wir DNS-Einträge auf unseren öffentlich zugänglichen DNS-Servern für ausgewählte interne Namen und IPs erstellt haben. Damit könnte das öffentliche DNS von Google diese internen Namen mit internen IPs auflösen, und die Geräte könnten dann unsere internen Hosts erreichen.

Wir fahren mit der vollständigen Aktivierung von IPv6 auf unseren internen DNS-Servern (Domänencontrollern) als dauerhafte Lösung fort.

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

UPDATE – Nun, es stellt sich heraus, dass dies ein totaler Ablenkungsmanöver sein könnte … oder auch nicht. Mein Heimnetzwerk ist Win2008R2, Einzeldomäne mit DHCP und DNS und ohne IPv6-Bindung. Getestet ein Android v5-Gerät von dort und hatte KEIN PROBLEM. Das Büronetzwerk mit dem Problem ist Win2012 (nicht R2), Einzeldomäne.

Aktuelle Büro-WAPs mit eigenständigem Linksys WAP und separater SSID zum Testen umgangen, Problem bleibt bestehen.

Unterschiede zwischen Büro- und Heimnetzwerken (die mir einfallen): - Windows-Version - 2012 vs. 2008 R2 - Routermodell (Cisco vs. Linksys) - WAP-Modell (Aruba Networks der Marke Dell vs. Linksys)

Fahren Sie mit allen weiteren Tests fort, die mir einfallen, um das Problem einzugrenzen. Alle Vorschläge oder Eingaben werden sehr geschätzt!

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

PROBLEM WEG (?!)

Unser Problem schien nach einer Änderung der Netzwerktopologie von selbst zu verschwinden, von der ich nicht glauben würde, dass sie damit zusammenhängt, aber hier sind die Informationen für den Fall.

(RIESIGE ENTSCHULDIGUNGEN für diese lange, langwierige Geschichte, aber zu diesem Zeitpunkt verschwanden unsere Android-Probleme, also lass das, wenn du kannst. Ich liefere hier wahrscheinlich VIEL zu viele Details, aber da ich keine direkte Verbindung erkennen kann, Ich lege alles genau so dar, wie es passiert ist.)

Unser ISP ist Comcast Business Class – ein Kabelmodem mit einem statischen IP-Block von fünf Adressen (seltsame Zahl, aber so verkauft Comcast sie). Das Kabelmodem von Comcast ist im Wesentlichen eine Kombination aus Modem/Firewall/Router/Switch, in die unser statischer IP-Block fernprogrammiert ist.

Seit mehr als 10 Jahren und fast ebenso vielen Arbeitgebern habe ich Büronetzwerke immer auf die gleiche Weise aufgebaut:
Konfigurieren Sie eine LAN-IP für das ISP-Modem/Router, das den NAT-Datenverkehr aus dem Internet leitet. Einfacher geht es nicht, und so ist mein aktuelles Büronetzwerk seit vier Jahren konfiguriert.

Kürzlich fiel unser Bürointernetdienst aus. Normalerweise wird es durch einen Neustart des Modems behoben, aber wenn dies nicht der Fall war, riefen wir Comcast an, das einen Techniker schickte, der das Kabelmodem ersetzte, um den Dienst wiederherzustellen.

Ein paar Tage später passierte das gleiche wieder. Wir riefen erneut an, und der Techniker vor Ort (ein anderer Techniker als zuvor) versuchte erneut, das Modem zu ersetzen, diesmal durch ein neueres Modell. Überraschenderweise unterstützte das neuere Kabelmodem das Ändern der LAN-Subnetzadresse nicht. Das Standardsubnetz ist 10.1.10.0/24 und kann nicht geändert werden. (Nur das 4. Oktett war konfigurierbar.) Da unser Büro-Subnetz 192.168.100.0/24 ist, ließ ich den Techniker wissen, dass wir es nicht verwenden konnten, ohne das LAN-Subnetz ändern zu können. Er verstand, hatte aber keine Informationen darüber, warum das Kabelmodem die Änderung verhindern würde. Also installierte er ein Ersatzmodem des gleichen Modells wie zuvor, das wir identisch konfigurierten, und der Internetzugang war wiederhergestellt.

Ein oder zwei weitere Tage vergehen, und der Service fällt wieder aus. Als ich dieses Mal Comcast anrief, stellte der erste Techniker, mit dem ich sprach, detaillierte und sachkundige Fragen zu unserer Netzwerkkonfiguration. Als ich erklärte, dass das Kabelmodem mit einer LAN-IP in unserem Subnetz konfiguriert war, schien er darüber verwirrt zu sein. Er sagte, dass die meisten Comcast-Kunden einen NAT-Router zwischen dem Kabelmodem und dem LAN anschließen, anstatt das NAT des Kabelmodems zu verwenden. Tatsächlich sagte er, er wisse nicht, dass das Kabelmodem NAT unterstütze.

Comcast schickte einen anderen Techniker mit einem brandneuen Kabelmodem (neuestes Modell, das den Wechsel des LAN-Subnetzes nicht unterstützt). Er führte umfangreiche Tests mit dem vorhandenen Modem durch und stellte schließlich fest, dass es nur IPv6-Verkehr durchließ – keinen IPv4. Er bestätigte auch, was der Telefontechniker gesagt hatte – dass es empfohlen wird, einen separaten Router für NAT zu verwenden und das LAN-Subnetz auf dem Kabelmodem nicht zu ändern (was wir bei den neueren Modems jetzt sowieso nicht tun können).

Und jetzt kommen wir endlich zu unserem Netzwerkwechsel. Ich habe einen einfachen LinkSys-Router zwischen dem Kabelmodem und unserem Core-Router installiert, konfiguriert mit unserer statischen IP auf der Modemseite und einer LAN-IP auf der Innenseite. Der Internetdienst wurde dann wiederhergestellt und ist seit einiger Zeit stabil.

Nachdem der Internetdienst wiederhergestellt war, dachte ich über die Seltsamkeit des IPv6-Problems mit dem Kabelmodem nach, was mich wiederum an das Problem mit Android v5 erinnerte. Ich habe dann unsere Android-Geräte im Büro getestet und war fassungslos, als ich feststellte, dass das DNS-Problem nicht mehr auftrat.

Das Hinzufügen des LinkSys-Routers für NAT'ing ist die EINZIGE NETZWERKÄNDERUNG, DIE WIR VORGENOMMEN HABEN. Zufall?? Möglich, aber es schien nur ein wenig seltsam, dass beide mit IPv6 verwandt waren.

Wie auch immer, nochmals Entschuldigung für die lange Geschichte, aber unser Android-Problem ist weg. Machen Sie daraus, was Sie können.

Dimarc67

Allerdings sollte das auch bei mir die Ursache sein, da ich IPv6 intern ebenfalls nicht verwende. Ich habe das DNS-Problem umgangen, indem ich einen lokalen VPN-Server erstellt und das Android-Gerät gebeten habe, stattdessen VPN zu verwenden. es funktioniert, aber es ist offensichtlich zu drastisch.
@ArseniMourzenko Hast du dieses Problem jemals gelöst? Ich habe buchstäblich zwei Tage damit verschwendet, nichts anderes zu tun, als zu versuchen, dieses Problem zu beheben, da es buchstäblich viel von dem kaputt gemacht hat, was zuvor funktioniert hat. Und ja, ich habe ein VPN ausprobiert, aber es hat die Übertragungsrate von über 100 Mbit/s auf etwa 20 reduziert
@Michael: Da meine lokalen DNS-Server so konfiguriert sind, dass sie nur IPv4 unterstützen, war die Antwort von Dimarc67 für mich relevant (deshalb wird dies auch als akzeptierte Antwort markiert). Von dort aus habe ich einfach ein VPN für alle Android-Geräte eingerichtet und nutze es seitdem gerne. Ich habe keine Reduzierung der Übertragungsrate bemerkt – egal, wie ich mobile Geräte verwende. Für das, was es wert ist, verwende ich OpenVPN auf der Debian-Serverseite und OpenVPN Connect auf Android-Geräten.

Ich bin auf diesen Beitrag gestoßen, als ich versuchte, mein Android 6.0-Gerät dazu zu bringen, den lokal konfigurierten DNS-Server zum Auflösen lokaler Hostnamen zu verwenden. Eine Antwort oben deutete darauf hin, dass Android 5.0 und neuer auf der Verwendung von IPv6-DNS-Servern besteht. Das war der Hinweis, der mich zu meiner Lösung führte.

Mein Router hat die von meinem ISP bereitgestellten IPv6-DNS-Server mit DHCP-PD angekündigt. Ich habe meinen Router neu konfiguriert, um die Werbung für die IPv6-DNS-Server zu stoppen, und jetzt löst das Android 6.0-Gerät den lokalen Hostnamen mithilfe des von DHCP (IPv4) bereitgestellten IPv4-DNS-Servers auf.

Ich habe auch einen DNAT, um alle DNS-Anfragen (TCP/UDP-Port 53) auf meinen lokalen DNS-Server umzuleiten. Dies war vorhanden, bevor die Router-Werbung mit IPv6-DNS-Servern deaktiviert wurde, sodass ich nicht weiß, ob Android 5.0+ auf die Google-DNS-Server zurückgreift (wie in der vorherigen Antwort behauptet) und ich sie mit meiner DNAT-Regel oder ob mein Android erwischt habe 6.0-Gerät hat nur den von DHCP zugewiesenen IPv4-DNS-Server verwendet. In jedem Fall funktioniert die lokale Hostnamenauflösung jetzt.

Das Deaktivieren von IPV6 auf meinem Router hat das Problem auf ALLEN meinen Android-Geräten behoben!

Ich konnte dies schließlich lösen, indem ich selbst einen DHCP-Server im selben Netzwerk einrichtete, der die richtige Suchdomäne konfiguriert, die an die Clients gesendet wird.

Einmal hatte ich einen DHCP-Server, in meinem Fall isc-dhcpd mit der Konfiguration in dhcp.conf:

option domain-name "myrealdomain.tld";

Android konnte lokale A-Einträge auflösen, die in meinem DNS-Server festgelegt wurden.