Что означает ошибка ENOTFOUND
Ошибка ENOTFOUND (или «DNS-разрешение не удалось») появляется, когда Linux не может преобразовать доменное имя в IP-адрес. Система пытается подключиться к ресурсу, но не находит его адреса, что приводит к отказу в подключении.
$ nslookup example.com
서버: 192.168.1.1
Адрес: 192.168.1.1#53
Не удалось разрешить 'example.com'
Обычно это происходит при загрузке веб-страниц, запуске удалённых команд или работе с сетевыми утилитами. Ошибка не связана с доступностью сервера, а указывает на проблему с процессом разрешения DNS.
Причины возникновения
- Неправильные DNS-серверы в
/etc/resolv.conf(сервер недоступен или не работает). - Повреждённый файл
/etc/resolv.conf(отсутствует строкаnameserverили синтаксис неверный). - Сетевой интерфейс отключён или не имеет корректного IP-адреса.
- Брандмауэр или SELinux блокируют исходящие DNS-запросы (порт 53 UDP/TCP).
- Переполненный DNS-кэш (
systemd-resolved,nscd), содержащий устаревшие записи. - Неправильная конфигурация сетевого менеджера (NetworkManager, systemd-networkd) в контейнерах или виртуальных машинах.
- Файл
/etc/hostsне содержит необходимых хост-энтрий.
Способы решения
Способ 1: Проверка DNS-конфигурации
- Проверить текущие DNS-серверы
Откройте файл
/etc/resolv.confс помощьюcat /etc/resolv.confи убедитесь, что серверы корректны. - Изменить DNS-серверы
Отредактируйте
/etc/resolv.conf(или настройки сетевого менеджера), добавив надёжные серверы, например,nameserver 8.8.8.8. - Применить конфигурацию
Перезапустите сетевые сервисы:
sudo systemctl restart networking(Debian/Ubuntu) илиsudo systemctl restart NetworkManager(Fedora/CentOS). - Проверить устранение ошибки
Выполните
ping google.com, чтобы убедиться, что DNS-разрешение работает.
Способ 2: Сброс DNS-кэша
- Очистить DNS-кэш
Выполните
systemd-resolve --flush-caches, чтобы сбросить локальный кэш resolv. - Перезапустить кэширующие сервисы
Для систем с
nscdиспользуйтеsudo systemctl restart nscd. - Повторно проверить DNS
Запустите
dig google.comи убедитесь, что запросы не завершаются ошибкой.
Способ 3: Использование публичных DNS-серверов
- Добавить публичные DNS-серверы
Редактируя
/etc/resolv.conf, укажите популярные публичные серверы:nameserver 1.1.1.1 nameserver 8.8.8.8 - Проверить доступность
Используйте
nslookup example.com— если запрос успешен, проблема решена. - Синхронизировать с сетевым менеджером (если используется NetworkManager):
sudo nmcli dev set <interface-name> ipv4.dns "1.1.1.1 8.8.8.8"иsudo nmcli dev reapply <interface-name>.
Способ 4: Проверка сетевого интерфейса и брандмауэра
- Убедиться, что интерфейс активен
Выполните
ip addr showи проверьте, что у интерфейса есть IP-адрес. - Проверить брандмауэр (ufw, firewalld, iptables):
sudo ufw status verbose— разрешите исходящий DNS-трафик (allow out on <interface> to any port 53 proto udp).sudo firewall-cmd --list-all— добавьте правила для порта 53.
- Проверить SELinux (если используется):
semanage port -l | grep 53— убедитесь, что DNS-порт разрешён.
Профилактика
- Регулярно обновляйте DNS-серверы в
/etc/resolv.confили настройках сетевого менеджера. - Периодически очищайте кэш (
systemd-resolve --flush-caches,nscd -f). - Следите за правилами брандмауэра, чтобы не блокировать DNS-запросы.
- Ведите резервную копию
/etc/resolv.conf— её можно быстро восстановить после изменений системы. - Используйте надёжные публичные DNS-серверы (Google DNS, Cloudflare) для повышения стабильности разрешений.
Часто задаваемые вопросы
Почему в Linux появляется ошибка DNS-разрешения (ENOTFOUND)?
Как проверить текущие DNS-серверы в системе?
Как быстро сбросить DNS-кэш в современных дистрибутивах Linux?
Какие публичные DNS-серверы можно использовать в качестве альтернативы?
Полезное
Проверить текущие DNS-серверы
Изменить DNS-серверы
Применить конфигурацию
Проверить устранение ошибки
Очистить DNS-кэш
Дополнительные проверки