DNS в Linux Linux

Linux: файл resolv.conf постоянно перезаписывается

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Файл /etc/resolv.conf часто управляется системой (systemd-resolved или NetworkManager), поэтому ручные правки пропадают. Ниже — причины и порядок действий от простого к сложному.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Кто управляет файлом
  5. Постоянная настройка
  6. Фиксация файла

#Что означает ошибка

Сообщение
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.

#Пошаговое решение

  1. Определите, кто создаёт файлНа Linux откройте терминал и выполните ls -l /etc/resolv.conf, затем head -20 /etc/resolv.conf и, если доступно, resolvectl status. Обратите внимание, является ли файл символической ссылкой, и на комментарий о программе, создающей его (NetworkManager, systemd-resolved, resolvconf, WSL). Не редактируйте файл, пока не выясните источник: автоматически управляемые настройки будут перезаписаны при следующем подключении.
  2. Задайте DNS в этой службеСначала посмотрите текущие DNS-серверы через resolvectl status или настройки NetworkManager. Изменяйте их в настройках активного подключения, а не в /etc/resolv.conf, если им управляет система. Запишите прежние адреса для отката.
  3. Перезапустите службуПерезапускать службу имеет смысл только после изменения конфигурации конкретного менеджера 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 (при наличии).
  4. Проверьте результатВ терминале выполните ls -l /etc/resolv.conf и cat /etc/resolv.conf, запишите расположение файла и адреса nameserver. Затем выполните getent hosts example.com и убедитесь, что возвращается IP-адрес. Переподключите сеть штатным способом и повторите эти проверки: требуемый DNS должен сохраниться. Если адрес снова меняется, значит настройка внесена не в тот менеджер сети; вернитесь к определению владельца файла, а не блокируйте его запись через chattr +i.
  5. Для WSL и Docker задайте DNS отдельноВ WSL и Docker файл /etc/resolv.conf часто генерируется автоматически. Сначала определите среду командами cat /proc/version и test -f /.dockerenv && echo Docker; проверьте, кто именно создал файл. Для WSL изменения конфигурации применяют в /etc/wsl.conf и после перезапуска экземпляра WSL, для Docker — в настройках DNS контейнера/демона. Используйте документацию вашей версии и сохраняйте исходные значения; не редактируйте общий файл системного DNS наугад.
  6. Показывает, ссылка ли файл
    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).

Linux · Терминал (Bash)КомандаНужен sudo
Определение управляющей службы и постоянная настройка DNS в NetworkManager (замените имя соединения).
ls -l /etc/resolv.conf
resolvectl status
sudo nmcli con mod "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8" ipv4.ignore-auto-dns yes

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.