我在 Arch Linux 上使用 systemd 213,并使用 systemd-networkd/resolved 和 DHCP 连接到互联网。我还在 127.0.0.1 上运行缓存 DNS 服务器。我想让这个服务器成为列表中的第一个 DNS 服务器,但我还想使用 systemd-resolved 发现的名称服务器。使用静态 resolv.conf 实际上是不可能的,因为我连接到具有不同 DNS 设置的网络。
我知道我可以在中设置后备 DNS 服务器/etc/systemd/resolved.conf
,但是有没有办法使用 systemd-networkd 来前置我的本地 DNS 服务器是否与 DHCP 发现的 DNS 服务器相同?
编辑:到目前为止我尝试过的
DNS
在文件中添加手动条目.network
会导致该条目被附加到文件末尾而不是添加到文件前面:# This file is managed by systemd-resolved(8). Do not edit. # # Third party programs must not access this file directly, but # only through the symlink at /etc/resolv.conf. To manage # resolv.conf(5) in a different way, replace the symlink by a # static file or a different symlink. nameserver 141.48.3.51 nameserver 141.48.3.17 nameserver 141.48.3.3 # Too many DNS servers configured, the following entries may be ignored nameserver 127.0.0.1
如果我也添加部分,如手册页中所述
UseDNS=true
,DHCP 发现的名称服务器将被忽略,并且[DHCPv4]
systemd.network(5)
仅有的使用了静态 DNS 条目,这也不是我想要的:# This file is managed by systemd-resolved(8). Do not edit. # # Third party programs must not access this file directly, but # only through the symlink at /etc/resolv.conf. To manage # resolv.conf(5) in a different way, replace the symlink by a # static file or a different symlink. nameserver 127.0.0.1
使用 in_addr 表示 DNS 地址只是附加了我的名称服务器,就像使用普通表示一样。
答案1
您是否尝试过添加以下两行:
[Network]
DNS=127.0.0.1
到其中一个文件/etc/systemd/network/*.network
?例如,对于 dhcp 客户端,修改 /etc/systemd/network/80-dhcp.network 以包含以下行:
[Match]
Name=en*
[Network]
DHCP=yes
DNS=127.0.0.1
编辑:
您尝试过 in_addr 表示吗?尝试用 16777343 替换 127.0.0.1。
答案2
诀窍似乎是,您的配置文件在词典上必须比以为前缀的/etc/systemd/network
默认配置排序得更早。请注意,如果您覆盖默认配置,您还必须在接口上启用 DHCP,否则接口将在未配置 DHCP 的情况下启动。/run/systemd/network
10-
这是我放置的示例配置文件/etc/system/network/1-test.network
:
[Match]
Name=ens5
[Network]
DHCP=ipv4
DNS=8.8.8.8
[DHCP]
UseDNS=false
要应用这些设置,请运行systemctl restart systemd-networkd
。这似乎不会关闭接口,只需重新配置它即可。然后您可以使用networkctl status ens5
来验证设置是否已应用。
我验证了这至少可以在 Ubuntu 18.04(bionic)上运行。