systemd 在启动网络管理器之前启动 dnsmasq?

systemd 在启动网络管理器之前启动 dnsmasq?

在我看来,我的 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-resolvedsystemctl 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.服务。如果你偶然发现了这个问题,请告知我——

相关内容