У меня возникла проблема с DNS, и чтобы сузить круг проблем, мне было предложено вручную настроить параметры DNS на моем компьютере, указав только один DNS-сервер вместо двух, возвращаемых через DHCP, чтобы администраторы сервера могли выяснить, возникает ли моя проблема только на одном DNS-сервере или на обоих.
Однако мне не удалось настроить systemd-resolved таким образом, чтобы он вручную принимал мою конфигурацию DNS.
Я попробовал следующее, но все они по-прежнему отправляли DNS-запросы случайным образом между обоими серверами, даже после перезапуска systemd-networkd
обоих systemd-resolved
:
- Указывая
DNS=1.2.3.4
в[Resolve]
разделе/etc/systemd/resolved.conf
- Указывая
DNS=1.2.3.4
в[Network]
разделе/etc/systemd/network/eth0.conf
(единственный файл в этой папке) - Редактирование
/etc/resolv.conf
и комментирование одного из серверов
Ни одно из этих действий ничего не изменило, resolvectl
оба DNS-сервера по-прежнему отображались как доступные, и когда я проводил тесты, DNS-запросы распределялись между двумя серверами, а не использовались только один указанный мной сервер.
Как мне указать systemd использовать только один указанный мной DNS-сервер и не использовать также серверы, возвращаемые через DHCP?
решение1
Я не пробовал это, но с тех пор обнаружил, что есть возможность игнорировать DNS-серверы, поступающие из ответа DHCP. В .network
файле systemd добавьте раздел DHCP, если его еще нет, и используйте опцию UseDNS
:
[Network]
DNS=8.8.8.8 # Specify your DNS server manually
[DHCPv4]
UseDNS=no # Don't use DNS servers from DHCP
решение2
У меня недостаточно репутации, чтобы комментироватьМалвинныйответ. Хотя его ответ правильный, контейнерам nspawn необходимо указать имя файла, 80-container-host0.network
чтобы переопределить системные настройки по умолчанию с хоста.
Изsystemd-nspawnдокументы:
Обратите внимание, что systemd-networkd.service(8) по умолчанию включает сетевой файл,
/usr/lib/systemd/network/80-container-ve.network
соответствующий интерфейсам на стороне хоста, созданным таким образом, который содержит настройки для включения автоматического предоставления адресов на созданном виртуальном канале через DHCP, а также автоматическую маршрутизацию IP на внешние сетевые интерфейсы хоста. Он также содержит/usr/lib/systemd/network/80-container-host0.network
соответствие интерфейсу на стороне контейнера, созданному таким образом, содержащему настройки для включения назначения адресов на стороне клиента через DHCP. В случае, если systemd-networkd запущен как на хосте, так и внутри контейнера, таким образом, доступна автоматическая IP-связь от контейнера к хосту с последующим подключением к внешней сети.
/etc/systemd/network/80-container-host0.network
:
# https://www.freedesktop.org/software/systemd/man/systemd.network.html#UseDNS=
#
# Disable adding the DNS from DHCP
#
[Match]
Virtualization=container
Name=host0
[Network]
DHCP=ipv4
DNS=
[DHCPv4]
UseDNS=false
решение3
Если вы можете задать статический IP, то вы можете указать DNS-сервер. Попросите администраторов сети дать вам статический IP, который вы можете использовать, и попробуйте его. Не используйте любой IP для этого, вы можете легко получить дубликат.