Как правильно вносить изменения в /etc/resolv.conf при наличии /etc/resolv.conf.d?

Вопрос или проблема

В старые времена resolv.conf был статическим, и вы редактировали его сами.

Позже клиент DHCP переписывал его, используя некоторые статические записи и то, что он получал от аренды DHCP.

В наши дни некоторые дистрибуции, такие как моя (Linux Mint 18.1), имеют механизм /etc/resolv.conf.d с несколькими подкаталогами скриптов, и, честно говоря, я не могу разобрать это.

Каковы правильные способы, чтобы…

  • указать, хочу ли я использовать или не использовать DNS-серверы, полученные в аренде DHCP?
  • добавить фиксированные записи в resolv.conf, всегда или в качестве резервного варианта, когда нет имен сервера, полученного по аренде DHCP?
  • принимать решения относительно относительного порядка в файле?

Я не против написать несколько своих скриптов, если потребуется, я просто не хочу “работать против” существующего механизма или выполнять двойную работу.

Ответ прост. Папка resolv.conf.d находится в /etc/resolvconf/ и содержит файлы head/base/original и tail. Каждый из них, если отредактирован, обновит файл resolv.conf в /etc/

Допустим, вы хотите поместить какой-то статический DNS-адрес в начало resolv.conf в /etc/ (потому что при каждой перезагрузке он автоматически сбрасывается до своих настроек по умолчанию), вам нужно отредактировать файл head в /etc/resolvconf/resolv.conf.d/ и ввести, например:

nameserver 1.1.1.1
nameserver 1.0.0.1

после этого перезапустите службу resolvconf, используя:

sudo service resolvconf restart

теперь откройте resolv.conf в /etc/ и вы увидите новые изменения.

То же самое применяется, если вы хотите поместить материал в конец файла, вы используете tail вместо head в /etc/resolvconf/resolv.conf.d/

P.S: это 100% протестировано и работает в Ubuntu и Debian

Редактировать: Я уже ответил на последние два пункта вашего вопроса, теперь относительно первого пункта, который говорит о том, как не использовать DNS-адрес, предоставленный DHCP. Это действительно зависит от того, какое программное обеспечение/пакет DNS у вас установлено, поэтому я рекомендую вам проверить этот пост, и убедитесь, что вы прочитали тот, который ниже, в случае, если у вас есть dnsmasq.

Resolv.conf и какой-либо механизм, подобный этому, существуют уже много лет. Существует командная строка dhclient, resolvconf, которая управляет этим файлом, однако в последние годы Linux вводит новый интерфейс для настройки NetworkManager под названием nmcli. Это богатая команда для управления каждой постоянной сетевой настройкой (не во время выполнения). вы можете использовать что-то вроде:

$ nmcli connection modify eth0 ipv4.dns 8.8.8.8

Эта команда перезапишет файл resolv.conf. В RHCA рекомендуется не редактировать resolv.conf вручную, а использовать его команды. Что касается директории resolvconf, о которой вы упомянули, могу сказать, что некоторые службы могут иметь свои собственные настройки для DNS, поэтому они используют свои собственные настройки, такие как OpenVpn. Вы также можете проверить файл /etc/nsswitch для получения дополнительной информации о разрешении.

/etc/resolv.conf изменяется утилитой resolvconf. Согласно man-у resolvconf, это происходит следующим образом:

Обычно программа resolvconf запускается только программами конфигурации сетевых интерфейсов, такими как ifup(8), ifdown, NetworkManager(8), dhclient(8) и pppd(8); а также локальными серверами имён, такими как dnsmasq(8). Эти программы получают информацию о серверах имён из какого-то источника и передают ее в resolvconf.

Программа ifup может использоваться для настройки сетевых интерфейсов в соответствии с настройками в /etc/network/interfaces. Чтобы ifup передавал информацию о серверах имён в resolvconf при настройке интерфейса, администратор должен добавить строки опций dns- в соответствующий интерфейс в interfaces(5). Принимаются следующие имена опций: dns-nameserver, dns-search и dns-sortlist.

Чтобы добавить IP-адрес сервера имен, добавьте строку опции, состоящую из dns-nameserver и адреса. Для добавления нескольких адресов серверов имен, добавьте несколько таких строк dns-nameserver.

 dns-nameserver 192.168.1.254
 dns-nameserver 8.8.8.8

Таким образом, видимо, чтобы правильно изменить файл /etc/resolv.conf, все, что вам нужно сделать, это добавить запись dns-nameserver X.X.X.X в ваш файл /etc/network/interfaces и затем запустить ifup <interface_name>.

Ответ или решение

Чтобы внести изменения в файл /etc/resolv.conf, учитывая наличие механизма /etc/resolvconf/resolv.conf.d, необходимо понимать, что файл /etc/resolv.conf теперь динамически обновляется различными сервисами, такими как NetworkManager, dhclient и другими. Вот пошаговое руководство, как правильно вносить изменения с использованием каталога /etc/resolvconf/resolv.conf.d:

Описание проблемы

Система управления DNS в Linux значительно изменилась со временем. Раньше вы могли изменять /etc/resolv.conf вручную, но сегодня эта задача часто автоматизирована через клиент DHCP и утилиты типа resolvconf. На системах, подобных Linux Mint 18.1, используется механизм /etc/resolvconf/resolv.conf.d, который может сбивать с толку.

Решение

Добавление постоянных DNS-серверов

  1. Редактирование файла "head":
    Чтобы добавить статические адреса DNS-серверов в начало файла /etc/resolv.conf, отредактируйте файл head в каталоге /etc/resolvconf/resolv.conf.d/. Например:

    echo -e "nameserver 1.1.1.1\nnameserver 1.0.0.1" | sudo tee /etc/resolvconf/resolv.conf.d/head
  2. Перезапуск службы resolvconf:
    После внесения изменений перезапустите службу, чтобы обновить настройки:

    sudo service resolvconf restart

Использование/неиспользование DNS от DHCP

Чтобы контролировать использование DNS-серверов, предоставленных через DHCP, можно настроить dhclient или NetworkManager. Например, для NetworkManager используйте nmcli для управления настройками DNS:

nmcli connection modify <connection-name> ipv4.ignore-auto-dns yes
nmcli connection modify <connection-name> ipv4.dns "8.8.8.8 8.8.4.4"

Установка порядка записей

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

  • head: записи в начале файла.
  • tail: записи в конце файла.

Таким образом, вы можете контролировать приоритеты и порядок использования DNS.

Дополнительные рекомендации

  • Конфигурация NetworkManager: Если используется NetworkManager, предпочтительно управлять настройками DNS через его интерфейсы (nmcli), чтобы избежать проблем с другими конфигураторами сети.
  • Консультация справочных материалов: Ознакомьтесь с документацией используемых программ, например, man resolvconf, чтобы получить более углубленное понимание.

Заключение

Понимание взаимодействия между различными системными компонентами и правильная настройка конфигурируемых файлов позволит вам эффективно управлять DNS-сервером в системах Linux. Воспользуйтесь приведенными рекомендациями для минимизации проблем и оптимизации конфигурации сети.

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

Капча загружается...