Systemd-networkd:如何将静态名称服务器条目添加到 DHCP 发现的名称服务器的前面?

Systemd-networkd:如何将静态名称服务器条目添加到 DHCP 发现的名称服务器的前面?

我在 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/network10-

这是我放置的示例配置文件/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)上运行。

相关内容