zaLinux.ru

Как запретить NetworkManager и другим программам менять файл /etc/resolv.conf


Файл /etc/resolv.conf содержит список DNS серверов, которые используются для преобразования имён хостов в IP адреса.

Программа NetworkManager, которая отвечает за выполнение сетевых подключений, автоматически меняет содержимое этого файла. Замена происходит без уведомления пользователя и может повлечь неприятные последствия — например, вызвать утечку DNS, что негативно скажется на анонимности. Также это может нарушить работу вашего собственного кэширующего DNS сервера.

Кроме варианта вовсе не использовать NetworkManager, можно указать в настройках этой программы запрет на изменение файла /etc/resolv.conf.

Для этого откройте файл /etc/NetworkManager/NetworkManager.conf:

sudo gedit /etc/NetworkManager/NetworkManager.conf

и в группу [main] добавьте строку dns=none. Если группа [main] отсутствует, то добавьте следующие строки:

[main]
dns=none

Перезапустите NetworkManager:

sudo systemctl restart NetworkManager

Сделайте резервную копию файла /etc/resolv.conf:

sudo cp /etc/resolv.conf /etc/resolv.conf.backup

А затем удалите /etc/resolv.conf (это важно, поскольку это может быть ссылка на файл, а не настоящий файл):

sudo rm -f /etc/resolv.conf

И создайте файл /etc/resolv.conf с нужным вам содержимым.


Для NetworkManager сделан запрет менять файл /etc/resolv.conf, но файл /etc/resolv.conf всё равно перезаписывается

К сожалению, кроме NetworkManager другие программы могут перезаписывать файл /etc/resolv.conf, причём делают это молча, не выводя никаких предупреждений.

В моей практике такой программой оказалась create_ap, запущенная без опции --no-dns. Эта программа, либо используемый ей dnsmasq, перезаписывают файл /etc/resolv.conf не выводя никаких предупреждений и не восстанавливая его в исходное состояние.

Можно сделать полный запрет на изменение файла /etc/resolv.conf для всех программ.

Для начала, убедитесь, что это настоящий файл, а не символьная ссылка:

ls -l /etc/resolv.conf

Если это символьная ссылка, удалите её:

sudo rm /etc/resolv.conf

Затем создайте файл /etc/resolv.conf заново, добавив туда нужные вам значения.

Для полного запрета редактирования файла /etc/resolv.conf (даже с правами суперпользователя), выполните команду:

sudo chattr +i /etc/resolv.conf

Если вам понадобится отредактировать этот файл, выполните команду:

sudo chattr -i /etc/resolv.conf

Как узнать, какой процесс изменяет файл /etc/resolv.conf

Установите пакет auditd, затем выполните команды:

sudo auditctl -w /etc/resolv.conf -p wa
sudo systemctl start auditd.service

Для просмотра записей в журнале выполните команду:


sudo ausearch -f /etc/resolv.conf

Подробности смотрите в статье «Как узнать, какой процесс изменяет файл».


Рекомендуемые статьи:

3 Комментарии

  1. Виктор

    Полезная статья, спасибо. Но, к сожалению, есть проблема: даже при описанной в статье конфигурации NetworkManager изменяет DNS при кабельном подключении PPPoE – я в поиске решения.

    1. Alexey (Автор записи)

      Приветствую! Я столкнулся с похожей проблемой, NetworkManager’у запрещено менять настройки DNS, а они меняются. Я дополнил статью новым решением, как заблокировать настройки DNS от изменения, а также информацией о том, как узнать, какая программа меняет файл.

      1. Виктор

        Спасибо, полезно!

Добавить комментарий для Виктор Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *