Диагностика DNS: nslookup, dig, DoH
· 7 мин чтения
Кратко: DNS-проблемы - одни из самых частых и трудно диагностируемых причин сбоев, потому что «у меня DNS работает» не значит, что он работает для ваших клиентов. Вот обзор практических инструментов и процедур.
Кратко: DNS-проблемы - одни из самых частых и трудно диагностируемых причин сбоев, потому что «у меня DNS работает» не значит, что он работает для ваших клиентов. Вот обзор практических инструментов и процедур.
Самые частые проблемы DNS
- Истекла регистрация домена - весь DNS перестаёт работать.
- Неверная запись A/AAAA - после миграции сервера забыли обновить.
- Отсутствующий CNAME / MX - email не работает, при этом сайт работает.
- TTL не подготовлен к быстрым изменениям - кэши провайдеров ещё отдают старые данные.
- Ошибка DNSSEC - валидаторы отклоняют неподписанные или плохо подписанные записи.
- Сбой Geo-DNS - резолвер из определённого региона получает неверный ответ.
nslookup: самая простая команда
Доступна во всех ОС без установки. Использует системный DNS-сервер по умолчанию, но его можно явно указать вторым аргументом.
$ nslookup epulz.io
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: epulz.io
Address: 87.197.115.180
# Явно использовать Cloudflare DNS
$ nslookup epulz.io 1.1.1.1
# Конкретный тип записи
$ nslookup -type=MX gmail.com 8.8.8.8
$ nslookup -type=TXT _dmarc.epulz.io 1.1.1.1
dig: подробный DNS-запрос для Unix
dig (Domain Information Groper) значительно подробнее и гибче. Часть пакета bind-utils или dnsutils.
$ dig epulz.io
;; QUESTION SECTION:
;epulz.io. IN A
;; ANSWER SECTION:
epulz.io. 300 IN A 87.197.115.180
;; Query time: 12 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: ...
Ключевые поля:
TTL(300) = секунды, на которые резолвер может кэшировать ответ.ANSWER SECTION= результат.SERVER= какой DNS-резолвер ответил.Query time= длительность - полезно при отладке медленного DNS.
Практические команды
# Краткий ответ (только IP)
$ dig +short epulz.io
87.197.115.180
# Все записи
$ dig epulz.io ANY
# Трассировка всей DNS-иерархии (от root-серверов)
$ dig +trace epulz.io
# Reverse lookup
$ dig -x 87.197.115.180
# Конкретный резолвер
$ dig @8.8.8.8 epulz.io
$ dig @1.1.1.1 epulz.io
$ dig @9.9.9.9 epulz.io
# Валидация DNSSEC
$ dig +dnssec epulz.io
DNS-over-HTTPS (DoH): когда нет UDP/53
В некоторых сетях (корпоративные фаерволы, мобильные данные с блокировками) традиционный DNS-порт 53 заблокирован. DoH упаковывает DNS-запросы в HTTPS-запросы - проходят везде, где работает 443.
# Endpoint DoH Cloudflare
$ curl -s "https://cloudflare-dns.com/dns-query?name=epulz.io&type=A" \
-H "Accept: application/dns-json" | jq
# Google DoH
$ curl -s "https://dns.google/resolve?name=epulz.io&type=MX" | jq
Онлайн DoH-клиент с приятным UI есть и на - без установки.
Алгоритм при «домен не работает»
- Проверьте регистрацию.
whois yourdomain.comили через регистратора. Если истекла, больше ничего исправить нельзя. - Проверьте NS-записи.
dig NS yourdomain.com @8.8.8.8. Возвращаются ли серверы имён, ответственные за домен? Совпадают ли с теми, что в панели регистратора? - Проверьте A-запись.
dig yourdomain.com @8.8.8.8. Возвращает правильный IP? - Протестируйте из внешней сети (мобильные данные, VPN, онлайн-инструмент). У вас самих может быть закэшированы старые данные.
- Проверьте TTL. Если только что изменили запись, подождите хотя бы исходный TTL (по умолчанию 1-24 часа).
- Проверьте DNSSEC. Если используете, цепочка подписей может быть повреждена.
dig +dnssec yourdomain.comпокажет флагadпри успехе.
DNS-распространение: сколько занимает?
«DNS-распространение» - немного вводящий в заблуждение термин. DNS не распространяется к вам - ваши резолверы скачивают ответ и кэшируют согласно TTL. Только после истечения TTL делают новый запрос.
Практические последствия:
- Планируете миграцию? Снизьте TTL до 60-300 секунд хотя бы за 48 часов.
- Старый IP останется действительным для некоторых клиентов ещё долго после изменения. Не выключайте старый сервер сразу.
- Cloud-провайдеры (Cloudflare, AWS Route 53) имеют быстрый TTL и cache invalidation, но конечный клиент всё равно должен ждать TTL своего резолвера.
Вывод
DNS - инфраструктурный клей, который все принимают как данность, пока он не перестанет работать. Регулярный мониторинг DNS-записей (A, NS, MX, их TTL и DNSSEC-валидация) выявит проблему до того, как клиент сообщит о ней по телефону.
Мониторинг DNS и истечения WHOIS
ePulz.io отслеживает записи A/AAAA/MX/NS и истечение регистрации домена. 7 дней бесплатно.
Попробуйте ePulz.io бесплатно - 7 дней без банковской карты.
Создать аккаунт