Ошибка Temporary failure resolving часто встречается при работе с пакетным менеджером apt на Linux. Она указывает на проблемы с разрешением DNS-имен. В этой статье пошагово разберём, почему возникает эта ошибка и как её устранить.
Почему появляется apt temporary failure resolving
- Проблемы с DNS-серверами — отсутствует корректный DNS, либо сервер недоступен.
- Неправильная сетевая конфигурация — отсутствуют настройки IP, шлюза или DNS.
- Перегрузка или сбой службы разрешения имён — например systemd-resolved или NetworkManager.
- Проблемы с файлом /etc/resolv.conf — неправильный или повреждённый файл, указывающий на нерабочие DNS.
Пошаговое решение
1. Проверка сетевого подключения
ip a
ping -c 3 8.8.8.8Команда ip a покажет активные интерфейсы и их IP-адреса. ping 8.8.8.8 проверяет доступность внешнего IP, минуя DNS. Если ответы есть — сеть работает, проблема в DNS.
2. Проверка и корректировка /etc/resolv.conf
cat /etc/resolv.confВывод покажет текущие DNS-серверы. Если там нет строк nameserver с адресами, или на них не отвечает, добавим публичный DNS:
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.4.4" >> /etc/resolv.conf'Эти команды заменяют DNS-серверы на Google Public DNS. Ожидаемый результат — корректно заполненный файл с нужными IP.
3. Проверка служб systemd-resolved или NetworkManager
systemctl status systemd-resolved
nmcli dev show | grep IP4.DNSПервая команда покажет статус службы systemd-resolved. Вторая — настройки DNS от NetworkManager. Если служба неактивна, перезапустите её:
sudo systemctl restart systemd-resolvedПосле этого проверьте /etc/resolv.conf, он может быть символической ссылкой на /run/systemd/resolve/stub-resolv.conf.
4. Обновление символической ссылки resolv.conf (если используется systemd-resolved)
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.confЭта команда создаст правильную ссылку, чтобы DNS-запросы шли через systemd-resolved. После этого можно перезапустить службу и проверить работу DNS.
5. Очистка кеша DNS (если применимо)
sudo systemd-resolve --flush-caches
# или
sudo resolvectl flush-cachesОчистка кеша может помочь, если старые данные мешают разрешению.
6. Проверка файла hosts (обязательно, если DNS не помогает)
cat /etc/hostsУбедитесь, что там нет конфликтующих или неправильных записей для нужных доменов.
7. Проверка DNS с помощью dig или nslookup
dig google.com
nslookup google.comЭти команды покажут конкретные ответы с DNS-сервера. Если они не работают — проблема в DNS или сетевых настройках.
Альтернативные методы
Если после вышеуказанных шагов проблема не решилась, попробуйте:
- Перезапустить NetworkManager:
- Выключить и включить сетевой интерфейс вручную:
- Проверить, нет ли блокировок или firewall, мешающих DNS (например, iptables):
sudo systemctl restart NetworkManagersudo ip link set eth0 down
sudo ip link set eth0 upЗамените eth0 на ваш интерфейс, выводимый из ip a.
sudo iptables -L -nЕсли видите блокирующие правила, временно их отключите для теста.
Проверка результата
ping -c 3 google.com
sudo apt updateЕсли ping google.com работает и sudo apt update не возвращает ошибку Temporary failure resolving, значит проблема решена.
Как избежать в будущем
- Проверьте сетевые настройки после установки или обновления системы.
- Используйте стабильные DNS-сервера (Google, Cloudflare 1.1.1.1).
- Следите за корректностью /etc/resolv.conf, он не должен перезаписываться некорректными сервисами.
- Регулярно проверяйте статус systemd-resolved и NetworkManager.
FAQ
Что делать, если /etc/resolv.conf постоянно перезаписывается?
Это может делать NetworkManager или systemd-resolved. Проверьте их настройки и создайте правильную символическую ссылку.
Можно ли использовать другие DNS-серверы?
Да, например 1.1.1.1 (Cloudflare) или DNS вашего провайдера.
Ошибка возникает только при работе apt, а браузер работает?
Это может быть проблема с chroot, контейнером или ограничениями приложения. Проверьте конфигурацию сети для этих сред.
Смотрите также: устранение ошибок сети в Linux — базовое руководство.