有人知道 systemd-resolve voodo 如何工作吗?
192.168.1.30
是我的网络的正确 DNS 服务器,由 DHCP 返回。
/etc/resolv.conf
指着127.0.0.53
Systemd 声称正在使用正确的服务器。
systemd-resolve --status | grep "DNS Servers"
192.168.1.30
但 dig 表示它没有转发请求如果我指定服务器我可以解析shadowbox
dig @192.168.1.30 shadowbox
; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.30 shadowbox
...
;; ANSWER SECTION:
shadowbox. 60 IN A 192.168.1.34
...
systemd-resolve 无法
dig @127.0.0.53 shadowbox
; <<>> DiG 9.16.1-Ubuntu <<>> @127.0.0.53 shadowbox
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 60161
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;shadowbox. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Jun 07 14:00:12 CEST 2020
;; MSG SIZE rcvd: 38
我尝试过重启服务器、刷新acashed并手动设置服务器
systemd-resolve --flush-caches
systemd-resolve --set-dns=192.168.1.30 --interface=enp0s31f6
我可以chattr +i /etc/resolv.conf
重新获得对 DNS 的控制权,但如果能知道 systemd 为何不工作就更好了,因为我失去了 DHCP 的好处。
答案1
看起来这是设计使然。Pottering 关闭了该问题https://github.com/systemd/systemd/issues/2514用不习惯修复。
dig @127.0.0.53 shadowbox
systemd-resolved
不支持 DNS 上的简单名称,仅支持 fqdn,并且忽略搜索指令。
答案2
正如@teknopaul(2020 年 6 月 9 日 16:55)所暗示的那样,这与默认不解析单标签域名有关。我通过创建/etc/systemd/resolved.conf.d/singlelabel.conf
仅包含以下内容的文件解决了同样的问题
[Resolve]
ResolveUnicastSingleLabel=yes
然后单标签解析与存根解析器一起工作。
PS:在进行此更改之前,存根解析器可以毫无问题地解析我的 LAN 上的大多数单标签名称,这使得这个问题很难确定。
答案3
要添加特定上游:
在 /etc/systemd/resolved.conf 中添加上游 dns
[Resolve] DNS=192.168.1.123
重新开始
service systemd-resolved restart
检查
systemd-resolve --status
全球 DNS 服务器:192.168.1.123
要使用 DHCP 提供的 DNS 服务器(因为您在评论中表示希望它“表现得像正常的一样”):
在本地网络接口的配置文件中(与名称模式匹配的文件/etc/systemd/网络/*.网络)指定使用DHCP=
选项从 DHCP 服务器获取本地 DNS 服务器地址:
[Network]
DHCP=yes
还要确保 resolvconf 不会干扰:
systemd-resolved 可与使用 /etc/resolv.conf 的网络管理器直接配合使用。无需特殊配置,因为 systemd-resolved 可通过跟踪 /etc/resolv.conf 符号链接进行检测。systemd-networkd 或 NetworkManager 也是如此。
但是,如果 DHCP 和 VPN 客户端使用 resolvconf 程序来设置名称服务器和搜索域(请参阅 openresolv#Users 以获取使用 resolvconf 的软件列表),则需要附加包 systemd-resolvconf 来提供 /usr/bin/resolvconf 符号链接。注意:systemd-resolved 具有有限的 resolvconf 接口,可能无法与所有客户端一起使用,有关更多信息,请参阅 resolvectl(1)。(来自维基百科)