Два режима работы nslookup
Утилита nslookup есть в Windows, macOS и большинстве дистрибутивов Linux; в Linux она ставится пакетом dnsutils или bind-utils. Она умеет работать двумя способами. Неинтерактивный режим — одна команда, один ответ: nslookup example.com. Интерактивный режим запускается просто командой nslookup без аргументов; вы попадаете в приглашение со знаком «больше» и вводите команды по одной, не запуская программу заново.
Интерактивный режим удобен, когда нужно задать серию запросов к одному серверу или сравнить типы записей: настройки сохраняются, пока вы не выйдете. Для выхода введите exit или нажмите Ctrl и C. Команда help или знак вопроса выводит краткую справку по доступным командам.
По умолчанию запрашиваются адресные записи A, а в новых версиях и AAAA. Чтобы узнать что-либо другое: почтовые серверы, текстовые записи, серверы имён домена, потребуется указать тип.
Как задать тип записи
В интерактивном режиме используется команда set type=ТИП, синонимом служит set q=ТИП. Затем вводите имя домена, и запрос будет выполнен для выбранного типа. Разово, без входа в интерактивный режим, тип задают ключом: nslookup -type=MX example.com.
- Введите nslookup и нажмите Enter, увидите приглашение.
- Введите set type=MX и Enter.
- Введите example.com и Enter: появится список почтовых серверов.
- Смените тип: set type=TXT, и повторите то же имя, получите текстовые записи.
- Введите exit, когда закончите.
| Тип | Что запрашивает |
|---|---|
| A | Адрес IPv4 |
| AAAA | Адрес IPv6 |
| MX | Почтовые серверы и их приоритеты |
| TXT | Текстовые записи, например политики отправки почты |
| NS | Серверы имён домена |
| SOA | Начальная запись зоны с серийным номером и таймерами |
| CNAME | Каноническое имя, на которое указывает псевдоним |
| PTR | Обратное имя по IP-адресу |
| ANY | Все доступные записи; многие серверы ограничивают такой ответ |
Тип ANY на практике часто возвращает урезанный или пустой ответ, поэтому для полной картины запрашивайте нужные типы по одному.
Как читать ответ
Пример вывода (пример) для MX: строки Server и Address с указанием используемого DNS-сервера и порта 53, затем, при ответе из кэша резолвера, метка «Non-authoritative answer», а после неё строки вида example.com MX preference = 10, mail exchanger = mail.example.com. Число preference задаёт приоритет: сообщения сначала пытаются доставить на сервер с меньшим значением.
Метка «Non-authoritative answer» не сигнализирует об ошибке. Она означает, что ответ дал не сервер, за которым закреплена зона, а кэширующий резолвер, например роутер или сервер провайдера. Чтобы получить ответ от авторитетного сервера, сначала выясните серверы имён командой set type=NS, затем выберите один командой server имя-сервера и повторите запрос: метки уже не будет.
Другие сообщения. Non-existent domain означает, что имя не существует. Timed out — сервер не ответил за отведённое время. Server failed — сервер сообщил о внутренней ошибке. Refused — сервер отказался отвечать вам. Отсутствие строк после запроса типа при отсутствии ошибки говорит о том, что имя есть, а записей такого типа нет.
Выбор DNS-сервера и полезные команды
В интерактивном режиме команда server адрес меняет сервер, к которому идут запросы: server 203.0.113.53. Разово адрес указывают последним аргументом: nslookup -type=TXT example.com 203.0.113.53. Так можно сравнить ответ вашего роутера и, например, публичного резолвера либо сервера провайдера.
- set all — показать текущие настройки, включая тип, сервер, число повторов и таймаут.
- set timeout=N и set retry=N — время ожидания и число повторов, полезны для медленных серверов.
- set debug — подробный вывод пакета ответа, включая заголовки и TTL.
- set norecurse — не запрашивать рекурсию, чтобы посмотреть только то, что есть в кэше сервера.
- set domain=имя — домен, который добавляется к коротким именам.
Обратный запрос выполняется просто: nslookup 203.0.113.10. Утилита вернёт PTR-запись, если она настроена. В ответе Name покажет обратное имя. Отсутствие PTR — обычное дело для многих адресов.
Ограничения nslookup и что использовать вместо него
Nslookup обращается к DNS-серверу напрямую и не читает файл hosts, поэтому запись, добавленную в hosts, он не увидит. Его собственный механизм отличается от механизма, которым пользуются программы, потому нужно быть осторожным: результат nslookup и поведение браузера могут различаться. Для проверки в стиле «как видит программа» в Windows подойдёт Resolve-DnsName без параметра -DnsOnly, а в Linux resolvectl query.
Формат вывода nslookup не предназначен для разбора скриптами и в разных системах немного отличается. Для автоматизации предпочтительнее dig с ключами +short и +noall +answer. Но для быстрой ручной проверки MX и TXT записей, особенно в Windows, где dig нет, nslookup остаётся самым доступным инструментом.
Запрашивайте данные только о тех доменах, которыми вы управляете либо которые проверяете по обычной необходимости. Массовые запросы к чужим серверам имён создают нагрузку и могут привести к ограничению.
Проверка почтовых записей домена на практике
Самый частый повод открыть nslookup — настройка почты для собственного домена. Порядок такой: запросите MX и убедитесь, что серверы и приоритеты соответствуют данным почтового сервиса. Затем запросите TXT: здесь размещают запись, определяющую, каким серверам разрешено отправлять почту от имени домена, и записи подтверждения владения. Одна строка TXT может быть разбита на несколько частей в кавычках, это нормально.
Если записи только что менялись, сравните ответ вашего резолвера с ответом авторитетного сервера: пока не истёк TTL, кэши могут показывать прошлое значение. Для этого выполните set type=NS, выберите один из серверов командой server и повторите запрос. Расхождение объясняет, почему письма ещё идут по старому маршруту. Обратите внимание и на запись CNAME: для домена вместе с почтой она обычно не допускается на корневом имени, и при ошибке настройки почта перестанет приходить.