Wie kann ich die Ursprünge widersprüchlicher DNS-Einträge finden?
Wie kann ich die Ursprünge widersprüchlicher DNS-Einträge finden?
Antworten:
Sie möchten den SOA-Datensatz (Start of Authority) für einen bestimmten Domänennamen. Auf diese Weise erreichen Sie ihn mit dem universell verfügbaren Befehlszeilentool nslookup :
command line> nslookup
> set querytype=soa
> stackoverflow.com
Server: 217.30.180.230
Address: 217.30.180.230#53
Non-authoritative answer:
stackoverflow.com
origin = ns51.domaincontrol.com # ("primary name server" on Windows)
mail addr = dns.jomax.net # ("responsible mail addr" on Windows)
serial = 2008041300
refresh = 28800
retry = 7200
expire = 604800
minimum = 86400
Authoritative answers can be found from:
stackoverflow.com nameserver = ns52.domaincontrol.com.
stackoverflow.com nameserver = ns51.domaincontrol.com.
In der Zeile origin (oder primärer Nameserver unter Windows) wird angegeben, dass ns51.domaincontrol der Hauptnameserver für stackoverflow.com ist .
Am Ende der Ausgabe werden alle autorisierenden Server aufgelistet, einschließlich der Sicherungsserver für die angegebene Domäne.
dig
schien die Verwendung für mich (siehe Antwort unten)
nslookup -type=soa stackoverflow.com
heute (2019 - Februar) unter Linux arbeiten, ist der autorisierende Abschnitt leer.
Sie haben den Singular in Ihrer Frage verwendet, aber es gibt normalerweise mehrere autorisierende Nameserver. Der RFC 1034 empfiehlt mindestens zwei.
Es sei denn, Sie meinen "primärer Nameserver" und nicht "autorisierender Nameserver". Die sekundären Nameserver sind maßgebend.
So ermitteln Sie die Nameserver einer Domain unter Unix:
% dig +short NS stackoverflow.com
ns52.domaincontrol.com.
ns51.domaincontrol.com.
Um herauszufinden, welcher Server als primär aufgeführt ist (der Begriff "primär" ist heutzutage ziemlich verschwommen und hat normalerweise keine gute Antwort):
% dig +short SOA stackoverflow.com | cut -d' ' -f1
ns51.domaincontrol.com.
Um die Diskrepanzen zwischen Nameservern zu überprüfen, bevorzuge ich das alte check_soa
Tool, das im Buch "DNS & BIND" von Liu & Albitz (O'Reilly-Editor) beschrieben ist. Der Quellcode ist unter http://examples.oreilly.com/dns5/ verfügbar.
% check_soa stackoverflow.com
ns51.domaincontrol.com has serial number 2008041300
ns52.domaincontrol.com has serial number 2008041300
Hier haben die beiden autorisierenden Nameserver dieselbe Seriennummer. Gut.
www.pressero.com
, die als CNAME für eine andere Site definiert ist - dig + short SOA - nur das CNAME-Ziel zurück.
www.pressero.com
. Sie haben wahrscheinlich über A-Datensätze nachgedacht (dies ist der Standarddatensatztyp indig
wenn Sie ihn nicht angeben). Fügen Sie bei Bedarf einfach ein hinzu tail -1
, um das Endergebnis abzurufen.
dig +short SOA www.pressero.com
. Dies gibt nur das CNAME-Ziel zurück - nicht den SOA-Datensatz für daspressero.com
Domäne, was ich erwartet habe. tail -1
hilft nicht weiter; dig +short SOA
gibt nur eine Zeile aus.
On * nix:
$ dig -t ns <domain name>
Ich habe ein DNS-Weitergabe-Tool, das diese Art von Fragen beantwortet.
Die Quelle wird unter AGPLv3 veröffentlicht.
(Ja, die Oberfläche ist im Moment ziemlich einfach :))
Sie können die Nameserver für eine Domain auch mit dem Befehl "host" ermitteln:
[davidp @ supernova: ~] $ host -t ns stackoverflow.com stackoverflow.com Nameserver ns51.domaincontrol.com. stackoverflow.com Nameserver ns52.domaincontrol.com.
Ich fand, dass es am besten ist, immer die Option + trace hinzuzufügen:
dig SOA +trace stackoverflow.com
Es funktioniert auch mit rekursivem CNAME, der von einem anderen Anbieter gehostet wird. + trace trace impliziert + norecurse, sodass das Ergebnis nur für die von Ihnen angegebene Domain gilt.
Der Begriff, den Sie googeln sollten, ist "maßgeblich", nicht "endgültig".
Unter Linux oder Mac können Sie die Befehle verwenden whois
, dig
, host
, nslookup
oder einige andere. nslookup
funktioniert möglicherweise auch unter Windows.
Ein Beispiel:
$ whois stackoverflow.com
[...]
Domain servers in listed order:
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
Was das zusätzliche Guthaben betrifft: Ja, es ist möglich.
aryeh ist definitiv falsch, da sein Vorschlag normalerweise nur die IP-Adresse für den Hostnamen angibt. Wenn du benutztdig
, müssen Sie nach NS-Datensätzen suchen, wie folgt:
dig ns stackoverflow.com
Beachten Sie, dass dies möglicherweise Ihren lokalen DNS-Server fragt und daher möglicherweise falsche oder veraltete Antworten gibt, die er im Cache hat.
Wir haben ein DNS-Lookup-Tool erstellt , mit dem Sie die autorisierenden Nameserver der Domain und die allgemeinen DNS-Datensätze in einer Anfrage erhalten.
Beispiel: https://www.misk.com/tools/#dns/stackoverflow.com
Unser Tool findet die autorisierenden Nameserver, indem es eine Echtzeit-DNS-Suche (nicht zwischengespeichert) bei den Stammnamenservern durchführt und dann den Nameserver-Verweisen folgt, bis wir die autorisierenden Nameserver erreichen. Dies ist dieselbe Logik, die DNS-Resolver verwenden, um maßgebliche Antworten zu erhalten. Bei jeder Abfrage wird ein zufälliger autorisierender Nameserver ausgewählt (und identifiziert), mit dem Sie widersprüchliche DNS-Datensätze finden können, indem Sie mehrere Anforderungen ausführen.
Sie können den Nameserver-Delegierungspfad auch anzeigen, indem Sie unten in den Ergebnissen der DNS-Suche aus dem obigen Beispiel auf "Autorisierende Nameserver" klicken.
Beispiel: https://www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net
Sie können den whois-Dienst nutzen. Unter einem UNIX-ähnlichen Betriebssystem würden Sie den folgenden Befehl ausführen. Alternativ können Sie dies im Internet unter http://www.internic.net/whois.html tun .
whois stackoverflow.com
Sie würden die folgende Antwort erhalten.
... Text hier entfernt ...
Domänenserver in der angegebenen Reihenfolge: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
Sie können nslookup oder dig verwenden, um weitere Informationen zu Datensätzen für eine bestimmte Domain zu erhalten. Dies kann Ihnen helfen, die von Ihnen beschriebenen Konflikte zu lösen.
Leider geben die meisten dieser Tools nur den NS-Datensatz zurück, der vom eigentlichen Nameserver selbst bereitgestellt wird. Um genauer zu bestimmen, welche Nameserver tatsächlich für eine Domain verantwortlich sind, müssten Sie entweder "whois" verwenden und die dort aufgeführten Domains überprüfen ODER "dig [domain] NS @ [root name server]" verwenden und diese ausführen rekursiv, bis Sie die Nameserver-Listen erhalten ...
Ich wünschte, es gäbe eine einfache Befehlszeile, die Sie ausführen könnten, um DIESES Ergebnis zuverlässig und in einem konsistenten Format zu erhalten, nicht nur das Ergebnis, das vom Nameserver selbst angegeben wird. Dies dient für mich dazu, etwa 330 von mir verwaltete Domain-Namen abfragen zu können, damit ich genau bestimmen kann, auf welchen Nameserver jede Domain verweist (gemäß den Registrar-Einstellungen).
Kennt jemand einen Befehl mit "dig" oder "host" oder etwas anderem auf * nix?
SOA-Datensätze sind auf allen Servern weiter oben in der Hierarchie vorhanden, über die der Domäneninhaber KEINE Kontrolle hat, und sie alle verweisen auf den einen autorisierenden Nameserver, der vom Domänenbesitzer kontrolliert wird.
Der SOA-Datensatz auf dem autorisierenden Server selbst wird andererseits nicht unbedingt zum Auflösen dieser Domäne benötigt und kann falsche Informationen (oder versteckte primäre oder anderweitig eingeschränkte Server) enthalten und sollte nicht zur Bestimmung des autorisierenden Nameservers herangezogen werden für eine bestimmte Domain.
Sie müssen den Server abfragen, der für die Domäne der obersten Ebene autorisierend ist , um zuverlässige SOA-Informationen für eine bestimmte untergeordnete Domäne zu erhalten.
(Die Informationen darüber, welcher Server für welche TLD maßgeblich ist, können von den Stammnamenservern abgefragt werden.)
Wenn Sie vom autorisierenden TLD-Server zuverlässige Informationen über die SOA haben, können Sie den autorisierenden Primärnamenserver selbst (den im SOA-Datensatz auf dem gTLD-Nameserver!) Nach anderen NS-Datensätzen abfragen und anschließend alle überprüfen Diese Nameserver, die Sie durch Abfragen der NS-Datensätze erhalten haben, um festzustellen, ob auf einem dieser Server Inkonsistenzen für einen anderen bestimmten Datensatz vorliegen.
Dies alles funktioniert unter Linux und Dig viel besser / zuverlässiger als unter nslookup / windows.
Eine einfache Möglichkeit ist die Verwendung eines Online-Domain-Tools. Mein Favorit ist Domain Tools (früher whois.sc). Ich bin mir nicht sicher, ob sie widersprüchliche DNS-Einträge lösen können. Beispielsweise sind die DNS-Server für stackoverflow.com
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
Ich habe festgestellt, dass für einige Domänen die obigen Antworten nicht funktionieren. Der schnellste Weg, den ich gefunden habe, besteht darin, zuerst nach einem NS-Datensatz zu suchen. Wenn dies nicht vorhanden ist, suchen Sie nach einem SOA-Datensatz. Wenn dies nicht vorhanden ist, lösen Sie den Namen rekursiv mit dig auf und nehmen Sie den zuletzt zurückgegebenen NS-Datensatz. Ein Beispiel dafür istanalyticsdcs.ccs.mcafee.com.
host -t NS analyticsdcs.ccs.mcafee.com.
host -t SOA analyticsdcs.ccs.mcafee.com.
dig +trace analyticsdcs.ccs.mcafee.com. | grep -w 'IN[[:space:]]*NS' | tail -1
host analyticsdcs.ccs.mcafee.com. gtm2.mcafee.com.