在Ubuntu系统中,当遇到ping域名不通但ping IP地址正常的情况,核心上文归纳通常指向DNS解析故障或系统网络配置层面的逻辑错误,这并非网络物理链路的断开,而是域名到IP地址的映射机制失效,解决这一问题需要遵循从“链路验证”到“服务排查”,再到“配置修正”的金字塔诊断逻辑,通过检查DNS配置文件、Netplan设置以及systemd-resolved服务状态,快速恢复网络解析功能。

第一步:精准诊断,区分链路故障与解析故障
在着手解决之前,必须通过命令行精准定位故障点,避免盲目操作,打开终端,首先尝试ping一个公网IP地址,例如8.8.8.8,如果ping 8.8.8.8能够正常回显,说明物理网卡、网关以及路由规则完全正常,网络链路是畅通的,如果ping www.baidu.com显示“Temporary failure in name resolution”或“Name or service not known”,则可以100%确认为DNS解析问题,反之,如果ping IP也不通,则问题在于网关配置或DHCP服务获取失败,需优先排查网络连接,这一步是后续所有操作的基础,确保了修复方向的正确性。
第二步:检查并修复DNS配置文件
Ubuntu系统在不同版本中对于DNS的管理方式有所差异,但最基础且通用的检查文件是/etc/resolv.conf,在终端中输入cat /etc/resolv.conf,该文件中必须包含nameserver开头的条目,例如nameserver 8.8.8.8或nameserver 114.114.114.114。
如果该文件为空,或者包含的DNS服务器地址无法访问(如内网DNS未配置),则直接导致解析失败。需要注意的是,在Ubuntu 18.04及以后的版本中,/etc/resolv.conf通常是一个指向/run/systemd/resolve/stub-resolv.conf的符号链接,这意味着直接手动修改该文件往往会在系统重启后被覆盖,虽然可以通过sudo vim /etc/resolv.conf临时添加DNS服务器来验证问题是否解决,但若要永久生效,必须进入下一步的Netplan配置或NetworkManager配置。
第三步:使用Netplan配置永久生效的DNS
对于使用Netplan作为网络管理工具的现代Ubuntu版本,最权威、最稳定的修复方案是修改YAML配置文件,进入/etc/netplan/目录,找到通常以.yaml结尾的配置文件(如00-installer-config.yaml),使用编辑器打开该文件,在对应的网络接口下(通常是ethernets下的设备名)添加nameservers字段。

配置示例如下:
network:
ethernets:
eth0:
dhcp4: true
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
version: 2
修改完成后,务必执行sudo netplan apply命令使配置生效,此操作会重置网络接口并应用新的DNS设置,是解决Ubuntu DNS配置漂移问题的根本手段。
第四步:排查systemd-resolved服务冲突
Ubuntu默认使用systemd-resolved服务来处理DNS查询,该服务会在本地监听53端口,有时该服务会出现卡死或缓存错误,导致解析失败,可以通过命令sudo systemctl restart systemd-resolved来重启该服务,检查/etc/systemd/resolved.conf文件,确认DNS=和FallbackDNS=项是否被注释掉或配置正确,如果系统环境特殊,不需要systemd-resolved的存根DNS功能,可以通过编辑该文件关闭相关选项,但这属于进阶操作,一般重启服务即可解决大部分由服务异常引起的解析中断。
第五步:检查防火墙与nsswitch配置
虽然少见,但防火墙规则也可能阻断DNS查询,DNS查询主要使用UDP协议的53端口,如果服务器配置了UFW(Uncomplicated Firewall),需确保允许出站的UDP 53流量,或者检查是否有规则阻止了回包,可以使用sudo ufw status查看防火墙状态。
/etc/nsswitch.conf文件定义了名称解析的顺序,打开该文件,查看hosts:这一行,标准的配置应该是hosts: files dns,如果该行被错误地修改为hosts: files,系统将只查询本地/etc/hosts文件而完全忽略DNS查询,导致域名无法解析,恢复该行配置并保存,通常能立即解决问题。

相关问答模块
问题1:为什么在Ubuntu中修改了/etc/resolv.conf后,重启系统DNS配置又失效了?
解答: 这是因为现代Ubuntu版本(特别是18.04之后)默认通过systemd-resolved服务和Netplan(或NetworkManager)来管理网络。/etc/resolv.conf文件通常是一个符号链接,由系统动态生成,当系统重启或网络服务重启时,系统会根据Netplan的配置文件或DHCP获取的信息重新覆盖该文件,为了永久生效,必须在Netplan的YAML配置文件中指定DNS服务器,或者通过NetworkManager的GUI界面进行配置,而不是直接编辑resolv.conf。
问题2:ping域名不通时,如何使用dig或nslookup命令进行更深入的调试?
解答: ping命令只能告诉你结果,而dig(Domain Information Groper)或nslookup(Name Server Lookup)能提供详细的解析过程,首先确保安装了dnsutils包(sudo apt install dnsutils),执行dig www.baidu.com,如果返回状态为“NOERROR”且有ANSWER SECTION,说明DNS解析本身是通的,问题可能出在系统缓存或ICMP被禁用;如果返回“REFUSED”或“SERVFAIL”,则说明配置的DNS服务器拒绝了请求或服务器本身故障,这些工具能帮助管理员判断是本地配置问题还是上游DNS服务器问题。
互动环节
如果您在按照上述步骤操作后仍遇到问题,或者您的网络环境涉及复杂的代理与VPN配置,欢迎在评论区详细描述您的/etc/netplan以及具体的报错信息,我们将为您提供更具针对性的排查建议。


















