systemd-resolve 不会将 DNS 请求转发到指定的 DNS 服务器

systemd-resolve 不会将 DNS 请求转发到指定的 DNS 服务器

有人知道 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)。(来自维基百科

相关内容