Как я могу найти источники конфликтующих записей DNS?
Как я могу найти источники конфликтующих записей DNS?
Ответы:
Вам понадобится SOA-запись (Start of Authority) для данного доменного имени, и вот как вы это делаете, используя универсально доступный инструмент командной строки 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.
В строке источника (или основного сервера имен в Windows) сообщается, что ns51.domaincontrol является основным сервером имен для stackoverflow.com .
В конце вывода перечислены все официальные серверы, включая серверы резервного копирования для данного домена.
dig
, как мне показалось, для меня (см. ответ ниже)
nslookup -type=soa stackoverflow.com
в Linux сегодня (2019-февраль), официальный раздел пуст.
Вы использовали единственное число в своем вопросе, но обычно есть несколько авторитетных серверов имен, RFC 1034 рекомендует как минимум два.
Если вы не имеете в виду «основной сервер имен», а не «авторитетный сервер имен». Вторичные серверы имен являются официальными.
Чтобы узнать серверы имен домена в Unix:
% dig +short NS stackoverflow.com
ns52.domaincontrol.com.
ns51.domaincontrol.com.
Чтобы определить сервер, указанный в качестве основного (понятие «основной» в наши дни довольно размыто и обычно не дает хорошего ответа):
% dig +short SOA stackoverflow.com | cut -d' ' -f1
ns51.domaincontrol.com.
Чтобы проверить несоответствия между серверами имен, я предпочитаю старый check_soa
инструмент, описанный в книге Liu & Albitz «DNS & BIND» (редактор O'Reilly). Исходный код доступен по адресу http://examples.oreilly.com/dns5/.
% check_soa stackoverflow.com
ns51.domaincontrol.com has serial number 2008041300
ns52.domaincontrol.com has serial number 2008041300
Здесь два авторитетных сервера имен имеют одинаковый серийный номер. Хорошо.
www.pressero.com
, который является CNAME для другого сайта - dig + short SOA, просто возвращает цель CNAME.
www.pressero.com
вы, вероятно, думали о записях A (это тип записи по умолчанию, dig
если вы его не указали). Но если нужно, просто добавьте, tail -1
чтобы получить окончательный результат.
dig +short SOA www.pressero.com
. Это возвращает только цель CNAME, а не запись SOA для pressero.com
домена, что я и ожидал. tail -1
не помогает вопросам; dig +short SOA
испускает только одну линию.
На * nix:
$ dig -t ns <domain name>
У меня есть инструмент распространения DNS, предназначенный для ответа на подобные вопросы.
Источник выпущен под AGPLv3.
(Да, интерфейс довольно простой на данный момент :))
Вы также можете узнать серверы имен для домена с помощью команды "host":
[davidp @ supernova: ~] $ host -t ns stackoverflow.com сервер имен stackoverflow.com ns51.domaincontrol.com. сервер имен stackoverflow.com ns52.domaincontrol.com.
Я обнаружил, что лучше всего всегда добавлять опцию + trace:
dig SOA +trace stackoverflow.com
Он также работает с рекурсивным CNAME, размещенным у другого провайдера. + trace trace подразумевает + norecurse, поэтому результат только для указанного вами домена.
Термин, который вы должны гуглить, является «авторитетным», а не «окончательным».
В Linux или Mac вы можете использовать команды whois
, dig
, host
, nslookup
или несколько других. nslookup
может также работать на Windows.
Пример:
$ whois stackoverflow.com
[...]
Domain servers in listed order:
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
Что касается дополнительного кредита: Да, это возможно.
aryeh определенно ошибается, так как его предложение обычно дает вам только IP-адрес для имени хоста. Если вы используете dig
, вы должны искать записи NS, например, так:
dig ns stackoverflow.com
Имейте в виду, что об этом может спросить ваш локальный DNS-сервер и, следовательно, может дать неправильные или устаревшие ответы, которые он имеет в своем кеше.
Мы создали инструмент поиска DNS, который предоставляет вам авторитетные серверы имен домена и его общие записи DNS в одном запросе.
Пример: https://www.misk.com/tools/#dns/stackoverflow.com
Наш инструмент находит авторитетные серверы имен, выполняя поиск DNS в реальном времени (без кэширования) корневых серверов имен, а затем следуя ссылкам на сервер имен, пока мы не достигнем авторитетных серверов имен. Это та же логика, которую использует DNS-резолвер для получения достоверных ответов. В каждом запросе выбирается (и идентифицируется) случайный полномочный сервер имен, что позволяет вам находить конфликтующие записи DNS, выполняя несколько запросов.
Вы также можете просмотреть путь делегирования сервера имен, щелкнув «Официальные серверы имен» в нижней части результатов поиска DNS из приведенного выше примера.
Пример: https://www.misk.com/tools/#dns/stackoverflow.com@f.root-servers.net
Вы можете использовать сервис whois. В UNIX-подобной операционной системе вы должны выполнить следующую команду. В качестве альтернативы вы можете сделать это в Интернете по адресу http://www.internic.net/whois.html .
whois stackoverflow.com
Вы получите следующий ответ.
... текст удален здесь ...
Серверы домена в указанном порядке: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM
Вы можете использовать nslookup или dig, чтобы узнать больше информации о записях для данного домена. Это может помочь вам разрешить конфликты, которые вы описали.
К сожалению, большинство из этих инструментов возвращают только запись NS, предоставленную самим сервером имен. Чтобы более точно определить, какие серверы имен на самом деле отвечают за домен, вам нужно либо использовать «whois» и проверить перечисленные там домены, либо использовать «dig [domain] NS @ [корневой сервер имен]» и запустить его рекурсивно, пока вы не получите списки серверов имен ...
Хотелось бы, чтобы была простая командная строка, которую вы могли бы запустить, чтобы получить ТОЧНЫЙ результат надежно и в согласованном формате, а не только результат, полученный от самого сервера имен. Цель этого для меня - иметь возможность запросить около 330 имен доменов, которыми я управляю, чтобы я мог точно определить, на какой сервер имен указывает каждый домен (согласно их настройкам регистратора).
Кто-нибудь знает команду, использующую "dig" или "host" или что-то еще в * nix?
Записи SOA присутствуют на всех серверах далее по иерархии, над которой владелец домена НЕТ контроля, и все они в действительности указывают на один авторитетный сервер имен под контролем владельца домена.
С другой стороны, запись SOA на самом доверенном сервере не является строго необходимой для разрешения этого домена и может содержать фиктивную информацию (или скрытые первичные, или иным образом ограниченные серверы), и на нее нельзя полагаться при определении заслуживающего доверия сервера имен. для данного домена.
Вам нужно запросить сервер, который является полномочным для домена верхнего уровня, чтобы получить надежную информацию SOA для данного дочернего домена.
(Информация о том, какой сервер является доверенным, для какого TLD можно запрашивать корневые серверы имен).
Если у вас есть надежная информация о SOA от уполномоченного сервера TLD, вы можете запросить у самого основного сервера имен полномочный сервер (тот, который находится в записи SOA на сервере имен gTLD!) Для любых других записей NS, а затем приступить к проверке всех те серверы имен, которые вы получили, запросив записи NS, чтобы выяснить, есть ли несоответствия для какой-либо другой конкретной записи на любом из этих серверов.
Все это работает намного лучше / надежнее с linux и dig, чем с nslookup / windows.
Самый простой способ - использовать инструмент онлайн-домена. Мой фаворит - Доменные Инструменты (ранее whois.sc). Я не уверен, могут ли они разрешить конфликтующие записи DNS, хотя. Например, DNS-серверы для stackoverflow.com являются
NS51.DOMAINCONTROL.COM
NS52.DOMAINCONTROL.COM
Я обнаружил, что для некоторых доменов вышеуказанные ответы не работают. Самый быстрый способ, который я нашел, - это сначала проверить запись NS. Если этого не существует, проверьте запись SOA. Если этого не существует, рекурсивно разрешите имя с помощью dig и возьмите последнюю возвращенную запись NS. Пример, который подходит для этогоanalyticsdcs.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.