Ошибка «E: Could not resolve host» при выполнении apt update сигнализирует о проблемах с разрешением DNS в Linux. Эта статья поможет системным администраторам и пользователям разобраться, как быстро вернуть работоспособность пакетного менеджера.
Почему появляется E: Could not resolve host
- Неправильная настройка DNS-серверов, указанных в
/etc/resolv.conf. - Отсутствие или некорректная работа сетевого подключения (отсутствует интернет или роутинг).
- Проблемы с локальным DNS-кешем или конфликт с DHCP-клиентом, перезаписывающим настройки.
- Неправильно настроенный файл
/etc/hostsили некорректно введённый адрес зеркала в/etc/apt/sources.list.
Пошаговое решение
1. Проверка сетевого подключения
ip a
ping -c 3 8.8.8.8Команда ip a покажет активные интерфейсы и их состояние. ping 8.8.8.8 проверит доступность внешнего IP (Google DNS). Если пинг не проходит, проблема в сети, а не в DNS.
2. Проверка и исправление содержимого /etc/resolv.conf
cat /etc/resolv.confФайл должен содержать строки вида nameserver 8.8.8.8 или иных валидных DNS-серверов. Если нет — исправьте его:
sudo nano /etc/resolv.confДобавьте, например:
nameserver 8.8.8.8
nameserver 1.1.1.1Если файл автоматически перезаписывается (например, DHCP или systemd-resolved), используйте альтернативные методы ниже.
3. Проверка работы systemd-resolved (если используется)
systemctl status systemd-resolved
systemd-resolve --statusЕсли демон отключен, включите и запустите:
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolvedПроверьте, что /etc/resolv.conf — это символическая ссылка на /run/systemd/resolve/stub-resolv.conf:
ls -l /etc/resolv.confЕсли нет, исправьте:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf4. Очистка локального DNS кеша
В зависимости от используемого демона (systemd-resolved, dnsmasq и др.):
sudo systemd-resolve --flush-caches
# или
sudo /etc/init.d/dns-clean restartПосле этого попробуйте снова обновить пакеты.
5. Проверка и исправление sources.list
cat /etc/apt/sources.listИщите неправильные или устаревшие адреса репозиториев. Правильный пример для Ubuntu:
deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverseИсправьте адреса и сохраните файл.
6. Проверка /etc/hosts
cat /etc/hostsУбедитесь, что в файле нет строк с некорректными или конфликтующими записями, особенно для локального имени хоста.
7. Перезапуск сетевых сервисов
sudo systemctl restart networking
sudo systemctl restart NetworkManagerПерезапускает сетевые службы, применяя новые настройки.
Альтернативные методы
Использование статического DNS в NetworkManager
nmcli device show
nmcli connection modify ipv4.dns "8.8.8.8 1.1.1.1"
nmcli connection up Замените на имя вашего сетевого интерфейса (например, eth0 или wlan0). Это предотвратит перезапись /etc/resolv.conf.
Временное отключение IPv6 (если DNS затрудняется из-за него)
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1Если это помогает, можно добавить настройки в /etc/sysctl.conf для постоянной деактивации.
Проверка результата
ping -c 3 archive.ubuntu.com
sudo apt updateПинг по имени хоста должен успешно пройти, и apt update не должен выдавать ошибку «Could not resolve host».
Как избежать в будущем
- Используйте правильные репозитории и зеркала.
- Следите за целостностью и содержимым
/etc/resolv.conf. - Настройте network manager, чтобы он корректно управлял DNS.
- При использовании DHCP проверяйте, что выдается валидный DNS.
FAQ
Почему возникает ошибка именно при apt update?
Потому что apt пытается связаться с репозиториями по имени хоста, а система не может разрешить эти имена в IP из-за DNS-проблем.
Можно ли использовать публичные DNS-сервера вместо системных?
Да, можно временно поставить 8.8.8.8 или 1.1.1.1 в /etc/resolv.conf, но нужно убедиться, что они не будут перезаписаны.
Что делать, если /etc/resolv.conf постоянно сбрасывается?
Используйте настройку DNS через NetworkManager или systemd-resolved, либо сделайте символическую ссылку на правильный файл.
Смотрите также: Как настроить источники обновлений в Ubuntu и Debian