systemd-resolved 中的设置如何影响 netplan 设置?

systemd-resolved 中的设置如何影响 netplan 设置?

我想确保我的服务器使用 DNSSEC 和 DNS-over-TLS,因此我转到 /etc/systemd/resolved.conf 并添加以下内容:

[Resolve]
DNS=9.9.9.9
FallbackDNS=149.112.112.112
DNSSEC=true
DNSOverTLS=opportunistic

我使用了 Quad9 的公共 DNS 服务器(9.9.9.9 和 149.112.112.112),它们同时具有 DNSSEC 和 DNSOverTLS。为了检查一切是否正常工作,我重新启动了 systemd(使用systemctl restart systemd-resolved.service),然后运行了systemd-resolve --status。以下是我的输出的相关部分:

Global
    DNS Servers: 9.9.9.9

Link 3 [DEVICE_NAME]
      DNSSEC Setting: yes
    DNSSEC Supported: yes
         DNS Servers: 8.26.56.26
                      8.20.247.20

可以看出,Quad9 DNS 出现在 Global 中,但 DNS 设置仍然/etc/netplan/01-netcfg.yaml出现在 Link 3 下。netplan DNS 服务器是 Comodo 的,截至撰写本文时不支持 DNS-over-TLS 或 DNSSEC。那么为什么 systemd-resolved 说支持 DNSSEC 呢?

无论如何,一个简单的解决方案是更新 01-netcfg.yaml 以使用 Quad9 DNS 服务器,但我不喜欢这样,因为现在有两个地方具有相同的设置,我不确定哪一个(或两个)重要。要理解这一点,我需要了解如果没有本地缓存​​,systemd-resolved 如何执行 DNS 查找。阅读文档似乎意味着它会同时检查全局 DNS 和 netplan DNS。在这种情况下,将 Quad9 同时列为全局 DNS 和 netplan DNS 不会导致重复查找吗?

那么,通过注释掉DNS=9.9.9.9FallbackDNS=149.112.112.112重新添加 solved.conf 来彻底删除全局 DNS 是否更好?或者删除 01-netcfg.yaml 中声明的 DNS 是否更好(我不知道如何做或是否可行)?

答案1

我决定进行一些实验来了解 systemd 的行为。我首先启动,sudo tcpdump -i [DEVICE_NAME] port not 22以便可以监控所有网络流量(端口 22 上的 ssh 会话除外)。在另一个 ssh 终端上,我执行了nslookup example.com,每次使用不同的网站,这样它就不会利用其缓存。以下是在以下设置下的结果:

设置 1(不同的全局和设备 DNS 服务器)

已解析的配置文件

DNS=9.9.9.9
FallbackDNS=149.112.112.112

01-netcfg.yaml

[DEVICE_NAME]:
...
    nameservers:
        addresses: [8.26.56.26, 8.20.247.20]

结果:

... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (63)
... [SERVER_NAME] > ns1.recursive.dnsbycomodo.com.domain ... A? [EXAMPLE.COM] (63)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] (56)
... [SERVER_NAME] > dns9.quad9.net.domain ... SOA? [EXAMPLE.COM] (63)
... ns1.recursive.dnsbycomodo.com.domain > [SERVER_NAME] ... A [IP_ADDRESS] (108)
... [SERVER_NAME] >  ns1.recursive.dnsbycomodo.com.domain ... SOA? [EXAMPLE.COM] (63)
...

这些只是前几行,还有更多请求,但可以看出,systemd-resolve 正在从全局(Quad9)和设备(Comodo)DNS 服务器请求记录。由于这是重复活动,我注释掉了设备名称服务器以查看会发生什么。

设置 2(全局且无设备 DNS 服务器)

已解析的配置文件

DNS=9.9.9.9
FallbackDNS=149.112.112.112

01-netcfg.yaml

[DEVICE_NAME]:
...
    # nameservers:
        # addresses: [8.26.56.26, 8.20.247.20]

结果:

... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] (52)
... [SERVER_NAME] > dns9.quad9.net.domain ... SOA? [EXAMPLE.COM] (59)
...

这样就好多了。这次它只向全局 DNS 服务器 (Quad9) 发出请求,并且没有错误。现在,如果我将 Quad9 同时设置为我的全局和设备 DNS 服务器,会发生什么情况?

设置 3(相同的全局和设备 DNS 服务器)

已解析的配置文件

DNS=9.9.9.9
FallbackDNS=149.112.112.112

01-netcfg.yaml

[DEVICE_NAME]:
...
    nameservers:
        addresses: [9.9.9.9, 149.112.112.112] #changed this

结果:

... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (59)
... [SERVER_NAME] > dns9.quad9.net.domain ... A? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] A [2nd IP_ADDRESS] RRSIG (363)
... [SERVER_NAME] > dns9.quad9.net.domain ... DNSKEY? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... A [IP_ADDRESS] A [2nd IP_ADDRESS] RRSIG (363)
... [SERVER_NAME] > dns9.quad9.net.domain ... DNSKEY? [EXAMPLE.COM] (59)
... dns9.quad9.net.domain > [SERVER_NAME] ... DNSKEY, DNSKEY, DNSKEY, DNSKEY, RRSIG (1435)
...

继续说,前两个 A? 请求仅相隔几微秒。再往下看,我通常会看到每个记录类型有两个请求,并且通常有两个响应(尽管有时不是)。这表明,即使设备和全局的 IP 地址相同,它也会分别处理它们并两次请求记录的 DNS。所以吸取教训;不要那样做。

根据这些结果,我将删除 01-netcfg.yaml 中的所有 DNS 声明,并仅依赖全局设置(实验中的设置 2)。希望如果其他人遇到这种情况,这个答案将使他们不必进行这些实验。

相关内容