Настройте systemd-resolved на использование локального bind в первую очередь и DNS, предоставленный DHCP, в качестве запасного варианта.

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

Я использую 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. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь задавать их.

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

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