Перейти к содержимому

nslookup и drill: DNS-разрешение в терминале

Сервер не резолвит домен, а пинги летят. Привычный dig под рукой нет — в BIOS уже грузится минимальный busybox. Или на хосте без bind-tools. nslookup и drill закрывают эту щель: первый встроен почти везде, второй даёт больше контекста при отладке.

nslookup: интерактивный и однострочный режим

nslookup входит в состав bind-utils и isc-dhcp-client. Работает в двух режимах.

Однострочный запрос:

nslookup example.com
nslookup example.com 8.8.8.8

Интерактивный режим запускается без аргументов. Типичная сессия:

$ nslookup
> server 1.1.1.1
Default server: 1.1.1.1
Address: 1.1.1.1#53
> set type=MX
> example.com
Server:         1.1.1.1
Address:        1.1.1.1#53

example.com     mail exchanger = 10 mx1.example.com.
> exit

Переключение сервера внутри сессии меняет ресолвер только для этого запроса. Если нужен постоянный ресолвер — правь /etc/resolv.conf.

Типы DNS-записей в запросах

По умолчанию nslookup запрашивает A-запись. Для остального используется set type=:

Тип записиНазначениеПример вывода
AIPv4-адрес93.184.216.34
AAAAIPv6-адрес2606:2800:220:1::
MXПочтовый обменник10 mail.example.com
TXTТекстовые записи, SPFv=spf1 include:_spf.example.com ~all
NSАвторитативные серверыa.iana-servers.net
SOAStart of Authorityserial 2005080901
CNAMEКаноническое имяexample.com canonical name = www.example.com
PTRОбратное разрешение34.216.184.93.in-addr.arpa name = example.com

Однострочный эквивалент — флаг -type=:

nslookup -type=ANY example.com
nslookup -type=MX github.com
Предупреждение

Запросы ANY часто блокируются на уровне resolver. Рекурсор вернёт SERVFAIL или пустой ответ. Не полагайтесь на ANY при диагностике.

drill: вывод с типом Resource Record

drill — часть ldns. Выдаёт результат в классическом DNS-формате с секциями ANSWER, AUTHORITY, ADDITIONAL:

drill A example.com
drill MX github.com @1.1.1.1

Вывод drill читабельнее при разборе цепочки CNAME:

$ drill CNAME www.cloudflare.com
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDRIBUTE: 0

;; QUESTION SECTION:
;www.cloudflare.com.   IN   CNAME

;; ANSWER SECTION:
www.cloudflare.com.  300  IN  CNAME  cloudflare.com.

;; AUTHORITY SECTION:
;; ADDITIONAL SECTION:

Без флага @server drill берёт ресолвер из /etc/resolv.conf.

DNSSEC-валидация

drill проверяет цепочку доверия DNSSEC:

drill -S _dmarc.example.com TXT @1.1.1.1

Флаг -S запрашивает DS-запись выше по цепочке и валидирует подпись. При невалидной цепочке:

drill: RRSIG validation failed: Signature has expired

nslookup DNSSEC не валидирует — только отправляет запросы с флагом DO (добавить RRSIG в ответ). Для полноценной валидации нужен drill или delv.

NXDOMAIN и SERVFAIL: разбор кодов ответа

Первый шаг при любой ошибке — посмотреть код ответа.

NXDOMAIN (код 3) — домен не существует. Источник: авторитативный сервер зоны. Если dig +short возвращает пустоту, а nslookup пишет ** server can't find example.invalid, это NXDOMAIN. Причины: опечатка в домене, устаревший CNAME, удалённая зона.

SERVFAIL (код 2) — ресолвер не смог ответить. Причины: DNSSEC-валидация сломана, превышен таймаут, циклическая ссылка в NS-записях, перегрузка authoritative-сервера. nslookup показывает ** server can't find example.com: Server failed.

REFUSED (код 5) — рекурсор отказался отвечать. Обычно ACL на DNS-сервере или rate limiting.

nslookup example.com 10.0.0.1
# Server:  10.0.0.1
# Address: 10.0.0.1#53
# ** server can't find example.com: Server failed

Ключевые флаги nslookup и drill

nslookup

ФлагДействие
-type=RRТип записи (A, MX, TXT, ANY)
hostПеренаправление на заданный сервер
-port=53Нестандартный порт (например, 5353 для mDNS)
-timeout=5Таймаут в секундах
-retry=3Количество повторов
-vcTCP вместо UDP
nslookup -type=TXT -port=5353 _http._tcp.local 224.0.0.251

drill

ФлагДействие
@serverСервер для запроса
-QТихий режим, только ответ
-TПоказывать время ответа
-SDNSSEC-валидация
-DПринудительный DNSSEC (запрос с флагом DO)
-p portНестандартный порт
-t timeoutТаймаут в секундах
drill -TD -S TXT dkim._domainkey.example.com @8.8.8.8

-T полезен для сравнения latency между ресолверами:

drill A google.com @1.1.1.1
# Query timeout: 2
# Answer received in 45ms

Установка

# Debian / Ubuntu
apt install dnsutils ldnsutils

# RHEL / CentOS / Fedora
dnf install bind-utils ldns

# Alpine
apk add bind-tools ldns

В минимальных образах busybox уже содержит упрощённый nslookup. Полный набор функций доступен после установки dnsutils.