如何为特定网络接口保留“systemd-resolve”配置?

qua*_*uat 8 networking linux dns ubuntu resolv.conf

我已经将我的 Ubuntu 桌面升级到 Bionic Beaver,它切换到systemd-resolve。随着这一变化,LXD DNS 解析停止工作。

为了使 LXD 容器可被发现,我可以运行以下命令。注意,IP 10.78.38.1lxdbr0网桥的 IP 。

$ sudo systemd-resolve --interface lxdbr0 --set-dns 10.78.38.1 --set-domain lxd
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以通过名称发现 LXD 容器,配置如下所示。

$ systemd-resolve --status
.
.
.
Link 10 (lxdbr0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.78.38.1
          DNS Domain: lxd
.
.
.
Run Code Online (Sandbox Code Playgroud)

但是,在系统重新启动后,此配置将消失。

$ systemd-resolve --status
.
.
.
Link 10 (lxdbr0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
.
.
.
Run Code Online (Sandbox Code Playgroud)

为了使上述内容持久化,我查看了systemd-resolve联机帮助页http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html。它建议创建一个/etc/systemd/resolved.conf.d/lxd.conf文件,但没有可用的参数允许我针对一个特定的 NIC 进行此类配置。

小智 5

Systemd-networkd将网络配置存储在(至少)三个目录中,也许更多。与您最相关的一项是:

/etc/systemd/network/ 
Run Code Online (Sandbox Code Playgroud)

(它覆盖了其他两个,即/lib/systemd/network/run/systemd/network)。

创建一个/etc/systemd/network类似于此的文本文件:

[Match]
Name=enp0s4

[Network]
DHCP=yes
DNS=192.168.1.1
Run Code Online (Sandbox Code Playgroud)

只要文件以 .network 结尾,它就可以有任何名称。我的叫做enp0s4.network。获得正确的内容至关重要。如果你弄错了,不好的事情就会发生,比如你的网络停止工作,至少在那个界面上,直到你恢复工作配置。这并不容易——我把我的搞砸了,我花了一个小时才把它整理好。

有关如何设置桥接的示例,请从此处阅读:

man systemd.network |grep -A 42 "Example 3"
Run Code Online (Sandbox Code Playgroud)

那里给出的示例加上我的代码片段可以设置:

Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.78.38.1
Run Code Online (Sandbox Code Playgroud)

不确定 DNS 域的语法是什么,应该可以,手册页长 30 页!如果可以,请跳过它——试图Domain=搞砸我的系统。所以找到正确的语法或者不要把它放进去,除非你能恢复。

以下是我使用的参考资料:

如何检查网络是否正在运行:https : //superuser.com/questions/1187633/how-to-debug-systemd-networkd?rq=1#comment1807294_1187633

如果禁用如何启用:https : //askubuntu.com/posts/681768/revisions

重启systemd-resolved无需重启:

sudo systemctl restart systemd-resolved
Run Code Online (Sandbox Code Playgroud)

仅供参考:有一种方法可以告诉 systemd 让网络管理器处理接口,以及让它不受管理并使用/etc/resolv.conf. 但如果我在你的鞋子里,我会让它正常工作。


ctx*_*ctx 5

这会破坏您lxdbr0但正确的配置systemd-resolved

根据链接的手册页man 8 systemd-resolved.serviceman 5 systemd.network,您必须使用以下位置的每个链接配置文件/etc/systemd/network

联系的 DNS 服务器由 中的全局设置/etc/systemd/resolved.conf、文件中的每个链接静态设置/etc/systemd/network/*.network、通过 DHCP 接收的每个链接动态设置以及其他系统服务提供的任何 DNS 服务器信息确定。

为了使您的配置持久化,您必须创建该文件/etc/systemd/network/lxdbr0.network

[Match]
Name=lxdbr0

[Network]
DNS=10.78.38.1
Domains=lxd
Run Code Online (Sandbox Code Playgroud)