Ubuntu 24.04下如何定位并清除错误的DNS设置源?
Ubuntu 24.04下如何定位并清除错误的DNS设置源?
咱们一步步来排查这个问题,毕竟Ubuntu 24.04的DNS管理核心是systemd-resolved,再加上可能的NetworkManager、DHCP或者Docker的影响,咱们逐个排除:
1. 先检查systemd-resolved的配置文件
systemd-resolved是当前系统DNS管理的核心,先看看它的配置里有没有硬编码的错误DNS:
- 打开全局配置文件:
sudo nano /etc/systemd/resolved.conf,检查DNS=这一行,如果里面写了192.168.0.112,把它改成你的路由器IP,然后保存退出。 - 再检查接口特定的配置:看看
/etc/systemd/network/目录下的.network文件(比如可能有20-enp8s0.network这类文件),打开后找[Network]段的DNS=字段,要是有旧的IP就删掉或修改。 - 改完后重启服务生效:
sudo systemctl restart systemd-resolved
2. 排查NetworkManager的连接配置
如果你的服务器用NetworkManager管理网络(桌面版默认用这个,服务器版也可能启用),那可能是某个网络连接里手动设置了DNS:
- 先列出所有网络连接:
nmcli connection show,找到对应enp8s0的连接名(比如叫Wired connection 1)。 - 查看这个连接的DNS设置:
nmcli connection show "Wired connection 1" | grep dns,如果看到192.168.0.112,就清空它:sudo nmcli connection modify "Wired connection 1" ipv4.dns "" sudo nmcli connection up "Wired connection 1" - 也可以直接去
/etc/NetworkManager/system-connections/目录下找对应连接的配置文件,打开后看[ipv4]段的dns=字段,删掉旧IP后保存,再重启NetworkManager:sudo systemctl restart NetworkManager
3. 检查DHCP的影响
虽然你说路由器默认DNS是内部IP,但还是确认下是不是DHCP服务器(比如路由器)还在推送旧的DNS:
- 重新获取DHCP租约:
sudo dhclient -v enp8s0,看输出里的DNS Servers是不是旧IP。如果是的话,你需要去路由器的DHCP设置里修改DNS服务器地址。
4. 排查Docker的影响
因为你跑着DNS Docker容器,Docker本身或者容器可能会修改主机的DNS设置:
- 检查Docker守护进程配置:打开
/etc/docker/daemon.json,如果里面有"dns": ["192.168.0.112", "1.0.0.1"]这样的配置,把旧IP改成路由器IP,保存后重启Docker:sudo systemctl restart docker - 也可以检查下DNS容器的配置:
docker inspect <你的DNS容器名> | grep DNS,看看容器有没有强制设置主机DNS的情况(不过这种情况比较少见)。
5. 最后检查resolv.conf的状态
Ubuntu 24.04里/etc/resolv.conf一般是软链接到systemd-resolved的文件,先确认:
ls -l /etc/resolv.conf,如果显示链接到/run/systemd/resolve/stub-resolv.conf或/run/systemd/resolve/resolv.conf就正常;如果是手动创建的普通文件,打开看看里面有没有硬编码的nameserver 192.168.0.112,有的话删掉改成路由器IP。
验证效果
做完上面的步骤后,先清除DNS缓存:sudo resolvectl flush-caches,然后运行resolvectl status,看看enp8s0的DNS Servers是不是已经变成路由器的IP了,再用nslookup google.com测试下解析是否正常。
备注:内容来源于stack exchange,提问作者Nom Obscura




