Temporary failure in name resolution
#Признаки
ping 8.8.8.8 работает, а ping ya.ru выдаёт Temporary failure in name resolution или Name or service not known; браузер пишет, что сервер не найден. Значит, сеть есть, но имена не преобразуются в адреса. В современных дистрибутивах (Ubuntu, Fedora, Arch с включением) за это отвечает systemd-resolved: он слушает локальный адрес 127.0.0.53, а /etc/resolv.conf указывает на него.
#Причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| resolv.conf не ссылается на stubФайл заменён вручную или VPN. | В нём нет 127.0.0.53 либо старый список. | Восстановите ссылку. |
| Служба остановленаОтключена или упала. | status показывает inactive. | enable --now. |
| DNS провайдера не отвечаетСбой DNS на стороне провайдера. | dig @1.1.1.1 работает, а через систему нет. | Укажите публичные DNS. |
| VPN или NetworkManager передаёт неверные серверыПосле подключения VPN. | В resolvectl status лишний DNS. | Отключите VPN и проверьте его настройки. |
| Другой резолвер конфликтуетdnsmasq или unbound на 53 порту. | Порт занят. | Проверьте sudo ss -lunp | grep :53. |
| DNSSEC или DoT мешаетВключён строгий режим. | Ошибки проверки. | Установите DNSSEC=no для проверки. |
#Диагностика
- Проверьте сеть по IPОткройте несколько разных сайтов или сервисов и проверьте, работает ли подключение на другом устройстве в той же сети. Для сравнения переключитесь между Wi-Fi и мобильным интернетом, если это возможно. Если ошибка только на одном устройстве, проверяйте его сетевые настройки; если на всех — роутер или провайдера.
- Отделите сбой DNS от сбоя соединенияВ Linux откройте терминал и сначала выполните
ping -c 3 1.1.1.1: ответы с временем задержки показывают, что внешний IP доступен, а отсутствие ответов ICMP само по себе ещё не доказывает потерю интернета. Затем выполнитеresolvectl query example.com(если используется systemd-resolved) либоgetent hosts example.com. Если IP-подключение работает, а имя не разрешается или появляетсяTemporary failure in name resolution, переходите к проверке службы и DNS-серверов; если не работает и IP, сначала проверьте адрес и маршруты вip -br aиip route. - Проверьте службуВ терминале Linux выполните
systemctl status systemd-resolved --no-pagerи найдите строкуActive:и последние сообщения об ошибке. Если статусfailed, посмотрите подробности:journalctl -u systemd-resolved -b --no-pager | tail -60. Запишите ошибки конфигурации или занятого порта 53, прежде чем что-либо перезапускать. При статусеactive (running)причина может быть в неправильно заданных DNS-серверах, а не в остановке службы. - Посмотрите, что в resolv.confНа Linux в терминале выполните
ls -l /etc/resolv.confиcat /etc/resolv.conf. В первом выводе посмотрите, является ли файл ссылкой, например на/run/systemd/resolve/stub-resolv.conf; во втором — какойnameserverуказан (часто127.0.0.53при работающей локальной заглушке). Если это файл, создаваемый NetworkManager, WSL или контейнером, не заменяйте его системной ссылкой. При неработающей заглушке сравните результатresolvectl statusиsystemctl status systemd-resolved, прежде чем менять настройки DNS. - Посмотрите серверы DNSНа Linux с systemd-resolved откройте терминал и выполните
resolvectl status. Найдите раздел вашего активного интерфейса (его имя видно вip -br link) и строкиDNS ServersиCurrent DNS Server; если DNS не указан или это неожиданный адрес, проверьте настройки именно сетевого менеджера этого интерфейса (NetworkManager/netplan). Затем выполнитеresolvectl query example.com. Успешный IP-ответ говорит, что резолвер работает; еслиresolvectlотсутствует, сначала выясните, не используется ли другой DNS-сервис. - Проверьте запрос напрямуюДля проверки DNS-записи откройте терминал Linux/macOS (
digобычно доступен) и введитеdig example.com A +noall +answer, подставив собственный домен и нужный тип записи. В Windows откройтеcmdи выполнитеnslookup -type=A example.com. Запишите ответ и сервер DNS, выдавший его. При расхождении с ожидаемым значением проверьте у авторитетного NS — иначе неясно, устарел ли кеш или неверна сама зона. - Сбросьте кэшТолько при подозрении на устаревший локальный DNS-кеш и работающем systemd-resolved откройте терминал и выполните
sudo resolvectl flush-caches(в некоторых системах достаточноresolvectl flush-caches). Эта команда очищает локальные DNS-записи, не удаляет файлы и не меняет настройки серверов DNS. Повторитеresolvectl query example.com. Если ответа нет, очистка кеша не поможет: проверьте DNS-серверы и журнал службы. Не удаляйте/etc/resolv.confради очистки кеша. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
В контейнерах и WSL часто используют собственный resolv.conf; там стоит править настройки конкретной среды, а не хоста. Если имя разрешается через dig, а приложение его не видит, проверьте /etc/nsswitch.conf — в строке hosts: должны быть files и resolve (или dns).
#Как понять, кто именно отвечает за DNS
В разных дистрибутивах имена преобразуют разные компоненты, и перед правкой важно понять, какой из них у вас. Выполните readlink -f /etc/resolv.conf: путь /run/systemd/resolve/stub-resolv.conf означает systemd-resolved, /run/NetworkManager/resolv.conf — NetworkManager сам пишет файл, /etc/resolv.conf как обычный файл — ручная настройка или другая служба (dhcpcd, resolvconf). Если используется NetworkManager, DNS для соединения задают командой nmcli connection modify "Имя" ipv4.dns "1.1.1.1 8.8.8.8" ipv4.ignore-auto-dns yes, затем nmcli connection up "Имя". Список соединений показывает nmcli connection show. На серверах Ubuntu с netplan DNS указываются в /etc/netplan/*.yaml в разделе nameservers: addresses: [1.1.1.1, 8.8.8.8], а применяются командой sudo netplan apply. Правьте только тот источник, который реально управляет настройкой, иначе ваши изменения будут затираться при следующем подключении.