在我看来,我的 systemd 在启动网络管理器之前启动了 dnsmasq。我该如何确认这一点?我该如何强制 systemd 在启动网络管理器后启动 dnsmasq?
这背后的原因是,正如NetworkManager 未更新 /var/run/networkmanager/resolv.conf,
- 我使用 dnsmasq 作为我的 LAN DNS 服务器,并且
- 我在 NetworkManager 中定义了两个 IP 地址。
当我的系统启动时,我的 dnsmasq 不工作,我发现原因是它根本没有监听我的两个 IP 地址。只有重新启动后,它才开始监听我的两个 IP 地址:
$ lsof -i tcp:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 544 systemd-resolve 13u IPv4 18667 0t0 TCP 127.0.0.53:domain (LISTEN)
dnsmasq 793 dnsmasq 5u IPv4 23719 0t0 TCP localhost.my.box.name:domain (LISTEN)
dnsmasq 793 dnsmasq 7u IPv6 23721 0t0 TCP ip6-localhost:domain (LISTEN)
/etc/init.d/dnsmasq restart
[ ok ] Restarting dnsmasq (via systemctl): dnsmasq.service.
$ lsof -i tcp:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 544 systemd-resolve 13u IPv4 18667 0t0 TCP 127.0.0.53:domain (LISTEN)
dnsmasq 17895 dnsmasq 5u IPv4 601091 0t0 TCP 192.168.0.10:domain (LISTEN)
dnsmasq 17895 dnsmasq 7u IPv4 601093 0t0 TCP 192.168.0.11:domain (LISTEN)
dnsmasq 17895 dnsmasq 9u IPv4 601095 0t0 TCP localhost...
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
# my systemd is not the latest but I think that shouldn't matter:
$ apt-cache policy systemd
systemd:
Installed: 237-3ubuntu10
Candidate: 237-3ubuntu10.9
Version table:
237-3ubuntu10.9 500
500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
*** 237-3ubuntu10 500
500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages
100 /var/lib/dpkg/status
更新:
@heynnema,谢谢你systemd-analyze --no-pager blame
,我已经确认启动顺序符合预期
网络管理器 -> systemd-resolved -> dnsmasq。
所以确实,这是关于 dnsmasq 和 systemd-resolved 互相踩脚趾的问题。我已经添加了DNSStubListener=no
。我现在有两个后续问题。
- 为什么 dnsmasq 可以正常
restart
工作?它的正常工作给我的印象是它们两个都可以正常工作。 - 实际上,我使用了
systemctl stop systemd-resolved
和systemctl disable systemd-resolved
来完全禁用 systemd-resolved,而不是之前只是停止其侦听器。我不知道为什么它在重启后不会继续存在。
答案1
我遇到了同样的问题,但仅限于从 16.04 系统更新到 18.04 的系统。我还使用 dnsmasq 作为我的 LAN DNS 和 DHCP 服务器。
在新安装的 18.04 上,它开箱即用,无需修改/etc/systemd/resolved.conf
(DNSStubListener)。
答案2
未解决漏洞在Ubuntu 18.04。我会向你展示我是如何解决这个问题的。也许其他人有更优雅的解决方案,但我将用自己的解决方案开始行动。
问题在于[单元]指令中的部分After=
必须进行如下修改才能引发dnsmasq.服务启动时未中断:
sed -i 's/After=network.target/After=NetworkManager-wait-online.service/' /lib/systemd/system/dnsmasq.service
测试时我最初尝试过After=NetworkManager.service
这似乎是一个明智的选择。但重启后域名系统启动时仍然出现故障。所以我做了:
systemd-analyze critical-chain
我发现NetworkManager-wait-online.service
开始得更晚。这就是我如何找到适当的相对顺序来提高dnsmasq.服务。如果你偶然发现了这个问题,请告知我——