Как мне найти авторитетный сервер имен для доменного имени?

317

Как я могу найти источники конфликтующих записей DNS?

Binarytales
источник

Ответы:

413

Вам понадобится 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 .

В конце вывода перечислены все официальные серверы, включая серверы резервного копирования для данного домена.

Антти Киссаниеми
источник
158
nslookup -type = soa stackoverflow.com
Бен Амада
6
Однако под окнами я не вижу ответа «Официальные ответы». У меня Windows 8 и Ubuntu 12 бок о бок, и тогда одна и та же команда для того же домена работает в Ubuntu правильно, но не в Windows.
Марио Авад
1
имейте в виду, что это шоу не обязательно показывает недавние изменения в конфигурациях DNS, однако использование dig, как мне показалось, для меня (см. ответ ниже)
rogerdpack
6
Что это значит, если нет авторитетного ответа, но неавторизованный ответ - это хорошо?
Сверхразум
6
Если вы работаете nslookup -type=soa stackoverflow.comв Linux сегодня (2019-февраль), официальный раздел пуст.
simpleuser
174

Вы использовали единственное число в своем вопросе, но обычно есть несколько авторитетных серверов имен, 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

Здесь два авторитетных сервера имен имеют одинаковый серийный номер. Хорошо.

bortzmeyer
источник
5
dig + short не всегда дает ожидаемый ответ. Например, сайт, определенный как www.pressero.com, который является CNAME для другого сайта - dig + short SOA, просто возвращает цель CNAME.
Росс Прессер
Как вы делаете NS авторитетным?
Сверхразум
1
@ Сверхразумный, вы не делаете NS "авторитетным". Если сервер имен настроен как уполномоченный для некоторых доменов, это означает, что у него есть локальные файлы зон (как правило, текстовые файлы, но могут быть выполнены и по-другому) для этих доменов, и он отвечает на запрос для них. Чтобы быть полезными, они должны быть перечислены как записи NS в родительской зоне для каждого домена, для которого они являются полномочными, иначе никто не будет запрашивать их по умолчанию.
Патрик Мевзек,
@RossPresser в ответе говорилось о записях NS / SOA, и я сомневаюсь, что вы это делаете, потому что www.pressero.comвы, вероятно, думали о записях A (это тип записи по умолчанию, digесли вы его не указали). Но если нужно, просто добавьте, tail -1чтобы получить окончательный результат.
Патрик Мевзек,
@PatrickMevzek Как я уже говорил в своем комментарии, я использовал dig +short SOA www.pressero.com. Это возвращает только цель CNAME, а не запись SOA для pressero.comдомена, что я и ожидал. tail -1не помогает вопросам; dig +short SOAиспускает только одну линию.
Росс Прессер
40

На * nix:

$ dig -t ns <domain name>
Арье
источник
3
Он попросил серверы имен, а не адрес IPv4. Таким образом, тип (-t) должен быть NS, а не A.
bortzmeyer
1
почему бы не набрать SOA @bortzmeyer?
Рэнди Л
Ну, потому что это возвращает SOA вместо результата NS?
tripleee
17

У меня есть инструмент распространения DNS, предназначенный для ответа на подобные вопросы.

Источник выпущен под AGPLv3.

(Да, интерфейс довольно простой на данный момент :))

Вы также можете узнать серверы имен для домена с помощью команды "host":

[davidp @ supernova: ~] $ host -t ns stackoverflow.com
сервер имен stackoverflow.com ns51.domaincontrol.com.
сервер имен stackoverflow.com ns52.domaincontrol.com.
Дэвид Драгоценный
источник
@cacho Это правда; Я вполне могу добавить это, если у меня будет шанс.
Дэвид Драгоценный
1
Он сломан, он показывает «502 Bad Gateway nginx / 1.14.2»
Марко Демайо,
8

Я обнаружил, что лучше всего всегда добавлять опцию + trace:

dig SOA +trace stackoverflow.com

Он также работает с рекурсивным CNAME, размещенным у другого провайдера. + trace trace подразумевает + norecurse, поэтому результат только для указанного вами домена.

Alex
источник
Обратите внимание, если вы используете локальный сервер NS, такой как dnsmasq +, трассировка ничего не даст ...
Даниэль Соколовский,
Эта команда предоставляет 53 строки, 3652 байта вывода, большая часть которых является случайными значениями. Как кто-то должен интерпретировать вывод, чтобы определить, что такое авторитетный сервер имен?
theferrit32
Я читаю это снизу вверх. Запись SOA - это то, что вы ищете. Вы можете использовать SOA, чтобы получить меньше данных.
Алекс
6

Термин, который вы должны гуглить, является «авторитетным», а не «окончательным».

В 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-сервер и, следовательно, может дать неправильные или устаревшие ответы, которые он имеет в своем кеше.


источник
6
Эти команды не эквивалентны. Ничто не говорит о том, что информация, предоставленная whois, актуальна. Зачастую это происходит не потому, что люди обновляют записи NS в файле зоны без уведомления реестра или регистратора.
bortzmeyer
Я никогда не говорил, что они были;) Вы можете изменять записи NS в своей зоне, сколько хотите, если родительская зона не обновлена, ничего не изменится. А обновление родительской зоны обычно идет рука об руку с обновлением данных whois (по крайней мере, с моими провайдерами).
5

Мы создали инструмент поиска 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

Нитин Агарвал
источник
2

Вы можете использовать сервис whois. В UNIX-подобной операционной системе вы должны выполнить следующую команду. В качестве альтернативы вы можете сделать это в Интернете по адресу http://www.internic.net/whois.html .

whois stackoverflow.com

Вы получите следующий ответ.

... текст удален здесь ...

Серверы домена в указанном порядке: NS51.DOMAINCONTROL.COM NS52.DOMAINCONTROL.COM

Вы можете использовать nslookup или dig, чтобы узнать больше информации о записях для данного домена. Это может помочь вам разрешить конфликты, которые вы описали.

Крис де Врис
источник
2
Ничто не говорит о том, что информация, предоставленная whois, актуальна. Зачастую это происходит не потому, что люди обновляют записи NS в файле зоны без уведомления реестра или регистратора.
bortzmeyer
Хотя whois не является прямым ответом на вопрос, он полезен, потому что он говорит вам, кто должен быть сервером имен для чего-либо (даже если по какой-то причине они в настоящее время не являются).
Кто-то еще
1

К сожалению, большинство из этих инструментов возвращают только запись NS, предоставленную самим сервером имен. Чтобы более точно определить, какие серверы имен на самом деле отвечают за домен, вам нужно либо использовать «whois» и проверить перечисленные там домены, либо использовать «dig [domain] NS @ [корневой сервер имен]» и запустить его рекурсивно, пока вы не получите списки серверов имен ...

Хотелось бы, чтобы была простая командная строка, которую вы могли бы запустить, чтобы получить ТОЧНЫЙ результат надежно и в согласованном формате, а не только результат, полученный от самого сервера имен. Цель этого для меня - иметь возможность запросить около 330 имен доменов, которыми я управляю, чтобы я мог точно определить, на какой сервер имен указывает каждый домен (согласно их настройкам регистратора).

Кто-нибудь знает команду, использующую "dig" или "host" или что-то еще в * nix?


источник
2
Просто. Предположим, домен - example.org. Во-первых, вам нужно найти серверы имен «.org» с помощью «dig + short NS org.». Затем вы запрашиваете одного из них (кого угодно, они все авторитетны). Давайте выберем d0.org.afilias-nst.org. Вы запрашиваете 'dig @ d0.org.afilias-nst.org NS example.org.'
bortzmeyer
Тот факт, что распознаватель по умолчанию возвращает серверы имен, перечисленные самим доменом, - это хорошо. Это авторитетная информация. Делегирование в родительской зоне НЕ является полномочным.
bortzmeyer
И указатель на whois - красная сельдь. Информация о сервере имен whois часто устарела. Авторитетным ресурсом является DNS.
tripleee
1
Whois совершенно произвольно. Значение, которое вы видите в списке whois, не имеет технических связей с DNS. Это часто устарело или неправильно. Я бы сказал, что данным whois почти никогда не следует доверять. Существуют «тонкие» и «толстые» реестры. Два хорошо известных толстых реестра - это реестры .com и .net. Эти реестры содержат все данные DNS и служат ответам whois, которым можно доверять. Почти другие другие реестры являются «вещью» и имеют свои собственные реестры Whois. Эти данные часто неверны.
Марк
1

Записи SOA присутствуют на всех серверах далее по иерархии, над которой владелец домена НЕТ контроля, и все они в действительности указывают на один авторитетный сервер имен под контролем владельца домена.

С другой стороны, запись SOA на самом доверенном сервере не является строго необходимой для разрешения этого домена и может содержать фиктивную информацию (или скрытые первичные, или иным образом ограниченные серверы), и на нее нельзя полагаться при определении заслуживающего доверия сервера имен. для данного домена.

Вам нужно запросить сервер, который является полномочным для домена верхнего уровня, чтобы получить надежную информацию SOA для данного дочернего домена.

(Информация о том, какой сервер является доверенным, для какого TLD можно запрашивать корневые серверы имен).

Если у вас есть надежная информация о SOA от уполномоченного сервера TLD, вы можете запросить у самого основного сервера имен полномочный сервер (тот, который находится в записи SOA на сервере имен gTLD!) Для любых других записей NS, а затем приступить к проверке всех те серверы имен, которые вы получили, запросив записи NS, чтобы выяснить, есть ли несоответствия для какой-либо другой конкретной записи на любом из этих серверов.

Все это работает намного лучше / надежнее с linux и dig, чем с nslookup / windows.

Деннис
источник
0

Самый простой способ - использовать инструмент онлайн-домена. Мой фаворит - Доменные Инструменты (ранее whois.sc). Я не уверен, могут ли они разрешить конфликтующие записи DNS, хотя. Например, DNS-серверы для stackoverflow.com являются

  NS51.DOMAINCONTROL.COM
  NS52.DOMAINCONTROL.COM
Кайл Кронин
источник
0

Я обнаружил, что для некоторых доменов вышеуказанные ответы не работают. Самый быстрый способ, который я нашел, - это сначала проверить запись NS. Если этого не существует, проверьте запись SOA. Если этого не существует, рекурсивно разрешите имя с помощью dig и возьмите последнюю возвращенную запись NS. Пример, который подходит для этогоanalyticsdcs.ccs.mcafee.com.

  1. Проверьте запись NS

host -t NS analyticsdcs.ccs.mcafee.com.

  1. Если NS не найден, проверьте запись SOA

host -t SOA analyticsdcs.ccs.mcafee.com.

  1. Если ни NS, ни SOA, сделайте полную рекурсию и возьмите последний NS, возвращенный

dig +trace analyticsdcs.ccs.mcafee.com. | grep -w 'IN[[:space:]]*NS' | tail -1

  1. Проверьте, что сервер имен вернулся

host analyticsdcs.ccs.mcafee.com. gtm2.mcafee.com.

dannyw
источник