#Что означает ошибка
status: SERVFAIL
;; connection timed out; no servers could be reached в dig/nslookup и SERVFAIL означают, что DNS-сервер не отвечает или не может разрешить имя. Это отличается от NXDOMAIN (имя не существует). Определите, виноват ли ваш резолвер, сеть или DNS домена.
Проверьте запрос к разным серверам и сравните результаты.
Это сразу локализует проблему.
SERVFAIL означает, что сервер не смог получить ответ. Проверьте другой DNS-сервер и DNSSEC.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сбой DNS-сервера | Провайдер. | Смените. |
| DNSSEC | Проверка. | Проверьте. |
| Зона | Настройки. | Исправьте. |
| Сеть | Блокировка. | Проверьте. |
#Пошаговое решение
- Определите используемый DNS-серверВ Linux откройте терминал и выполните
resolvectl status, если система использует systemd-resolved; в выводе ищите строкиCurrent DNS ServerиDNS Serversу активного интерфейса. Дополнительно выполнитеcat /etc/resolv.conf, чтобы увидетьnameserver. Адрес127.0.0.53обычно означает локальную заглушку, а не адрес DNS провайдера. Еслиresolvectlнедоступен, проверьте настройки черезnmcli device show(при NetworkManager). Запишите фактический сервер для следующего шага. - Запросите разные серверыОткройте терминал Linux и выполните
resolvectl status(если есть systemd-resolved), затемdig example.com Aиdig @1.1.1.1 example.com Aс тем же именем. Сравните строкиstatusиANSWER SECTION, а также список DNS-серверов. Если внешний DNS отвечает, но системный нет, исследуйте настройки локального разрешения имён; если оба дают NXDOMAIN, проверьте наличие домена. Не меняйте/etc/resolv.confдо выяснения, кто его формирует. - Смените DNS или перезапустите резолверСначала посмотрите текущие DNS-серверы через
resolvectl statusили настройки NetworkManager. Изменяйте их в настройках активного подключения, а не в/etc/resolv.conf, если им управляет система. Запишите прежние адреса для отката. - Проверьте делегирование доменаЕсли SERVFAIL повторяется только для конкретного принадлежащего вам домена, откройте терминал Linux/macOS с установленным
digи выполнитеdig +trace example.com, заменив имя собственным доменом. Просмотрите ответы корневых, доменных и авторитетных серверов по порядку; при явной ошибке делегирования сравните NS у регистратора и в зоне.+traceне проверяет все свойства DNSSEC и может ограничиваться межсетевым экраном; при отсутствии ответов не меняйте NS наугад, а соберите вывод и обратитесь к DNS-провайдеру. Если другие домены тоже дают SERVFAIL, исследуйте свой резолвер, а не делегирование одного домена. - Сравнение ответов DNS-серверовLinux · Терминал (Bash)КомандаСравнение ответов DNS-серверов.
dig example.com @8.8.8.8dig example.com
#Проверка серверов
Какой резолвер используется: resolvectl status или cat /etc/resolv.conf. Спросите разные серверы: dig example.com @1.1.1.1, dig example.com @8.8.8.8, dig example.com @192.168.1.1. Если публичные отвечают, а локальный нет — проблема в локальном резолвере/роутере. Если ответ SERVFAIL у всех, проблема в DNS домена (недоступны NS, DNSSEC): dig +trace example.com, dig example.com +cd (без проверки DNSSEC).
#Исправление локально
Смените DNS: NetworkManager — nmcli con mod "имя" ipv4.dns "1.1.1.1 8.8.8.8" ipv4.ignore-auto-dns yes && nmcli con up "имя". systemd-resolved: sudo systemctl restart systemd-resolved, resolvectl flush-caches. Проверьте, что UDP/TCP 53 не блокируются: nc -zvu 1.1.1.1 53. Отключите VPN или проверьте его DNS. Проверьте файл /etc/hosts на лишние записи.
#DNS домена
Если вы владелец домена, проверьте делегирование: dig NS example.com +short, ответы каждого NS: dig example.com @ns1.provider.ru. Расхождение NS у регистратора и в зоне, истёкший домен, ошибки DNSSEC (устаревший DS) дают SERVFAIL. Проверьте на . После исправления учитывайте TTL кэширования. Для внутренних доменов проверьте условные пересылки (forwarders).
resolvectl statusdig example.com @1.1.1.1dig +trace example.com