#Что означает ошибка
DNS-серверы сбрасываются после перезагрузки
Файл /etc/resolv.conf постоянно перезаписывается: ваши DNS-серверы пропадают после перезагрузки или смены сети. Файл генерируется сетевыми службами (NetworkManager, systemd-resolved, dhclient, resolvconf), поэтому ручные правки исчезают.
Правильное решение — настроить DNS в той службе, которая управляет файлом.
Определите её по ссылке и заголовку файла.
Файл /etc/resolv.conf часто управляется системой (systemd-resolved или NetworkManager), поэтому ручные правки пропадают. Менять DNS нужно в настройках соответствующей службы.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Управляется systemd-resolved | Файл — ссылка. | Настройте DNS через resolved.conf. |
| Управляется NetworkManager | Правки сбрасываются. | Задайте DNS в соединении. |
| DHCP выдаёт свои DNS | Настройки от роутера. | Укажите DNS вручную в соединении. |
| Служба dhclient перезаписывает | Старые системы. | Настройте dhclient.conf. |
#Пошаговое решение
- Определите, кто создаёт файлНа Linux откройте терминал и выполните
ls -l /etc/resolv.conf, затемhead -20 /etc/resolv.confи, если доступно,resolvectl status. Обратите внимание, является ли файл символической ссылкой, и на комментарий о программе, создающей его (NetworkManager, systemd-resolved, resolvconf, WSL). Не редактируйте файл, пока не выясните источник: автоматически управляемые настройки будут перезаписаны при следующем подключении. - Задайте DNS в этой службеСначала посмотрите текущие DNS-серверы через
resolvectl statusили настройки NetworkManager. Изменяйте их в настройках активного подключения, а не в/etc/resolv.conf, если им управляет система. Запишите прежние адреса для отката. - Перезапустите службуПерезапускать службу имеет смысл только после изменения конфигурации конкретного менеджера DNS и при наличии доступа к консоли на случай потери сети. Для systemd-resolved проверьте
systemctl is-active systemd-resolved, затем при необходимостиsudo systemctl restart systemd-resolved; для NetworkManager используетсяsudo systemctl restart NetworkManager, но это может разорвать SSH и все соединения. Это альтернативы, а не две обязательные команды подряд; если/etc/resolv.confсоздаёт WSL или Docker, эти команды не применимы. После действия проверьтеcat /etc/resolv.confиresolvectl status(при наличии). - Проверьте результатВ терминале выполните
ls -l /etc/resolv.confиcat /etc/resolv.conf, запишите расположение файла и адресаnameserver. Затем выполнитеgetent hosts example.comи убедитесь, что возвращается IP-адрес. Переподключите сеть штатным способом и повторите эти проверки: требуемый DNS должен сохраниться. Если адрес снова меняется, значит настройка внесена не в тот менеджер сети; вернитесь к определению владельца файла, а не блокируйте его запись черезchattr +i. - Для WSL и Docker задайте DNS отдельноВ WSL и Docker файл
/etc/resolv.confчасто генерируется автоматически. Сначала определите среду командамиcat /proc/versionиtest -f /.dockerenv && echo Docker; проверьте, кто именно создал файл. Для WSL изменения конфигурации применяют в/etc/wsl.confи после перезапуска экземпляра WSL, для Docker — в настройках DNS контейнера/демона. Используйте документацию вашей версии и сохраняйте исходные значения; не редактируйте общий файл системного DNS наугад. - Показывает, ссылка ли файлLinux · Терминал (Bash)КомандаПоказывает, ссылка ли файл.
ls -l /etc/resolv.conf
#Кто управляет файлом
Выполните ls -l /etc/resolv.conf и head -5 /etc/resolv.conf. Если это ссылка на /run/systemd/resolve/stub-resolv.conf — управляет systemd-resolved; комментарий «Generated by NetworkManager» — NetworkManager; «resolvconf» — пакет resolvconf; «dhclient» — DHCP-клиент.
#Постоянная настройка
systemd-resolved: /etc/systemd/resolved.conf → [Resolve] DNS=1.1.1.1 8.8.8.8 FallbackDNS=9.9.9.9, затем sudo systemctl restart systemd-resolved. NetworkManager: nmcli con mod "имя" ipv4.dns "1.1.1.1 8.8.8.8" ipv4.ignore-auto-dns yes, или /etc/NetworkManager/conf.d/dns.conf с [main] dns=none, если вы хотите управлять файлом сами. dhclient: /etc/dhcp/dhclient.conf → supersede domain-name-servers 1.1.1.1, 8.8.8.8;.
#Фиксация файла
Если нужен статичный файл: отключите службу, перезаписывающую его, удалите ссылку и создайте обычный файл: sudo rm /etc/resolv.conf && printf "nameserver 1.1.1.1\nnameserver 8.8.8.8\n" | sudo tee /etc/resolv.conf. Крайний вариант — sudo chattr +i /etc/resolv.conf (запретить изменения); пользуйтесь им аккуратно: он мешает обновлениям. В Docker/WSL DNS задаётся через --dns и /etc/wsl.conf ([network] generateResolvConf=false).
ls -l /etc/resolv.confresolvectl statussudo nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8" ipv4.ignore-auto-dns yes