在Linux操作系统中,Ubuntu以其易用性和强大的社区支持成为许多用户和开发者的首选,网络配置是Ubuntu系统管理中的基础环节,而DNS(域名系统)配置的正确与否直接影响到网络访问的效率与稳定性,本文将详细介绍Ubuntu系统中DNS的配置方法、常见问题及解决方案,帮助用户更好地理解和管理DNS设置。

Ubuntu DNS配置基础
DNS的主要功能是将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,在Ubuntu系统中,DNS配置通常涉及多个文件和工具,了解这些基础知识是高效管理网络的前提。
DNS解析流程
当用户在浏览器中输入一个网址时,系统会按照以下顺序进行DNS解析:
- 检查本地hosts文件(/etc/hosts),看是否有对应的域名和IP地址映射。
- 查询本地DNS缓存(如systemd-resolved或nscd)。
- 向配置的DNS服务器发送查询请求。
- 如果配置的DNS服务器无法解析,则根据系统设置使用备用DNS或默认网关的DNS。
主要配置文件
- /etc/resolv.conf:传统的DNS配置文件,记录了系统使用的DNS服务器地址,在Ubuntu 18.04及后续版本中,该文件可能由systemd-resolved自动管理。
- /etc/systemd/resolved.conf:systemd-resolved服务的配置文件,用于控制本地DNS解析功能。
- */etc/netplan/.yaml**:Netplan是Ubuntu 18.04及后续版本默认的网络配置工具,通过YAML文件配置网络接口和DNS。
配置DNS的常用方法
根据Ubuntu版本和网络环境的不同,DNS配置方法也有所差异,以下是几种常见的配置方式:
使用Netplan配置静态DNS
对于使用Netplan的系统(如Ubuntu 18.04+),可以通过编辑网络配置文件来设置DNS,在/etc/netplan/01-netcfg.yaml文件中添加以下内容:
network:
version: 2
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
配置完成后,运行sudo netplan apply使更改生效。

修改/etc/resolv.conf
虽然Ubuntu 18.04+默认使用systemd-resolved管理DNS,但用户仍可以手动编辑/etc/resolv.conf,需要注意的是,直接修改该文件可能会被系统覆盖,因此建议通过systemd-resolved或Netplan进行配置。
使用systemd-resolved
systemd-resolved是Ubuntu默认的本地DNS解析服务,它提供本地缓存和DNS-over-HTTPS(DoH)支持,可以通过以下步骤配置:
- 编辑/etc/systemd/resolved.conf,取消注释并修改以下行:
DNS=8.8.8.8 8.8.4.4 DNSOverTLS=opportunistic - 重启服务:
sudo systemctl restart systemd-resolved - 检查状态:
systemd-resolve --status
为特定网络接口配置DNS
如果需要为不同的网络接口设置不同的DNS服务器,可以在Netplan配置文件中为每个接口单独指定nameservers。
network:
version: 2
ethernets:
eth0:
nameservers:
addresses: [8.8.8.8]
wlan0:
nameservers:
addresses: [1.1.1.1]
常见DNS问题及解决方案
DNS解析失败
- 问题现象:无法通过域名访问网站,但IP地址可以访问。
- 排查步骤:
- 检查/etc/resolv.conf中的DNS服务器是否正确。
- 使用
nslookup或dig命令测试域名解析。 - 清除DNS缓存:
sudo systemd-resolve --flush-caches
- 解决方案:尝试更换公共DNS(如8.8.8.8或1.1.1.1),或检查网络连接是否正常。
DNS解析速度慢
- 问题现象:域名解析耗时较长,影响上网体验。
- 可能原因:
- DNS服务器响应慢或负载高。
- 本地DNS缓存未启用或配置不当。
- 解决方案:
- 配置多个DNS服务器以实现负载均衡。
- 启用DNS缓存(确保systemd-resolved服务正常运行)。
- 考虑使用DNS-over-HTTPS(DoH)提高安全性。
高级DNS配置技巧
使用/etc/hosts文件
对于需要固定域名映射的本地服务器或测试环境,可以编辑/etc/hosts文件添加自定义记录。
0.0.1 localhost
192.168.1.50 testserver.local
配置DNS转发
如果需要将DNS查询转发到特定服务器,可以在/etc/systemd/resolved.conf中设置:

DNSStubListener=yes
DNS=192.168.1.1
防止DNS劫持
为避免DNS劫持风险,建议:
- 使用加密DNS协议(如DoH)。
- 定期更新系统和DNS相关软件。
- 避免使用不可信的公共DNS服务器。
相关问答FAQs
Q1: 如何在Ubuntu中检查当前DNS配置是否生效?
A1: 可以通过以下命令检查DNS配置:
- 使用
cat /etc/resolv.conf查看当前DNS服务器地址。 - 使用
systemd-resolve --status查看systemd-resolved的详细状态。 - 使用
nslookup www.example.com测试域名解析是否正常。
Q2: 修改DNS配置后无法上网,如何恢复默认设置?
A2: 如果修改DNS后出现网络问题,可以尝试以下方法恢复:
- 通过Netplan恢复配置:删除自定义DNS设置后运行
sudo netplan apply。 - 重置systemd-resolved:
sudo systemctl restart systemd-resolved。 - 检查网络管理器(如NetworkManager)是否覆盖了DNS配置,可通过
nmcli dev show查看。 - 如果问题仍未解决,可以尝试恢复系统默认的DNS服务器地址。