![systemd-resolved 中的设置如何影响 netplan 设置?](https://linux22.com/image/919668/systemd-resolved%20%E4%B8%AD%E7%9A%84%E8%AE%BE%E7%BD%AE%E5%A6%82%E4%BD%95%E5%BD%B1%E5%93%8D%20netplan%20%E8%AE%BE%E7%BD%AE%EF%BC%9F.png)
我想确保我的服务器使用 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.9
并FallbackDNS=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)。希望如果其他人遇到这种情况,这个答案将使他们不必进行这些实验。