Вопрос или проблема
В старые времена 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-серверов
-
Редактирование файла "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
-
Перезапуск службы
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. Воспользуйтесь приведенными рекомендациями для минимизации проблем и оптимизации конфигурации сети.