Файл /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
Подробности смотрите в статье «Как узнать, какой процесс изменяет файл».
Связанные статьи:
- Как поменять настройки хотспота в NetworkManager (58.9%)
- Как запретить NetworkManager управлять определённым интерфейсом? (РЕШЕНО) (58.9%)
- Управление соединениями VPN в Cinnamon (58.9%)
- Управление соединениями VPN в Xfce (58.9%)
- Управление соединениями VPN в GNOME 3 (58.9%)
- Как с помощью PhantomJS отправить POST запрос и получить содержимое страницы (RANDOM - 50%)
Полезная статья, спасибо. Но, к сожалению, есть проблема: даже при описанной в статье конфигурации NetworkManager изменяет DNS при кабельном подключении PPPoE – я в поиске решения.
Приветствую! Я столкнулся с похожей проблемой, NetworkManager’у запрещено менять настройки DNS, а они меняются. Я дополнил статью новым решением, как заблокировать настройки DNS от изменения, а также информацией о том, как узнать, какая программа меняет файл.
Спасибо, полезно!