nslookup отправляет запрос DNS-серверу и показывает ответ. С её помощью проверяют, на какой адрес указывает домен, какие у него почтовые серверы и TXT-записи, видит ли изменения конкретный DNS-сервер и почему не открывается сайт. Команда есть в Windows, Linux и macOS.

Простой запрос

bash
nslookup example.com

Ответ:

text
Server:  dns.local
Address:  192.168.1.1

Non-authoritative answer:
Name:    example.com
Addresses:  2001:db8::10
          203.0.113.10

Первые две строки - какой DNS-сервер ответил. Ниже - найденные адреса IPv4 и IPv6.

Non-authoritative answer («неавторитетный ответ») означает, что ответил не сервер, отвечающий за зону домена, а промежуточный сервер, например провайдера, из своего кэша или по цепочке запросов. Это нормально и не означает ошибку.

Запрос к конкретному DNS-серверу

Вторым параметром указывается сервер:

bash
nslookup example.com 192.0.2.53

Так проверяют, обновилась ли запись на определённом сервере, отличается ли ответ внутреннего DNS от внешнего и не в DNS-сервере ли проблема. Если через один сервер имя находится, а через другой нет, дело не в домене, а в настройках или кэше сервера.

Чтобы получить ответ прямо от сервера, отвечающего за домен, сначала узнайте его записи NS (см. ниже), а затем спросите один из этих серверов. Ответ будет без пометки «Non-authoritative».

Типы записей

Центральный блок и карточки: почта, адрес, текст, сервер имён

Тип задаётся ключом -type= (или -q=):

bash
nslookup -type=mx example.com      # почтовые серверы
nslookup -type=txt example.com     # TXT: SPF, проверки владения доменом
nslookup -type=ns example.com      # DNS-серверы зоны
nslookup -type=soa example.com     # начальная запись зоны
nslookup -type=cname www.example.com  # псевдоним
nslookup -type=aaaa example.com    # только IPv6-адреса
nslookup -type=srv _ldap._tcp.dc._msdcs.corp.example # записи служб, например контроллеров домена

Для записей MX в ответе указан приоритет (MX preference): меньшее число - более приоритетный сервер.

Тип any многие серверы больше не обслуживают полноценно и возвращают сокращённый ответ, поэтому запрашивайте нужные типы по отдельности.

Обратный запрос: имя по IP-адресу

bash
nslookup 203.0.113.10

nslookup сам превратит адрес в запрос PTR к зоне in-addr.arpa. Если записи нет, будет ошибка «can't find ... Non-existent domain». Для почтовых серверов PTR-запись обязательна: многие получатели отклоняют почту с адресов без неё.

Интерактивный режим

Если запустить nslookup без параметров, откроется приглашение >, в котором можно делать запросы подряд и менять настройки:

text
> server 192.0.2.53          сменить DNS-сервер
> set type=mx                сменить тип записи
> example.com
> set type=a
> www.example.com
> set debug                  показать ответ целиком, со служебными разделами
> exit

Режим set debug показывает TTL записей (сколько секунд их будет хранить кэш) и разделы ответа. Помогает понять, когда изменение дойдёт до всех: пока не истечёт TTL старой записи, кэширующие серверы будут отдавать её.

Частые сообщения

  • *** UnKnown can't find ... или Server: UnKnown в первой строке - DNS-сервер работает, но для его собственного адреса нет обратной записи PTR. На результат запроса это не влияет. Чтобы сообщение исчезло, нужна обратная зона с записью для DNS-сервера.
  • Non-existent domain (NXDOMAIN) - такого имени нет. Проверьте написание и то, существует ли запись в зоне.
  • Query refused - сервер отказался отвечать, обычно потому что не выполняет рекурсивные запросы для вашего адреса.
  • DNS request timed out - сервер не ответил. Он недоступен, порт 53 заблокирован или сервер перегружен.
  • No response from server - то же, сервер не ответил совсем.
  • Server failed (SERVFAIL) - сервер не смог получить ответ от вышестоящих серверов или серверов зоны. Часто бывает при ошибках в делегировании или DNSSEC у домена.

Короткое имя и суффиксы

При запросе имени без точки Windows-версия nslookup добавляет к нему DNS-суффиксы из настроек компьютера. Поэтому nslookup srv01 в домене находит srv01.corp.example. Чтобы запросить имя ровно как написано, поставьте в конце точку: nslookup example.com.

Альтернативы

В PowerShell есть Resolve-DnsName с более подробным и удобным для скриптов выводом:

powershell
Resolve-DnsName example.com -Type MX
Resolve-DnsName example.com -Server 192.0.2.53

В отличие от nslookup, она использует тот же механизм разрешения, что и сама Windows, включая файл hosts и кэш DNS-клиента. Это важно: nslookup всегда спрашивает DNS-сервер напрямую и не видит записей из hosts, поэтому иногда показывает не то, что на самом деле получают программы.

В Linux и macOS для подробной диагностики удобнее dig:

bash
dig example.com MX
dig @192.0.2.53 example.com
dig -x 203.0.113.10
dig +trace example.com

Последняя команда проходит всю цепочку от корневых серверов до серверов зоны и показывает, на каком шаге возникает проблема.