Вопрос или проблема
Я использую Fedora 36 как свой повседневный рабочий компьютер, и я пытаюсь сделать что-то, что, как мне казалось, довольно простое, но я не могу найти другого человека в сети, который предоставлял бы правильную конфигурацию для этого.
В основном, все в заголовке: я хочу найти правильную конфигурацию systemd-resolved
, чтобы использовать свой локальный сервер Bind в качестве DNS (пока ничего сложного), но также запасной вариант для любого DNS, предоставленного DHCP.
Что я пробовал до сих пор, так это заставить NetworkManager
предоставить мой локальный экземпляр Bind в DNS, предоставленном DHCP, в первую очередь, с помощью следующей конфигурации:
# /etc/dhcp/dhclient.conf
prepend domain-name-servers 127.0.0.1;
require subnet-mask, domain-name-servers;
# /etc/NetworkManager/conf.d/dhcp-client.conf
[main]
dhcp=dhclient
Но это не работает. systemd-resolved
по-прежнему запрашивает DNS, предоставленный DHCP, прежде чем обратиться к моему локальному серверу Bind.
Я нашел конфигурацию systemd-resolved
, которая запрашивает мой локальный сервер Bind:
# /etc/systemd/resolved.conf
DNS=127.0.0.1 ::1
Domains=~.
Но я не уверен, что это запасной вариант для DNS, предоставленного DHCP.
Если вы запускаете свой собственный сервер имен, я на самом деле предлагаю полностью отключить systemd-resolved
(известно, что он ломается с некоторыми функциями DNS, такими как DNSSEC).
systemctl disable systemd-resolved
systemctl stop systemd-resolved
systemctl mask systemd-resolved
Затем вы можете контролировать свой файл resolv.conf или сделать его основанным на DHCP:
rm -f /etc/resolv.conf
ln -s /run/NetworkManager/resolv.conf /etc/resolv.conf
Ответ или решение
Для настройки systemd-resolved
на использование вашего локального сервера BIND в качестве первичного DNS-сервера с резервным разрешением на DNS, предоставленный DHCP, выполните следующие шаги. В данной инструкции рассматриваются настройки для системы Fedora 36.
Шаг 1: Настройка DHCP-клиента
Первым делом убедитесь, что ваш DHCP-клиент правильно настроен. Мы будем использовать dhclient
для этого. Измените конфигурацию файла /etc/dhcp/dhclient.conf
, чтобы включить локальный DNS-сервер в первую очередь:
# /etc/dhcp/dhclient.conf
prepend domain-name-servers 127.0.0.1;
require subnet-mask, domain-name-servers;
Эта конфигурация заставит dhclient
добавлять ваш локальный BIND на первое место в списке DNS-серверов, когда он получает информацию от DHCP.
Шаг 2: Настройка NetworkManager
После этого вам нужно убедиться, что NetworkManager
использует dhclient
. Для этого создайте или измените файл конфигурации /etc/NetworkManager/conf.d/dhcp-client.conf
со следующим содержимым:
[main]
dhcp=dhclient
Эти действия разрешают NetworkManager
управлять конфигурацией DHCP через dhclient
.
Шаг 3: Настройка systemd-resolved
Теперь важно настроить systemd-resolved
, чтобы он корректно обрабатывал DNS-запросы. Откройте или создайте файл /etc/systemd/resolved.conf
и добавьте следующее:
[Resolve]
DNS=127.0.0.1
FallbackDNS=
Domains=~
Обратите внимание, что поле FallbackDNS
оставлено пустым. Это важно, потому что предполагается, что ваш локальный сервер BIND будет обрабатывать запросы. Поэтому в случае сбоя локального DNS (например, если BIND не работает), DNS-запросы будут использоваться в resolv.conf
, который создается NetworkManager
, предоставляя доступ к DHCP-серверам.
Шаг 4: Перезапуск служб
Теперь, когда все настройки завершены, выполните следующие команды для перезапуска служб и применения конфигурации:
sudo systemctl restart NetworkManager
sudo systemctl restart systemd-resolved
Шаг 5: Проверка конфигурации
Чтобы убедиться, что DNS-запросы обрабатываются правильно, выполните команду:
systemd-resolve --status
Вы должны увидеть, что 127.0.0.1
(ваш локальный BIND) отображается как DNS-сервер, и если он недоступен, система будет обращаться к серверу DNS, предоставленному по DHCP.
Замечания
Если вы столкнетесь с проблемами или конфликтами между systemd-resolved
и вашим локальным сервером BIND, вы можете рассмотреть возможность отключения systemd-resolved
и управления файлом resolv.conf
напрямую:
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl mask systemd-resolved
sudo rm -f /etc/resolv.conf
sudo ln -s /run/NetworkManager/resolv.conf /etc/resolv.conf
Заключение
Теперь вы настроили systemd-resolved
так, чтобы он использовал локальный сервер BIND в первую очередь с резервным разрешением от DHCP. Это обеспечит наиболее быстрый и надежный способ обработки DNS-запросов на вашем рабочем столе Fedora 36. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их.