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

14

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-Adresse des Computers im LAN abzurufen, erhält das Android-Gerät die öffentliche IP-Adresse. Dies bedeutet, dass Chrome, Firefox oder ein anderer Browser lediglich die Webseite des Routers anzeigt.

Ich habe einen internen DNS-Server, der die lokalen Netzwerke verwaltet. Das Ausführen pingvon einem PC aus funktioniert ordnungsgemäß:

$ 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 (auf das mit zugegriffen wird 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

Folgendes erhalte ich jedoch, wenn ich das gleiche mit pingNexus 7 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 die interne IP-Adresse aufzulösen, wird sie in die öffentliche IP-Adresse aufgelöst.

Die Netzwerkkonfiguration ist - mit Ausnahme der IP-Adresse des Geräts - auf beiden Geräten genau gleich: Die IP-Einstellungen sind auf Statisch festgelegt und die DNS-Server sind die internen. Beide Android-Geräte sind (anders als der PC) über WLAN verbunden. Ein wesentlicher Unterschied ist jedoch, dass das Nexus 7 Android 6.0.1 verwendet, während das HTC One Android 5.0.2 verwendet.

Es gibt keine nm-tool, digoder nslookupauf dem Nexus 7. Das Gerät wurzelt nicht.

Das Problem bestand, seit ich das Gerät vor ein paar Wochen gekauft hatte, sodass es kaum ein Problem mit dem DNS-Cache sein könnte.

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

Arseni Mourzenko
quelle
Zunächst müssen Sie natürlich das Problem untersuchen. Also bitte IP Tools aus dem Play Store installieren, ein paar nslookups machen und so weiter und dann werden wir mehr wissen. Besonders DNS-Server Nexus verwenden, 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 benutze ich bei solchen Problemen.
Mackowiakp
Hm. In IP-Info werden die korrekten DNS-Adressen angezeigt. In der DNS-Suche wird die richtige IP-Adresse angezeigt (192.168.1.15). Auf der Registerkarte Traceroute wird jedoch die falsche öffentliche IP (90.78.26.42) angezeigt.
Arseni Mourzenko
Meiner Meinung nach stimmt also etwas nicht mit dem internen DNS-Eintrag für Nexus. Ich benutze eine ähnliche Konfiguration und alles funktioniert OK
Mackowiakp
Interner DNS funktioniert auf meinem Nexus 6p, Nexus 5, Nexus 10 usw. einwandfrei. Haben Sie versucht, Factory-Images auf das Nexus 7 zu flashen (wenn der Bootloader entsperrt ist), um sicherzustellen, dass es als funktionierende Software bekannt ist? (Ich nehme an, Sie haben es benutzt, da das Nexus 7 kein neues Gerät ist).
Derobert
Ich habe es gebraucht gekauft, aber vor der Verwendung habe ich es zurückgesetzt, gefolgt von den Upgrades auf die neueste Android-Version. Ich stelle mir vor, dass dies ausreicht, um sicherzustellen, dass keine benutzerdefinierte Software ausgeführt wird, da das Gerät nicht gerootet ist.
Arseni Mourzenko

Antworten:

5

Wir sind kürzlich auf dieses Problem gestoßen und haben es auf NUR auf Geräten mit Android v5 und neuer beschränkt. Android v4 und alle anderen Betriebssysteme haben kein Problem.

Mit diesem Leckerbissen haben wir festgestellt, dass Android v5 und neuere Versionen IPv6 für die DNS-Namensauflösung verwenden. (Da wir IPv6 in unserem Netzwerk vollständig deaktiviert haben, stimmt dies nicht mit dem Problem überein.) Wenn Android v5 (+) keine IPv6-Antwort vom lokalen DNS erhalten kann, wird der öffentliche Namenshost von Google kontaktiert (8.8.8.8). . Daher kein internes DNS, nur externes.

Wir haben das Problem umgangen, indem wir auf unseren öffentlich zugänglichen DNS-Servern DNS-Einträge für ausgewählte interne Namen und IP-Adressen 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 permanenter Fix fort.

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

UPDATE-- Nun, es stellt sich heraus, dass dies ein total roter Hering sein kann ... oder nicht. Mein Heimnetzwerk ist Win2008R2, eine Einzeldomäne mit DHCP und DNS und keiner IPv6-Bindung. Habe ein Android v5 Gerät von dort aus getestet und hatte KEINE PROBLEME. Office-Netzwerk mit Problem ist Win2012 (Nicht-R2), Single-Domain.

Das Problem besteht weiterhin, wenn aktuelle Office-WAPs mit eigenständigem Linksys-WAP und separater SSID für Testzwecke umgangen werden.

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

Fahren Sie mit weiteren Tests fort, um das Problem einzugrenzen. Anregungen oder Input wird sehr geschätzt!

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

PROBLEM GEGANGEN (?!)

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

(GROSSE ENTSCHULDIGUNGEN für diese lange, langwierige Geschichte, aber in diesem Moment sind unsere Android-Probleme verschwunden. Fahren Sie diese heraus, wenn Sie können. Wahrscheinlich stelle ich hier viel zu viele Details zur Verfügung, aber weil ich keine direkte Verbindung sehe, Ich lege alles genau so aus, wie es passiert ist.)

Unser ISP ist Comcast Business Class - ein Kabelmodem mit einem statischen IP-Block von fünf Adressen (seltsame Nummer, aber so verkauft Comcast sie). Das Comcast-Kabelmodem ist im Wesentlichen eine Kombination aus Modem / Firewall / Router / Switch, in die unser statischer IP-Block remote programmiert 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 / den Router, die / der den NAT-Datenverkehr aus dem Internet verarbeitet. Einfacher geht es nicht, und so ist mein aktuelles Büronetzwerk seit vier Jahren konfiguriert.

Kürzlich ist unser Büro-Internet-Service ausgefallen. Normalerweise korrigiert ein Modem-Neustart das Problem, aber wenn dies nicht der Fall ist, haben wir Comcast angerufen, der einen Techniker geschickt und das Kabelmodem ausgetauscht, um den Dienst wiederherzustellen.

Ein paar Tage später passierte dasselbe erneut. Wir riefen erneut an und die Techniker vor Ort (anders als zuvor) versuchten erneut, das Modem durch ein neueres Modell zu ersetzen. Überraschenderweise unterstützte das neuere Kabelmodem das Ändern der LAN-Subnetzadresse nicht. Das Standard-Subnetz 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, informierte ich den Techniker, 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. Deshalb installierte er ein Ersatzmodem des gleichen Modells wie zuvor, das wir identisch konfiguriert hatten, und der Internetzugang wurde wiederhergestellt.

Ein oder zwei Tage später fällt der Service wieder aus. Dieses Mal, als ich Comcast anrief, stellte die erste Technologie, mit der ich sprach, detaillierte und sachkundige Fragen zu unserer Netzwerkkonfiguration. Als ich erklärte, dass das Kabelmodem mit einer LAN-IP-Adresse in unserem Subnetz konfiguriert war, schien er diesbezüglich verwirrt zu sein. Er sagte, dass die meisten Comcast-Kunden einen NAT'ing-Router zwischen dem Kabelmodem und dem LAN anschließen, anstatt das NAT'ing des Kabelmodems zu verwenden. Tatsächlich habe er nicht gewusst, dass das Kabelmodem NAT unterstützt.

Comcast schickte eine andere Technologie mit einem brandneuen Kabelmodem (neuestes Modell, das das Ändern des LAN-Subnetzes nicht unterstützt). Er führte umfangreiche Tests mit dem vorhandenen Modem durch und stellte schließlich fest, dass nur IPv6-Verkehr übertragen wurde - kein IPv4. Er bestätigte auch, was die Telefontechniker gesagt hatten - es wird empfohlen, einen separaten Router für NAT'ing zu verwenden und das LAN-Subnetz des Kabelmodems nicht zu ändern (was bei den neueren Modems ohnehin nicht möglich ist).

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

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

Das Hinzufügen des LinkSys-Routers für NAT'ing ist die EINZIGE NETZWERKÄNDERUNG, DIE WIR DURCHGEFÜHRT haben. Zufall?? Möglicherweise, aber es schien nur ein bisschen eigenartig, dass beide mit IPv6 verwandt waren.

Wie auch immer, entschuldige nochmal die lange Geschichte, aber unsere Android-Ausgabe ist weg. Mach was du kannst daraus.

Dimarc67

Dimarc67
quelle
In der Tat sollte dies auch die Ursache sein, da ich IPv6 ebenfalls nicht intern verwende. Ich habe das DNS-Problem umgangen, indem ich einen lokalen VPN-Server erstellt und das Android-Gerät aufgefordert habe, stattdessen VPN zu verwenden. es funktioniert, aber es ist offensichtlich zu drastisch.
Arseni Mourzenko
@ArseniMourzenko Haben Sie dieses Problem jemals gelöst? Ich habe buchstäblich zwei Tage damit verbracht, nichts anderes zu tun, als zu versuchen, dieses Problem zu beheben, da es buchstäblich eine Menge von dem gebrochen hat, was vorher funktionierte. Und ja, ich habe ein VPN ausprobiert, aber es reduzierte die Übertragungsrate von 100 Mbit / s + auf ungefähr 20
Michael,
@Michael: Da meine lokalen DNS-Server so konfiguriert sind, dass sie nur IPv4 unterstützen, war die Antwort von Dimarc67 für mich relevant (dies ist auch der Grund, warum dies als akzeptierte Antwort markiert ist). Von dort aus habe ich gerade ein VPN für alle Android-Geräte eingerichtet und bin glücklich, es seitdem zu verwenden. Ich habe keine Verringerung der Übertragungsrate bemerkt - es wäre mir egal, wie ich mobile Geräte verwende. Für das, was es wert ist, verwende ich OpenVPN auf der Serverseite von Debian und OpenVPN Connect auf Android-Geräten.
Arseni Mourzenko
2

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 zeigte an, dass Android 5.0 und neuer auf der Verwendung von IPv6-DNS-Servern besteht. Dies war der Anhaltspunkt, der mich zu meiner Lösung führte.

Mein Router hat die von meinem Internetdienstanbieter bereitgestellten IPv6-DNS-Server mit DHCP-PD angekündigt. Ich habe meinen Router so umkonfiguriert, dass keine Werbung für die IPv6-DNS-Server mehr erfolgt. 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 eine DNAT, um alle DNS-Abfragen (TCP / UDP-Port 53) an meinen lokalen DNS-Server umzuleiten. Dies war vor dem Deaktivieren der Routerwerbung mit IPv6-DNS-Servern der Fall, sodass ich nicht weiß, ob Android 5.0+ auf die Google-DNS-Server zurückgreift (wie in der vorherigen Antwort angegeben), und sie mit meiner DNAT-Regel abgefangen habe oder ob mein Android 6.0-Gerät hat gerade den DHCP-zugewiesenen IPv4-DNS-Server verwendet. In beiden Fällen funktioniert die Auflösung des lokalen Hostnamens jetzt.

Abwesender Rückruf
quelle
Durch Deaktivieren von IPV6 auf meinem Router wurde das Problem auf ALLEN meinen Android-Geräten behoben!
Ken J
2

Endlich konnte ich dieses Problem lösen, indem ich selbst einen DHCP-Server im selben Netzwerk einrichtete, der die richtige Suchdomäne zum Senden an die Clients konfiguriert.

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

option domain-name "myrealdomain.tld";

Android konnte lokale A-Einträge auf meinem DNS-Server auflösen.

Erik Westrup
quelle