在Ubuntu系统中,DNS(域名系统)配置是网络管理的基础环节,它决定了用户如何通过域名访问互联网资源,正确的DNS配置不仅能提升网络访问速度,还能增强网络安全性和稳定性,本文将详细介绍Ubuntu系统中DNS配置的多种方法、常见问题及解决方案,帮助用户更好地管理和优化网络环境。

Ubuntu DNS配置的基础概念
DNS是互联网的核心服务之一,负责将人类可读的域名(如www.example.com)转换为机器可识别的IP地址,在Ubuntu系统中,DNS配置通常涉及多个文件和服务,包括/etc/resolv.conf、/etc/netplan/目录下的配置文件以及systemd-resolved服务,了解这些组件的作用有助于用户更灵活地管理DNS设置。
查看当前DNS配置
在修改DNS配置前,首先需要确认当前的DNS设置,用户可以通过以下命令查看系统使用的DNS服务器:
cat /etc/resolv.conf
如果系统启用了systemd-resolved服务,还可以使用以下命令查看更详细的DNS信息:
resolvectl status
这些命令会显示当前活跃的DNS服务器地址、搜索域等信息,为后续配置提供参考。
使用Netplan配置静态DNS
Netplan是Ubuntu 18.04及以后版本默认的网络配置工具,通过YAML格式的配置文件管理网络设置,要配置静态DNS,可以编辑/etc/netplan/目录下的配置文件(如01-network-manager-all.yaml),添加以下内容:
network:
version: 2
ethernets:
enp0s3: # 替换为实际网卡名称
dhcp4: no
addresses: [192.168.1.100/24] # 静态IP地址
nameservers:
addresses: [8.8.8.8, 8.8.4.4] # Google DNS
search: [example.com] # 可选的搜索域
配置完成后,运行以下命令使更改生效:
sudo netplan apply
通过/etc/resolv.conf直接配置
虽然Netplan是推荐方式,但用户也可以直接编辑/etc/resolv.conf文件,需要注意的是,某些系统可能会自动覆盖该文件,因此建议同时禁用systemd-resolved服务:
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved
然后编辑/etc/resolv.conf,添加以下内容:
nameserver 8.8.8.8 nameserver 8.8.4.4 search example.com
这种方法适用于简单场景,但可能在系统更新后失效。

使用systemd-resolved管理DNS
systemd-resolved是Ubuntu 20.04及以后版本默认的DNS解析服务,它提供了本地DNS缓存和更灵活的配置选项,要配置该服务,可以编辑/etc/systemd/resolved.conf文件,取消注释并修改以下行:
DNS=8.8.8.8 8.8.4.4
Domains=example.com
配置完成后,重启服务:
sudo systemctl restart systemd-resolved
用户可以通过resolvectl命令查看DNS配置是否生效。
配置多个DNS服务器的优先级
在实际应用中,可能需要配置多个DNS服务器并设置优先级,优先使用内部DNS服务器,失败后回退到公共DNS,在Netplan中,可以通过以下方式实现:
nameservers: addresses: [192.168.1.1, 8.8.8.8] search: [example.com]
系统会按顺序尝试这些DNS服务器,直到成功解析域名为止。
动态DNS配置
对于使用DHCP获取IP地址的用户,DNS服务器通常由DHCP服务器自动分配,如果需要手动覆盖DHCP分配的DNS,可以在Netplan配置中添加以下内容:
dhcp4: yes dhcp4-overrides: use-dns: no # 禁用DHCP分配的DNS
然后手动配置DNS服务器地址。
DNS缓存优化
启用DNS缓存可以显著提升域名解析速度,systemd-resolved服务默认启用本地缓存,用户可以通过以下命令查看缓存统计信息:
resolvctl statistics
如果需要清除缓存,可以运行:

sudo systemd-resolve --flush-caches
常见DNS问题排查
当遇到无法解析域名时,可以按照以下步骤排查:
- 使用ping命令测试网络连通性;
- 使用nslookup或dig命令测试DNS解析:
nslookup www.example.com
- 检查/etc/resolv.conf和Netplan配置是否正确;
- 确认防火墙或安全软件是否阻止DNS查询。
安全性考虑
公共DNS服务器(如Google DNS、Cloudflare DNS)虽然方便,但可能存在隐私风险,对于敏感环境,建议使用内部DNS服务器或启用DNS over HTTPS(DoH)功能,在Ubuntu中,可以通过dnscrypt-proxy工具实现加密DNS查询。
相关问答FAQs
问题1:如何临时修改Ubuntu系统的DNS服务器?
解答:临时修改DNS服务器可以直接使用nameserver命令,
sudo nameserver 8.8.8.8
这种方法仅在当前终端会话中有效,重启系统后会恢复默认设置,适合快速测试或临时场景。
问题2:Ubuntu中如何禁用systemd-resolved服务?
解答:要完全禁用systemd-resolved服务,可以运行以下命令:
sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved sudo rm /etc/resolv.conf # 删除自动生成的符号链接 sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf # 手动创建配置文件
禁用后,系统将不再使用本地DNS缓存功能,所有DNS查询会直接发送到配置的DNS服务器。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/291429.html