使 systemd-resolved 忽略 DNS 服务器并仅使用我指定的服务器

使 systemd-resolved 忽略 DNS 服务器并仅使用我指定的服务器

我遇到了 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

我还没有尝试过这个,但我发现有一个选项可以忽略来自 DHCP 响应的 DNS 服务器。在 systemd.network文件中,添加 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,否则您很容易会得到重复的 IP。

相关内容