Ubuntu系统DNS解析故障排查与修复指南

张开发
2026/4/5 14:53:59 15 分钟阅读

分享文章

Ubuntu系统DNS解析故障排查与修复指南
1. 遇到DNS解析故障时先别慌刚接触Ubuntu系统的朋友经常会遇到一个让人头疼的问题——突然之间所有网站都打不开了终端里ping域名总是提示Temporary failure in name resolution。这种情况我遇到过太多次了记得第一次碰到时差点重装系统后来才发现其实解决方法很简单。DNS解析就像互联网的电话簿把好记的域名比如baidu.com转换成机器能识别的IP地址。当这个转换过程出问题时就会出现各种网络连接异常。在Ubuntu系统中这类问题通常表现为浏览器显示无法解析服务器地址终端执行ping www.baidu.com返回Temporary failure in name resolution能ping通IP但无法访问域名提示遇到这类问题时先别急着修改系统文件。按照下面的步骤一步步排查可以避免不必要的系统配置改动。2. 基础排查确认网络连接状态2.1 检查基本网络连通性首先我们需要确认是不是真的DNS问题。打开终端按顺序执行以下命令# 测试是否能访问公共IP ping 8.8.8.8 -c 4 # 测试是否能解析域名 ping www.baidu.com -c 4如果第一个命令成功而第二个失败基本可以确定是DNS问题。如果两个都失败可能是更基础的网络连接问题需要先解决网络连通性。2.2 网络管理服务检查Ubuntu默认使用NetworkManager管理网络我们可以用以下命令检查其状态# 查看网络管理服务状态 systemctl status NetworkManager # 如果发现服务停止用以下命令重启 sudo systemctl restart NetworkManager # 确保网络接口已启用 nmcli networking on我遇到过几次因为NetworkManager服务崩溃导致的DNS解析问题简单的服务重启就能解决。3. 深入诊断DNS配置检查与修复3.1 检查当前DNS配置Ubuntu系统中有几个关键文件会影响DNS解析# 查看当前使用的DNS服务器 cat /etc/resolv.conf # 查看systemd-resolved服务的配置 cat /etc/systemd/resolved.conf正常情况下/etc/resolv.conf应该是一个指向/run/systemd/resolve/resolv.conf的符号链接。如果不是可能就是问题的根源。3.2 修复DNS配置文件如果发现配置有问题可以按照以下步骤修复# 备份原有配置 sudo cp /etc/resolv.conf /etc/resolv.conf.bak # 使用Google的公共DNS sudo bash -c echo nameserver 8.8.8.8 /etc/resolv.conf sudo bash -c echo nameserver 8.8.4.4 /etc/resolv.conf # 修改systemd-resolved配置 sudo nano /etc/systemd/resolved.conf在resolved.conf中确保有以下内容[Resolve] DNS8.8.8.8 8.8.4.4 FallbackDNS1.1.1.1 9.9.9.93.3 处理NetworkManager的DNS覆盖有时候NetworkManager会覆盖系统DNS设置需要特别处理# 查看当前连接名称 nmcli con show # 修改指定连接的DNS设置替换connection_name为实际名称 nmcli con mod connection_name ipv4.dns 8.8.8.8 8.8.4.4 nmcli con mod connection_name ipv4.ignore-auto-dns yes nmcli con up connection_name4. 服务重启与验证4.1 重启相关服务完成配置修改后需要重启相关服务使更改生效# 重启systemd-resolved服务 sudo systemctl restart systemd-resolved # 重建resolv.conf符号链接 sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf # 重启NetworkManager sudo systemctl restart NetworkManager4.2 验证DNS解析最后一步是验证我们的修复是否成功# 测试域名解析 nslookup www.baidu.com # 或者使用dig命令获取更详细信息 dig www.baidu.com # 简单的ping测试 ping -c 4 www.baidu.com如果这些命令都能正常返回结果说明DNS解析已经恢复正常。5. 进阶排查与技巧5.1 使用systemd-resolve诊断systemd-resolved提供了一个很好的诊断工具# 查看DNS统计信息 systemd-resolve --statistics # 测试特定域名的解析 systemd-resolve www.baidu.com这个工具能显示DNS查询使用了哪个服务器耗时多少对于复杂问题排查特别有用。5.2 处理DNS缓存问题有时候DNS缓存会导致一些奇怪的问题可以清空缓存# 清空systemd-resolved缓存 sudo systemd-resolve --flush-caches # 重启服务以清空所有缓存 sudo systemctl restart systemd-resolved5.3 多网络环境下的DNS配置对于笔记本用户经常切换网络环境的情况我建议这样配置# 安装resolvconf工具 sudo apt install resolvconf # 配置自动更新DNS sudo nano /etc/resolvconf/resolv.conf.d/head在文件中添加nameserver 8.8.8.8 nameserver 8.8.4.4 options rotate这样配置后系统会在网络切换时自动维护DNS设置减少手动配置的需要。6. 常见问题与特殊案例6.1 VPN连接导致的DNS问题使用某些网络工具时可能会修改DNS设置导致常规方法失效。这种情况下可以检查# 查看所有网络接口 ip a # 检查路由表 route -n有时候需要手动删除异常路由或DNS设置。6.2 容器环境中的DNS问题在Docker等容器环境中DNS问题可能更复杂。可以尝试# 查看容器的DNS配置 docker run --rm alpine cat /etc/resolv.conf # 运行容器时指定DNS服务器 docker run --dns 8.8.8.8 --dns 8.8.4.4 ...6.3 企业内网DNS的特殊处理在企业环境中可能需要使用内部DNS服务器。这时要注意确保/etc/resolv.conf中内网DNS服务器排在前面可能需要配置搜索域search domain有时需要调整DNS超时设置# 在resolved.conf中添加搜索域 [Resolve] DNS10.0.0.1 Domainsexample.com7. 长期解决方案与最佳实践7.1 防止配置被覆盖很多网络管理工具会覆盖/etc/resolv.conf可以通过以下方法防止# 将文件设为不可变 sudo chattr i /etc/resolv.conf # 需要修改时解除 sudo chattr -i /etc/resolv.conf7.2 使用可靠的DNS服务器除了Google的8.8.8.8还可以考虑Cloudflare的1.1.1.1Quad9的9.9.9.9本地ISP提供的DNS通常延迟更低7.3 监控DNS解析性能可以定期检查DNS解析速度# 测试DNS响应时间 dig 8.8.8.8 www.baidu.com | grep Query time # 或者使用专门工具 sudo apt install dnsutils drill www.baidu.com 8.8.8.8通过这些方法不仅能解决当前的DNS问题还能预防未来可能出现的问题。我在管理几十台Ubuntu服务器时这些经验帮我节省了大量故障排查时间。

更多文章