-
由
虚拟的现实创建于6月 06, 2025 需要 3 分钟阅读时间
问题简介
一台 photon5 的服务器运行了一段时间后突然无法访问外网,检查发现默认的网关和路由都是正常的,随后检查 DNS 配置发现 /etc/resolv.conf 中 nameserver=127.0.0.53 于是调整为正常的设置例如 119.29.29.29 ,然后测试访问外网是正常的。
当天下午运行了 confluence 的容器,进入页面后台发现无法访问插件库,页面提示网络无法访问。考虑到前面也出现过无法访问外网的情况,遂在主机上检查 resolv.conf 的配置,发现又调整为 127.0.0.53 这个设置了,到底是啥情况?
问题定位
考虑这个问题重复发生应该不是人为调整,系统进程中也未发现异常的进程和现场。应该是系统特性导致,先看看到底是什么原因造成的。
查看 /etc/resolv.conf
先检查 /etc/resolv.con 这个文件,查看这个文件可以看到该文件是个链接文件并且每次开机都会重新生成(因为文件的时间变了)
[10:30:38][root@photon-1:site]# ls -lah /etc/resolv.conf lrwxrwxrwx 1 root root 39 Feb 9 2023 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf [10:35:44][root@photon-1:site]# ls /run/systemd/resolve/ -lah total 8.0K drwxr-xr-x 2 systemd-resolve systemd-resolve 120 Jun 6 09:21 . drwxr-xr-x 25 root root 600 Jun 5 11:14 .. srw-rw-rw- 1 systemd-resolve systemd-resolve 0 Apr 22 2024 io.systemd.Resolve srw------- 1 systemd-resolve systemd-resolve 0 Apr 22 2024 io.systemd.Resolve.Monitor -rw-r--r-- 1 systemd-resolve systemd-resolve 787 Jun 6 08:51 resolv.conf -rw-r--r-- 1 systemd-resolve systemd-resolve 920 Jun 6 08:40 stub-resolv.conf
通过查看 /etc/resolv.conf 的内容也可以看到该文件是有 systemd-resolved 服务管理且自动生成
查询域名解析服务名称和服务状态
[10:38:21][root@photon-1:site]# systemctl status |grep resolv │ ├─systemd-resolved.service │ │ └─691 /usr/lib/systemd/systemd-resolved │ └─2884936 grep --color=auto resolv [10:38:38][root@photon-1:site]# systemctl status systemd-resolved ● systemd-resolved.service - Network Name Resolution Loaded: loaded (/usr/lib/systemd/system/systemd-resolved.service; enabled; preset: enabled) Active: active (running) since Mon 2024-04-22 09:46:43 CST; 1 year 1 month ago Docs: man:systemd-resolved.service(8) man:org.freedesktop.resolve1(5) https://www.freedesktop.org/wiki/Software/systemd/writing-network-configuration-managers https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients Main PID: 691 (systemd-resolve) Status: "Processing requests..." Tasks: 1 (limit: 9505) Memory: 4.8M CPU: 1min 20.603s CGroup: /system.slice/systemd-resolved.service └─691 /usr/lib/systemd/systemd-resolved Jun 06 08:51:07 photon-1 systemd-resolved[691]: Switching to fallback DNS server 1.1.1.1#cloudflare-dns.com. Jun 06 08:52:53 photon-1 systemd-resolved[691]: Using degraded feature set UDP instead of UDP+EDNS0 for DNS server 119.29.29.29. Jun 06 08:56:43 photon-1 systemd-resolved[691]: Clock change detected. Flushing caches. Jun 06 09:18:24 photon-1 systemd-resolved[691]: Grace period over, resuming full feature set (UDP+EDNS0) for DNS server 119.29.29.29. Jun 06 09:24:55 photon-1 systemd-resolved[691]: Using degraded feature set UDP instead of UDP+EDNS0 for DNS server 119.29.29.29. Notice: journal has been rotated since unit was started, output may be incomplete.
查找服务配置文件
通过 lsof -p 691 来查找服务配置文件(691是前面查到的进程号),但是只能查看它打开了哪些文件并不能定位到是哪个配置文件。
[10:43:34][root@photon-1:site]# lsof -p 691 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 691 systemd-resolve cwd DIR 8,3 4096 2 / systemd-r 691 systemd-resolve rtd DIR 8,3 4096 2 / systemd-r 691 systemd-resolve txt REG 8,3 534112 804499 /usr/lib/systemd/systemd-resolved systemd-r 691 systemd-resolve mem REG 8,3 636576 790785 /usr/lib/libpcre2-8.so.0.11.0 systemd-r 691 systemd-resolve mem REG 8,3 123064 786508 /usr/lib/libz.so.1.2.13 systemd-r 691 systemd-resolve mem REG 8,3 27888 793740 /usr/lib/libattr.so.1.1.2501 systemd-r 691 systemd-resolve mem REG 8,3 989152 788868 /usr/lib/libzstd.so.1.5.5 systemd-r 691 systemd-resolve mem REG 8,3 194944 789147 /usr/lib/liblzma.so.5.4.0 systemd-r 691 systemd-resolve mem REG 8,3 188008 789102 /usr/lib/libselinux.so.1 systemd-r 691 systemd-resolve mem REG 8,3 131672 787077 /usr/lib/libseccomp.so.2.5.4 systemd-r 691 systemd-resolve mem REG 8,3 65440 797193 /usr/lib/libpam.so.0.85.1 systemd-r 691 systemd-resolve mem REG 8,3 405848 789124 /usr/lib/libmount.so.1.1.0 systemd-r 691 systemd-resolve mem REG 8,3 233608 791934 /usr/lib/liblz4.so.1.9.4 systemd-r 691 systemd-resolve mem REG 8,3 107912 788188 /usr/lib/libkmod.so.2.4.0 systemd-r 691 systemd-resolve mem REG 8,3 44808 786584 /usr/lib/libcrypt.so.1 systemd-r 691 systemd-resolve mem REG 8,3 48768 789140 /usr/lib/libcap.so.2.66 systemd-r 691 systemd-resolve mem REG 8,3 368576 789122 /usr/lib/libblkid.so.1.1.0 systemd-r 691 systemd-resolve mem REG 8,3 40536 793744 /usr/lib/libacl.so.1.1.2301 systemd-r 691 systemd-resolve mem REG 8,3 1975936 786547 /usr/lib/libc.so.6 systemd-r 691 systemd-resolve mem REG 8,3 4547128 786525 /usr/lib/libcrypto.so.3 systemd-r 691 systemd-resolve mem REG 8,3 690680 786539 /usr/lib/libssl.so.3 systemd-r 691 systemd-resolve mem REG 8,3 162216 787026 /usr/lib/libgpg-error.so.0.33.1 systemd-r 691 systemd-resolve mem REG 8,3 1352632 787032 /usr/lib/libgcrypt.so.20.4.1 systemd-r 691 systemd-resolve mem REG 8,3 921792 788037 /usr/lib/libm.so.6 systemd-r 691 systemd-resolve mem REG 8,3 3349424 787378 /usr/lib/systemd/libsystemd-shared-253.so systemd-r 691 systemd-resolve mem REG 8,3 215728 786497 /usr/lib/ld-linux-x86-64.so.2 systemd-r 691 systemd-resolve 0r CHR 1,3 0t0 4 /dev/null
既然 lsof 无法定位到具体的配置文件,那么需要考虑 fswatch 这个工具了,这个工具默认是没有安装的,需要自行下载安装。详细的步骤可以参考2011-Photon 容器主机配置指引的描述。
使用 fswatch 监视 /etc/systemd 目录,-t 是打印时间,-x 是打印事件
fswatch -t -x /etc/systemd #在另一个窗口执行 systemctl restart systemd-resolved
可以看到 Fri 06 Jun 2025 11:23:28 AM CST /etc/systemd/resolved.conf PlatformSpecific 的提示。说明他访问并且打开了 /etc/systemd/resolved.conf 这个文件。
于是打开该文件在里面添加 DNS=119.29.29.29 内容,再次重启系统或网络服务后该配置内容仍在。
问题原因分析
在没有 systemd-resolved 的设备上,域名解析过程如下:
- 从 DNS 缓存里查找域名与 IP 的映射关系
- 从 /etc/hosts 里查找域名与 IP 的映射关系
- 从 /etc/resolv.conf 里查找 DNS Server 并发起解析请求(nameserver=119.29.29.29)
在有 systemd-resolved 的设备上,域名解析过程如下:
- 从 DNS 缓存里查找域名与 IP 的映射关系
- 从 /etc/hosts 里查找域名与 IP 的映射关系
- 从 /etc/resolv.conf 里查找 DNS Server 并发起解析请求。但此时该文件的内容为(nameserver 127.0.0.53 options edns0 trust-ad)
- 然后 systemd-resolved 根据 /run/systemd/resolve/stub-resolv.conf 的记录去解析请求
参考
域名解析工具 resolvectl
可以看到 systemd-resolved 是 resolvectl 的软链接
[11:38:46][root@photon-1:~]# ls /usr/bin/systemd-resolve -l lrwxrwxrwx 1 root root 10 Nov 20 2023 /usr/bin/systemd-resolve -> resolvectl #使用方法 resolvectl -h resolvectl status resolvectl qurey baidu.com resolvectl query baidu.com resolvectl query www.baidu.com resolvectl flush-caches resolvectl statistics
CentOS 7 下也存在 resolv.conf 覆盖问题
该问题对应的文件是 /etc/NetworkManage/NetworkManage.conf
- 无标签
添加评论