问题简介

一台 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 的设备上,域名解析过程如下:

  1. 从 DNS 缓存里查找域名与 IP 的映射关系
  2. 从 /etc/hosts 里查找域名与 IP 的映射关系
  3. 从 /etc/resolv.conf 里查找 DNS Server 并发起解析请求(nameserver=119.29.29.29)

在有 systemd-resolved 的设备上,域名解析过程如下:

  1. 从 DNS 缓存里查找域名与 IP 的映射关系
  2. 从 /etc/hosts 里查找域名与 IP 的映射关系
  3. 从 /etc/resolv.conf 里查找 DNS Server 并发起解析请求。但此时该文件的内容为(nameserver 127.0.0.53    options edns0 trust-ad)
  4. 然后 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



  • 无标签
写评论...