前情

  • 一天我部署adguardhome服务发现53端口占用了,一番搜索发现是因为ubuntu的一个systemd-resolved服务,它负责DNS解析

解决办法一:直接关闭systemd-resolved

  • 注意:禁用 systemd-resolved 可能会影响 VPN 连接的 DNS 解析。如果 VPN 客户端或 NetworkManager 的 VPN 插件依赖 systemd-resolved 来推送 DNS 设置,禁用后可能需要手动配置 VPN 连接的 DNS。

1.输入:

1
2
systemctl stop systemd-resolved.service
systemctl disable systemd-resolved.service

解决办法二(推荐):禁用 systemd-resolved 的 DNS 存根监听器

1.先创建一个no-stub-listener.conf文件,输入:

1
2
mkdir -p /etc/systemd/resolved.conf.d/
vim /etc/systemd/resolved.conf.d/no-stub-listener.conf

2.写入如下内容:

1
2
3
4
[Resolve]
DNS=180.76.76.76 8.8.8.8
FallbackDNS=1.1.1.1 1.0.0.1
DNSStubListener=no

3、建立 /etc/resolv.conf 的链接

1
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

4、之后重启 systemd-resolved 服务

1
systemctl restart systemd-resolved.service

就解决了

如果打算安装并使用其他的 DNS 解析器(如 dnsmasq、Unbound 或 AdGuard Home),或者希望完全手动控制 DNS 配置,那么完全禁用 systemd-resolved 可能是更干净的选择。

如果只是想释放 53 端口给其他应用程序使用,但同时还想利用 systemd-resolved 来管理上游 DNS 服务器(比如处理从网络连接中获取的 DNS 信息),那么仅禁用其存根监听器是更合适且对系统原有功能影响较小的方案。