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

tek*_*aul 5 networking dns systemd

有人知道 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
Run Code Online (Sandbox Code Playgroud)

但是 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
...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我试过弹跳服务器,刷新并手动设置服务器

systemd-resolve --flush-caches
systemd-resolve --set-dns=192.168.1.30 --interface=enp0s31f6
Run Code Online (Sandbox Code Playgroud)

我可以chattr +i /etc/resolv.conf重新获得对 DNS 的控制,但是很高兴知道为什么 systemd 不起作用,因为我失去了 DHCP 的好处。

tek*_*aul 3

看起来这是设计使然。Pottering通过一个 wont-fix解决了这个问题https://github.com/systemd/systemd/issues/2514 。

dig @127.0.0.53 shadowbox
Run Code Online (Sandbox Code Playgroud)

systemd-resolved不支持 DNS 上的简单名称,仅支持 FQDN,并忽略搜索指令。


Bas*_*ack 0

添加特定上游:

  • 在 /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/network/*.network匹配的文件)中,指定使用选项从 DHCP 服务器获取本地 DNS 服务器地址DHCP=

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

还要确保 resolvconf 不会干扰:

systemd-resolved 将使用 /etc/resolv.conf 与网络管理器一起开箱即用。不需要特殊配置,因为 systemd-resolved 将通过 /etc/resolv.conf 符号链接来检测。systemd-networkd 或 NetworkManager 就是这种情况。

但是,如果 DHCP 和 VPN 客户端使用 resolvconf 程序来设置名称服务器和搜索域(有关使用 resolvconf 的软件列表,请参阅 openresolv#Users),则需要附加软件包 systemd-resolvconf 来提供 /usr/bin/ resolvconf 符号链接。注意:systemd-resolved 的 resolvconf 接口有限,可能不适用于所有客户端,请参阅resolvectl(1) 了解更多信息。(来自维基百科