Диагностика и решение проблем DNS
Полное руководство по диагностике и решению проблем DNS с помощью dig, nslookup, проверки распространения DNS, очистки кеша и решения распространённых ошибок DNS.
Содержание
Введение
DNS (Domain Name System) — один из фундаментальных компонентов интернет-инфраструктуры. Эта система преобразует доменные имена в IP-адреса, и при её некорректной работе могут быть нарушены многие сервисы: доступ к веб-сайтам, доставка электронной почты и подключения к серверам.
В этом руководстве мы подробно рассмотрим инструменты и методы диагностики и решения проблем DNS.
Основы DNS
Типы DNS-записей
| Тип записи | Описание | Пример |
|---|---|---|
| A | Сопоставление с IPv4-адресом | example.com → 1.2.3.4 |
| AAAA | Сопоставление с IPv6-адресом | example.com → 2001:db8::1 |
| CNAME | Псевдоним другого домена | www → example.com |
| MX | Маршрутизация почтового сервера | mail.example.com (приоритет: 10) |
| TXT | Текстовая запись (SPF, DKIM и т.д.) | v=spf1 ip4:1.2.3.4 -all |
| NS | Определение сервера имён | ns1.example.com |
| PTR | Обратная DNS-запись | 4.3.2.1 → example.com |
| SOA | Запись авторитета зоны | TTL, serial, refresh |
Процесс разрешения DNS
Пользователь → Локальный DNS-кеш → Рекурсивный резолвер → Корневой NS → TLD NS → Авторитетный NS → IP-адрес
Диагностика DNS с помощью команды dig
dig (Domain Information Groper) — самый мощный инструмент для диагностики проблем DNS.
Базовое использование
# Запрос A-записи
dig example.com A
# Запрос с определённого DNS-сервера
dig @8.8.8.8 example.com A
# Краткий вывод
dig example.com +short
# Запрос всех типов записей
dig example.com ANY
# Запрос MX-записи
dig example.com MX
# Запрос NS-записи
dig example.com NS
# Запрос TXT-записи
dig example.com TXT
Детальные запросы
# Режим трассировки — показывает процесс разрешения пошагово
dig example.com +trace
# SOA-запись — информация о зоне
dig example.com SOA
# Обратный DNS-запрос
dig -x 1.2.3.4
# Запрос по TCP (для больших ответов)
dig example.com +tcp
# Проверка DNSSEC
dig example.com +dnssec
Чтение вывода dig
$ dig example.com A
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 300 IN A 93.184.216.34
;; AUTHORITY SECTION:
example.com. 86400 IN NS ns1.example.com.
;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; MSG SIZE rcvd: 56
Ключевые поля:
- ANSWER SECTION: Ответ на запрос
- TTL (300): Время хранения записи в кеше (секунды)
- Query time: Время ответа
- SERVER: DNS-сервер, предоставивший ответ
Команда nslookup
nslookup — более простой инструмент для DNS-запросов:
# Базовый запрос
nslookup example.com
# Запрос с определённого DNS-сервера
nslookup example.com 8.8.8.8
# Запрос MX-записи
nslookup -type=MX example.com
# Запрос NS-записи
nslookup -type=NS example.com
# Обратный DNS
nslookup 1.2.3.4
Проверка распространения DNS
При внесении изменений в DNS требуется время для распространения новых записей на все DNS-серверы.
Время распространения
| Тип записи | Типичный TTL | Время распространения |
|---|---|---|
| A / AAAA | 300-3600 сек | 5 мин - 1 час |
| MX | 3600-86400 сек | 1 - 24 часа |
| NS | 86400 сек | 24 - 48 часов |
| TXT | 300-3600 сек | 5 мин - 1 час |
Проверка с разных DNS-серверов
# Google DNS
dig @8.8.8.8 example.com A +short
# Cloudflare DNS
dig @1.1.1.1 example.com A +short
# Quad9 DNS
dig @9.9.9.9 example.com A +short
Онлайн-инструменты проверки распространения:
Чтобы ускорить распространение DNS, уменьшите значение TTL перед внесением изменений (например, 300 секунд). После завершения изменений можно снова увеличить TTL.
Очистка DNS-кеша
Очистка кеша операционной системы
# Linux (systemd-resolved)
sudo systemd-resolve --flush-caches
sudo resolvectl flush-caches
# macOS
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Windows
ipconfig /flushdns
Очистка кеша DNS-сервера
# Очистка кеша BIND named
sudo rndc flush
# Для определённой зоны
sudo rndc flushname example.com
# Очистка кеша Unbound
sudo unbound-control flush_zone example.com
DNS-кеш браузера
Для очистки DNS-кеша в Chrome:
chrome://net-internals/#dns → Clear host cache
Распространённые проблемы DNS и решения
1. NXDOMAIN (Домен не найден)
$ dig nonexistent.example.com
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN
Причины:
- Доменное имя написано с ошибкой
- DNS-запись ещё не создана
- Срок действия домена истёк
Решение:
# Проверьте WHOIS-информацию домена
whois example.com
# Проверьте серверы имён
dig example.com NS +short
# Запросите с авторитетного NS
dig @ns1.example.com example.com A
2. SERVFAIL
Причины:
- Сервер имён недоступен
- Ошибка проверки DNSSEC
- Повреждённый файл зоны
Решение:
# Проверьте доступность сервера имён
dig @ns1.example.com example.com A
# Проверьте статус DNSSEC
dig example.com +dnssec
# Попробуйте другой резолвер
dig @1.1.1.1 example.com A
3. Возвращается неправильный IP-адрес
Решение:
# Очистите кеш
sudo systemd-resolve --flush-caches
# Запросите напрямую с авторитетного NS
dig @ns1.example.com example.com A +short
# Проверьте путь разрешения с помощью trace
dig example.com +trace
4. Медленное разрешение DNS
Решение:
# Измерьте время ответа DNS
dig example.com | grep "Query time"
# Сравните разные DNS-серверы
for dns in 8.8.8.8 1.1.1.1 9.9.9.9; do
echo "$dns: $(dig @$dns example.com +short +stats | grep 'Query time')"
done
Для постоянных настроек DNS используйте конфигурацию systemd-resolved или NetworkManager вместо прямого редактирования /etc/resolv.conf.
Скрипт диагностики DNS
#!/bin/bash
DOMAIN="example.com"
echo "=== Диагностика DNS: $DOMAIN ==="
echo -e "\n[1] Серверы имён:"
dig $DOMAIN NS +short
echo -e "\n[2] A-запись:"
dig $DOMAIN A +short
echo -e "\n[3] MX-запись:"
dig $DOMAIN MX +short
echo -e "\n[4] TXT-записи:"
dig $DOMAIN TXT +short
echo -e "\n[5] Проверка распространения:"
for dns in 8.8.8.8 1.1.1.1 9.9.9.9; do
result=$(dig @$dns $DOMAIN A +short)
echo " $dns → $result"
done
echo -e "\n=== Проверка завершена ==="
Заключение
Проблемы DNS — одни из самых распространённых в управлении серверами. Эффективно используя инструменты dig и nslookup, вы можете быстро диагностировать проблемы, отслеживать процессы распространения и решать проблемы с кешем. Не забывайте снижать значения TTL перед изменениями DNS и проверять с разных DNS-серверов после изменений.
Связанные статьи
Проблема SSH-подключения: не могу подключиться к серверу
Руководство по решению проблем SSH-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для SSH-порта и шаги по устранению неполадок.
Проблема RDP-подключения: не могу подключиться к Windows Server
Руководство по решению проблем RDP-подключения: правила файрвола Path.net, Default Block, создание правила фильтрации для порта RDP и шаги по устранению неполадок.
Как провести MTR-тест и отправить результаты в поддержку
Руководство по сетевому тестированию с помощью WinMTR и Linux MTR, создание правила фильтрации ICMP и отправка результатов в службу поддержки. Диагностика потери пакетов.