在Ubuntu系统中配置DNS,最推荐且持久的方法是通过修改Netplan配置文件或使用systemd-resolved服务,而非直接编辑旧的resolv.conf文件,以确保配置在重启后依然生效。
很多用户在初次接触Linux服务器或桌面版时,都会遇到网络解析慢、域名无法访问的问题,这通常是因为DNS配置不当,过去,大家习惯直接修改/etc/resolv.conf,但在现代Ubuntu版本中,这种做法往往会被系统服务覆盖,导致配置失效,我们需要一种更稳定、更符合现代Linux架构的管理方式,本文将结合不同场景,详细拆解如何在Ubuntu 22.04及更高版本中正确配置DNS,涵盖从临时测试到永久生效的多种方案。
Ubuntu配置DNS的三种主流方案对比
在深入具体操作之前,我们需要明确不同场景下的最佳实践,业内专家指出,选择配置方式应取决于你的网络环境是动态获取还是静态固定,以及你使用的是Server版还是Desktop版。
使用Netplan配置静态DNS(推荐Server版)
对于大多数Ubuntu Server用户,Netplan是默认的网络配置工具,它使用YAML格式的配置文件,结构清晰,易于版本控制。
确定网络接口名称
你需要知道当前使用的网卡名称,在终端输入`ip link`或`ip addr`,找到状态为UP的接口,通常是`ens33`、`eth0`或`enp0s3`等。
编辑Netplan配置文件
配置文件通常位于`/etc/netplan/`目录下,文件名可能类似`00-installer-config.yaml`或`50-cloud-init.yaml`,使用文本编辑器打开它:
sudo nano /etc/netplan/00-installer-config.yaml
在network:层级下,找到对应的网卡接口,你需要添加或修改nameservers字段,注意YAML的缩进必须严格对齐,通常使用2个空格缩进。
network: ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 119.29.29.29 version: 2
在上述示例中,5.5.5是阿里云DNS,29.29.29是腾讯云DNS,你可以根据所在地域选择延迟更低的公共DNS,配置完成后,应用更改:
sudo netplan apply
通过systemd-resolved管理DNS(Desktop及新版Server通用)
Ubuntu Desktop和较新的Server版本默认使用systemd-resolved服务来管理DNS解析,这种方式更加动态,能够自动处理多网卡环境下的DNS优先级。
查看当前DNS状态
你可以使用以下命令查看当前生效的DNS服务器:
resolvectl status
配置特定接口的DNS
假设你的网卡名为`eth0`,你可以使用命令行直接配置:
sudo resolvectl dns eth0 8.8.8.8 1.1.1.1
这条命令会立即生效,但重启网络服务或系统后可能会失效,因为它没有写入持久化配置,为了实现永久生效,需要修改/etc/systemd/resolved.conf文件:
sudo nano /etc/systemd/resolved.conf
找到#DNS=行,取消注释并填入你的DNS服务器IP:
[Resolve] DNS=8.8.8.8 1.1.1.1 FallbackDNS=223.5.5.5
保存后,重启服务使配置生效:
sudo systemctl restart systemd-resolved
临时修改resolv.conf(仅用于调试)
虽然不推荐作为长期方案,但在排查网络问题时,临时修改/etc/resolv.conf是最快的方法。
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
如果系统开启了NetworkManager或systemd-resolved,这个文件可能是符号链接,直接修改会被覆盖,此方法仅适用于确认当前网络故障是否由DNS引起,而非解决根本问题。
Ubuntu配置DNS时的常见陷阱与优化
在实际操作中,许多用户会遇到配置了DNS却无法解析的情况,这通常源于以下几个细节疏忽。
YAML缩进错误
Netplan对缩进极其敏感,一个Tab键或错误的空格数都会导致配置应用失败,报错信息通常会提示”mapping values are not allowed here”,务必使用空格而非Tab,并确保addresses和nameservers下的IP列表缩进一致。
DNS缓存问题
即使配置正确,浏览器或系统缓存可能导致你仍然看到旧的解析结果,在Linux中,清除DNS缓存的方法取决于你使用的解析器,如果是systemd-resolved,可以执行:
sudo resolvectl flush-caches
选择适合地域的DNS服务器
不同地区的公共DNS性能差异显著,在国内使用Cloudflare的1.1.1可能会遇到连接不稳定,而使用阿里云或腾讯云的DNS则能获得更低的延迟和更好的国内域名解析速度,据统计,多数情况下,选择就近的运营商DNS或大型云厂商的公共DNS能显著提升网页加载速度。
如何验证DNS配置是否生效
配置完成后,必须验证配置是否真正生效,不要仅依赖ping命令,因为ping可能使用缓存或默认网关的DNS。
使用dig命令
dig是更专业的DNS查询工具,你可以指定使用特定的DNS服务器进行查询:
dig @223.5.5.5 example.com
如果返回结果中的

SERVER字段显示为你配置的IP,且ANSWER SECTION中有正确的IP地址,说明配置成功。
使用nslookup命令
nslookup同样有效:
nslookup example.com 223.5.5.5
检查resolv.conf链接
在systemd-resolved环境下,/etc/resolv.conf通常是一个指向/run/systemd/resolve/stub-resolv.conf的符号链接,你可以检查这个链接是否存在,以确认系统正在使用新的解析器:
ls -l /etc/resolv.conf
Ubuntu配置DNS相关Q&A
Ubuntu配置DNS后重启失效怎么办?
如果重启后DNS配置丢失,通常是因为你修改了错误的文件,在Netplan环境中,确保修改的是/etc/netplan/下的YAML文件,并执行了netplan apply,在systemd-resolved环境中,确保修改了/etc/systemd/resolved.conf并重启了服务,直接修改/etc/resolv.conf在大多数现代Ubuntu版本中是无效的,因为它会被网络管理服务自动重写。
如何为Ubuntu配置多个DNS服务器?
配置多个DNS服务器可以提高容错率,在Netplan中,在addresses列表中添加多个IP即可,系统会按顺序尝试,在/etc/systemd/resolved.conf中,用空格分隔多个IP,并可以将备用DNS填入FallbackDNS字段。DNS=8.8.8.8 1.1.1.1。
Ubuntu配置DNS影响其他服务吗?
DNS配置主要影响基于域名解析的服务,如Web浏览、软件包更新(apt)、SSH连接等,本地局域网内的IP直连访问不受影响,某些应用程序可能拥有自己的DNS设置,不受系统全局DNS影响,但在绝大多数情况下,修改系统级DNS会全局生效,确保所有依赖域名解析的应用都能受益。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/421138.html


