在 Ubuntu 20.04 上配置网络时,有时候会遇到 DNS 解析不稳定的问题。比如内网主机名解析不了、访问网页偶尔很慢、服务器能 ping 通 IP 但无法解析域名,或者系统自动获取到的 DNS 服务器并不是自己想用的地址。
这种情况下,可以通过 systemd-resolved 来手动指定 DNS 服务器。这个方法比较适合服务器、开发机、内网环境、虚拟机或者需要固定 DNS 的 Ubuntu 20.04 系统。
本文记录的是通过修改 /etc/systemd/resolved.conf 来设置 DNS 的方法。
一、编辑 resolved.conf 配置文件 #
先打开配置文件:
sudo nano /etc/systemd/resolved.conf找到 [Resolve] 配置段,在里面添加或修改 DNS= 这一行。
例如:
[Resolve]
DNS=10.0.0.1 192.168.0.1这里的两个 DNS 地址可以根据自己的网络环境调整。
例如:
10.0.0.1可能是公司内网 DNS192.168.0.1可能是路由器地址- 如果是公网环境,也可以换成其他可用 DNS
多个 DNS 地址之间用空格分隔即可。
如果文件里原本有被注释掉的配置,比如:
#DNS=可以去掉前面的 #,然后改成自己的 DNS 地址。
二、重启 systemd-resolved 服务 #
保存文件后,需要重启 systemd-resolved 服务,让配置生效:
sudo systemctl restart systemd-resolved重启后,可以查看服务状态:
systemctl status systemd-resolved如果服务状态是 active (running),说明服务正常运行。
也可以使用下面的命令查看当前 DNS 情况:
resolvectl status在输出内容里,重点看 DNS Servers 相关字段,确认是否已经使用刚刚配置的 DNS 地址。
三、处理 /etc/resolv.conf 软链接 #
在 Ubuntu 20.04 中,/etc/resolv.conf 很多时候并不建议直接手动写死,因为它可能会被系统、NetworkManager 或 systemd-resolved 接管。
如果希望系统解析文件使用 systemd-resolved 生成的结果,可以将 /etc/resolv.conf 指向对应的动态文件:
sudo ln -fs /run/systemd/resolve/resolv.conf /etc/resolv.conf执行后可以检查一下软链接:
ls -l /etc/resolv.conf正常情况下,应该能看到它指向:
/run/systemd/resolve/resolv.conf然后再查看当前解析文件内容:
cat /etc/resolv.conf如果里面能看到自己配置的 DNS,说明配置基本已经生效。
四、测试 DNS 是否正常 #
配置完成后,可以用几个简单命令测试 DNS 解析是否正常。
例如测试域名解析:
nslookup google.com或者:
dig google.com如果系统没有安装 dig,可以先安装:
sudo apt install dnsutils也可以直接测试系统是否能解析域名:
ping google.com如果 ping 域名正常,说明 DNS 已经可以工作。
如果 ping 8.8.8.8 正常,但 ping google.com 不正常,通常就说明网络本身是通的,但 DNS 解析仍然有问题。
五、常见问题 #
1. 修改后 DNS 没有变化 #
如果修改 /etc/systemd/resolved.conf 后没有变化,可以先确认是否已经重启服务:
sudo systemctl restart systemd-resolved然后检查:
resolvectl status如果这里仍然看不到新 DNS,可能是 NetworkManager 或其他网络配置覆盖了 DNS 设置。
2. /etc/resolv.conf 被自动改回去了 #
如果直接编辑 /etc/resolv.conf,重启网络或系统后可能会被覆盖。更推荐通过 systemd-resolved 或 NetworkManager 设置 DNS,而不是长期手动修改 /etc/resolv.conf 文件内容。
如果需要让 /etc/resolv.conf 跟随 systemd-resolved,可以重新创建软链接:
sudo ln -fs /run/systemd/resolve/resolv.conf /etc/resolv.conf3. 内网 DNS 和公网 DNS 如何选择 #
如果这台机器需要访问公司内网域名,应该优先使用公司或路由器提供的内网 DNS。
例如:
DNS=10.0.0.1 192.168.0.1如果只是普通公网服务器,可以使用运营商 DNS、路由器 DNS,或者其他可靠的公网 DNS。
但要注意,如果公司网络依赖内部 DNS,直接改成公网 DNS 可能会导致内网域名无法解析。
六、如何恢复默认配置 #
如果修改后网络解析异常,可以恢复默认配置。
重新编辑文件:
sudo nano /etc/systemd/resolved.conf把之前添加的 DNS 配置注释掉:
[Resolve]
#DNS=10.0.0.1 192.168.0.1然后重启服务:
sudo systemctl restart systemd-resolved如果之前修改过 /etc/resolv.conf 软链接,也可以根据自己的网络管理方式恢复。
一般情况下,可以先检查当前链接:
ls -l /etc/resolv.conf再根据系统实际情况决定是否保留。
总结 #
Ubuntu 20.04 设置固定 DNS,可以通过修改:
/etc/systemd/resolved.conf在 [Resolve] 下面添加:
DNS=10.0.0.1 192.168.0.1然后重启服务:
sudo systemctl restart systemd-resolved如果需要让系统解析文件使用 systemd-resolved 生成的结果,可以执行:
sudo ln -fs /run/systemd/resolve/resolv.conf /etc/resolv.conf最后通过:
resolvectl status和:
cat /etc/resolv.conf检查 DNS 是否生效。
这个方法适合需要固定 DNS 的 Ubuntu 20.04 系统,尤其是服务器、开发环境、虚拟机和内网环境。配置时要注意,不同网络管理方式可能会覆盖 DNS 设置,所以修改后一定要进行解析测试。