Jak znaleźć źródło konfliktu rekordów DNS?
Jak znaleźć źródło konfliktu rekordów DNS?
Odpowiedzi:
Będziesz potrzebował rekordu SOA (Start of Authority) dla danej nazwy domeny, a oto jak go osiągnąć za pomocą powszechnie dostępnego narzędzia wiersza poleceń 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.
Pochodzenie (lub serwer nazw podstawowym w systemie Windows) linia mówi, że ns51.domaincontrol to główny serwer nazw dla stackoverflow.com .
Na końcu danych wyjściowych są wymienione wszystkie autorytatywne serwery, w tym serwery kopii zapasowych dla danej domeny.
dig
wydawało mi się (patrz odpowiedź poniżej)
nslookup -type=soa stackoverflow.com
z Linuksa dzisiaj (2019-luty), autorytatywna sekcja jest pusta.
Użyłeś liczby pojedynczej w swoim pytaniu, ale zwykle istnieje kilka autorytatywnych serwerów nazw, RFC 1034 zaleca co najmniej dwa.
Chyba że masz na myśli „podstawowy serwer nazw”, a nie „autorytatywny serwer nazw”. Pomocnicze serwery nazw są autorytatywne.
Aby znaleźć serwery nazw domeny w Uniksie:
% dig +short NS stackoverflow.com
ns52.domaincontrol.com.
ns51.domaincontrol.com.
Aby dowiedzieć się, który serwer jest wymieniony jako główny (pojęcie „podstawowy” jest obecnie dość rozmyte i zazwyczaj nie ma dobrej odpowiedzi):
% dig +short SOA stackoverflow.com | cut -d' ' -f1
ns51.domaincontrol.com.
Aby sprawdzić rozbieżności między serwerami nazw, preferuję stare check_soa
narzędzie opisane w książce Liu & Albitz „DNS & BIND” (edytor O'Reilly). Kod źródłowy jest dostępny na stronie http://examples.oreilly.com/dns5/
% check_soa stackoverflow.com
ns51.domaincontrol.com has serial number 2008041300
ns52.domaincontrol.com has serial number 2008041300
Tutaj dwa autorytatywne serwery nazw mają ten sam numer seryjny. Dobrze.
www.pressero.com
, która jest CNAME dla innej witryny - dig + short SOA po prostu zwraca cel CNAME.
www.pressero.com
, prawdopodobnie myślałeś o rekordach A (co jest domyślnym typem rekordu, dig
jeśli go nie określisz). Ale jeśli to konieczne, po prostu dodaj a, tail -1
aby pobrać końcowy wynik.
dig +short SOA www.pressero.com
. Zwraca tylko cel CNAME - nie rekord SOA dla pressero.com
domeny, czego się spodziewałem. tail -1
nie pomaga w sprawach; dig +short SOA
emituje tylko jedną linię.
W * nix:
$ dig -t ns <domain name>
Mam narzędzie do propagacji DNS zaprojektowane, aby odpowiedzieć na tego rodzaju pytania.
Źródło zostało wydane na podstawie AGPLv3.
(Tak, interfejs jest w tej chwili dość prosty :))
Możesz również znaleźć serwery nazw dla domeny za pomocą polecenia „host”:
[davidp @ supernova: ~] $ host -t ns stackoverflow.com serwer nazw stackoverflow.com ns51.domaincontrol.com. serwer nazw stackoverflow.com ns52.domaincontrol.com.
Odkryłem, że najlepszym sposobem jest zawsze dodawanie opcji + trace:
dig SOA +trace stackoverflow.com
Działa również z rekurencyjną CNAME hostowaną u innego dostawcy. + trace trace oznacza + norecurse, więc wynik jest tylko dla określonej domeny.
Termin, w którym powinieneś być google, to „autorytatywny”, a nie „ostateczny”.
W systemie Linux lub Mac można użyć polecenia whois
, dig
, host
, nslookup
i kilka innych. nslookup
może również działać w systemie Windows.
Przykład:
$ whois stackoverflow.com
[...]
Domain servers in listed order:
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
Jeśli chodzi o dodatkowy kredyt: Tak, jest to możliwe.
aryeh jest zdecydowanie w błędzie, ponieważ jego sugestia zwykle daje ci tylko adres IP nazwy hosta. Jeśli używasz dig
, musisz szukać rekordów NS, takich jak:
dig ns stackoverflow.com
Pamiętaj, że może to poprosić lokalny serwer DNS, a zatem może dać nieprawidłowe lub nieaktualne odpowiedzi, które ma w pamięci podręcznej.
Zbudowaliśmy narzędzie do wyszukiwania dns, które daje wiarygodne serwery nazw domeny i wspólne rekordy dns w jednym żądaniu.
Przykład: https://www.misk.com/tools/#dns/stackoverflow.com
Nasze narzędzie wyszukuje autorytatywne serwery nazw, wykonując wyszukiwanie DNS w czasie rzeczywistym (niebuforowane) na głównych serwerach nazw, a następnie postępując zgodnie z poleceniami serwerów nazw, aż dotrzemy do autorytatywnych serwerów nazw. Jest to ta sama logika, której używają przeliczniki dns, aby uzyskać wiarygodne odpowiedzi. Losowy autorytatywny serwer nazw jest wybierany (i identyfikowany) dla każdego zapytania, umożliwiając znalezienie sprzecznych rekordów dns poprzez wykonanie wielu żądań.
Możesz także wyświetlić ścieżkę delegowania serwera nazw, klikając „Autorytatywne serwery nazw” na dole wyników wyszukiwania dns z powyższego przykładu.
Przykład: https://www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net
Możesz skorzystać z usługi whois. W systemie operacyjnym typu UNIX wykonaj następujące polecenie. Alternatywnie możesz to zrobić w Internecie pod adresem http://www.internic.net/whois.html .
whois stackoverflow.com
Otrzymasz następującą odpowiedź.
... tekst usunięty tutaj ...
Serwery domen w podanej kolejności: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
Możesz użyć nslookup lub dig, aby uzyskać więcej informacji o rekordach dla danej domeny. Może to pomóc w rozwiązaniu opisanych konfliktów.
Niestety większość z tych narzędzi zwraca tylko rekord NS dostarczony przez sam serwer nazw. Aby dokładniej określić, które serwery nazw są faktycznie odpowiedzialne za domenę, musisz albo użyć „whois” i sprawdzić wymienione tam domeny LUB użyć „dig [domena] NS @ [główny serwer nazw]” i uruchomić to rekurencyjnie, aż pojawi się lista serwerów nazw ...
Chciałbym, aby istniała prosta linia poleceń, którą można uruchomić, aby uzyskać TEN wynik w sposób niezawodny i w spójnym formacie, a nie tylko wynik otrzymany z samego serwera nazw. Celem tego jest dla mnie możliwość zapytania o około 330 nazw domen, którymi zarządzam, dzięki czemu mogę dokładnie określić, na który serwer nazw wskazuje każda domena (zgodnie z ich ustawieniami rejestratora).
Czy ktoś wie o komendzie używającej „dig” lub „host” lub czegoś innego na * nix?
Rekordy SOA są obecne na wszystkich serwerach w dalszej części hierarchii, nad którymi właściciel domeny NIE ma kontroli, i wszystkie one wskazują na jeden autorytatywny serwer nazw pod kontrolą właściciela domeny.
Z drugiej strony, rekord SOA na samym autorytatywnym serwerze nie jest ściśle potrzebny do rozwiązania tej domeny i może zawierać fałszywe informacje (lub ukryte serwery podstawowe lub w inny sposób ograniczone) i nie należy na nim polegać w celu ustalenia autorytatywnego serwera nazw dla danej domeny.
Musisz wysłać zapytanie do serwera, który jest autorytatywny dla domeny najwyższego poziomuAby uzyskać wiarygodne informacje SOA dla danej domeny podrzędnej, .
(Informacje o tym, który serwer jest autorytatywny, dla którego TLD można zapytać z głównych serwerów nazw).
Gdy masz wiarygodne informacje na temat SOA z autorytatywnego serwera TLD, możesz następnie zapytać autorytatywny główny serwer nazw (ten, który znajduje się w rekordzie SOA na serwerze nazw gTLD!) O inne rekordy NS, a następnie przejść do sprawdzenia wszystkich te serwery nazw, które otrzymałeś od zapytania rekordów NS, aby sprawdzić, czy istnieje jakaś niespójność dla jakiegokolwiek innego konkretnego rekordu na którymkolwiek z tych serwerów.
To wszystko działa znacznie lepiej / niezawodnie w przypadku Linuksa i Diga niż w przypadku nslookup / windows.
Prostym sposobem jest użycie narzędzia domeny online. Moje ulubione to Domain Tools (poprzednio whois.sc). Nie jestem jednak pewien, czy potrafią rozwiązać konfliktowe rekordy DNS. Na przykład serwery DNS dla stackoverflow.com to
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
Przekonałem się, że w niektórych domenach powyższe odpowiedzi nie działają. Najszybszym sposobem, jaki udało mi się znaleźć, jest sprawdzenie rekordu NS. Jeśli to nie istnieje, sprawdź rekord SOA. Jeśli to nie istnieje, rekurencyjnie rozwiąż nazwę za pomocą dig i weź ostatni zwrócony rekord NS. Przykładem, który do tego pasuje, jestanalyticsdcs.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.