在Ubuntu系统中,当出现IP地址可以正常Ping通,但域名无法解析的情况时,核心上文归纳通常指向DNS解析配置错误或相关网络服务异常,这并非网络物理连接的断开,而是系统无法将人类可读的域名(如www.google.com)转换为机器可读的IP地址,解决此问题的关键在于检查并正确配置/etc/resolv.conf文件,或通过Netplan及NetworkManager进行持久化的DNS设置,同时排查防火墙对UDP 53端口的限制。

精准诊断:确认DNS故障
在动手修复之前,必须通过严谨的测试来隔离问题,尝试Ping一个公网IP地址,例如8.8.8,如果此时能够收到ICMP回复,说明物理网卡、网关以及路由表配置完全正常,网络链路是畅通的,尝试Ping一个域名,例如ping www.baidu.com,如果此时提示“temporary failure in name resolution”或“unknown host”,则可以100%确认为DNS解析故障,这一步区分了“连不上网”和“连上了网但不知道去哪找网站”的本质区别。
临时急救——手动配置resolv.conf
对于需要立即恢复网络的场景,最直接的方法是修改DNS解析配置文件,Ubuntu使用/etc/resolv.conf文件来定义DNS服务器,可以使用文本编辑器如nano或vim打开该文件。
注意,在现代Ubuntu版本中,该文件通常是一个指向/run/systemd/resolve/stub-resolv.conf的软链接,直接修改可能被系统覆盖,为了临时生效,可以先删除软链接再新建文件,或者直接在现有内容中添加,在文件中添加或修改以下行:
nameserver 114.114.114.114
nameserver 8.8.8.8
保存后,再次执行Ping域名命令,通常即可立即生效。114.114.114是国内通用的公共DNS,8.8.8是Google提供的公共DNS,两者互为备份能提高解析成功率,这种方法在系统重启后可能会失效,因此仅适用于临时排查。
永久修复——通过Netplan配置(服务器版推荐)
对于Ubuntu 18.04及以后的版本,服务器端默认使用Netplan作为网络管理工具,这是最专业、最符合系统原生逻辑的永久解决方案,Netplan的配置文件通常位于/etc/netplan/目录下,文件名可能为00-installer-config.yaml或类似名称。
编辑该YAML文件时,必须严格遵循YAML的缩进语法,在对应的网卡配置块下,添加nameservers字段,示例如下:

network:
ethernets:
eth0:
dhcp4: true
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
修改完成后,执行sudo netplan try命令来测试配置语法是否正确,如果提示配置成功,再执行sudo netplan apply使配置生效,此方法会将DNS设置写入系统的网络配置底层,重启后依然有效,是服务器运维的首选方案。
桌面环境修复——NetworkManager设置
如果是使用Ubuntu桌面版,网络通常由NetworkManager管理,最简单的方式是通过图形界面修改:点击右上角网络图标 -> 选择“有线连接” -> 点击“设置”图标 -> 在“IPv4”或“IPv6”选项卡中,将DNS方法从“自动(DHCP)”改为“自动(DHCP)仅手动DNS”,然后在DNS服务器框中填入上述IP地址。
若必须通过命令行操作,可以使用nmcli工具,首先列出连接名称:nmcli connection show,然后修改指定连接的DNS设置:
sudo nmcli con mod “有线连接 1” ipv4.dns “114.114.114.114,8.8.8.8”
sudo nmcli con up “有线连接 1”
这种方法能够与桌面环境完美集成,避免配置冲突。
深度解析:systemd-resolved与防火墙因素
在极少数情况下,即使配置了正确的DNS,问题依然存在,这通常涉及systemd-resolved服务,该服务是Ubuntu负责处理DNS解析的核心组件,如果该服务卡死或异常,会导致解析失败,可以通过重启该服务尝试修复:
sudo systemctl restart systemd-resolved

防火墙也是常被忽视的因素,DNS查询主要使用UDP协议的53端口,如果服务器配置了UFW(Uncomplicated Firewall)或者处于云环境中(如阿里云、AWS),安全组规则可能会阻止出站的UDP 53流量,检查UFW状态:
sudo ufw status
如果状态为active,需要确保允许出站连接,或者 specifically 允许DNS流量,在云服务器控制台中,务必检查安全组出站规则是否放行了所有协议或特定的UDP 53端口。
独立见解:避免DNS劫持与污染
在配置DNS时,除了追求“能通”,还应考虑“安全”与“速度”,国内网络环境下,直接使用8.8.8.8可能会遭遇丢包或解析被污染,导致某些网站无法打开,建议采用混合DNS策略:首选国内DNS(如阿里223.5.5.5或腾讯119.29.29.29)以保证速度和国内域名解析的准确性,备用国外DNS(如1.1.1.1或8.8.8.8)作为兜底,这种层级化的配置思路,能最大程度保障业务的连续性。
相关问答模块
Q1:为什么我修改了/etc/resolv.conf文件,重启Ubuntu后DNS配置又变回去了?
A: 这是因为现代Ubuntu版本(特别是使用Netplan或NetworkManager时)将/etc/resolv.conf视为由系统动态管理的文件,每次重启或网络服务重载时,系统会根据Netplan的YAML配置或NetworkManager的连接配置自动覆盖该文件,要实现永久生效,必须修改Netplan的配置文件(/etc/netplan/*.yaml)或通过nmcli修改NetworkManager的连接配置,而不是直接编辑resolv.conf。
Q2:IP能Ping通,但域名不通,且浏览器提示“服务器DNS地址无法找到”,这一定是DNS服务器IP填错了吗?
A: 不一定,虽然DNS服务器IP填错是最常见原因,但也可能是系统的DNS解析服务(systemd-resolved)出现了缓存错误或死锁,此时可以尝试清空DNS缓存或重启该服务(sudo systemctl restart systemd-resolved),检查/etc/nsswitch.conf文件中hosts行的配置顺序也很重要,它决定了系统查询域名时的顺序(如先查本地hosts文件还是先查DNS)。
如果您在按照上述步骤操作后仍遇到问题,或者有特定的网络环境(如公司内网代理),欢迎在评论区详细描述您的错误日志,我们将为您提供进一步的排查建议。


















