在Linux系统的使用过程中,网络连接问题时常困扰着用户,无法连接DNS”尤为常见且令人头疼,当您发现浏览器无法打开网站,但ping一个具体的IP地址(如ping 8.8.8.8)却畅通无阻时,基本可以断定问题出在域名解析(DNS)环节,DNS(Domain Name System)作为互联网的“电话簿”,负责将我们易于记忆的域名(如www.google.com)翻译成机器能够理解的IP地址,本文将系统性地介绍Linux连不上DNS的排查思路与解决方案。

初步诊断:确认问题根源
在进行任何复杂操作前,首先需要通过基础命令确认问题确实是DNS解析故障。
-
使用
ping命令测试:ping 8.8.8.8:这是一个公共DNS服务器的IP地址,如果此命令能够正常收到回复,说明您的计算机到互联网的物理链路是通畅的。ping www.baidu.com:如果此命令失败,显示“unknown host”或“Name or service not known”,而上一个pingIP地址的命令成功,则明确指向了DNS解析问题。
-
使用
nslookup或dig命令:
这两个是专业的DNS查询工具,能提供更详细的信息。nslookup www.baidu.com:正常情况下会返回百度的IP地址,如果失败,会显示服务器无法连接或找不到地址。dig www.baidu.com:dig命令的输出更为详尽,包含了查询状态、查询时间、DNS服务器信息等,是排查DNS问题的利器,ANSWER SECTION”部分为空,则说明解析失败。
检查核心配置文件:/etc/resolv.conf
这是Linux系统中最重要的DNS配置文件,它告诉系统应该向哪些DNS服务器发送查询请求,使用cat /etc/resolv.conf命令查看其内容,一个典型的配置文件如下:
# This file is managed by man:systemd-resolved(8). Do not edit. nameserver 127.0.0.53 options edns0 trust-ad search .
常见问题与解决方案:
- 文件为空或
nameserver条目缺失:这是最直接的原因,您需要手动添加有效的DNS服务器地址,可以添加Google的公共DNS:sudo nano /etc/resolv.conf
在文件中加入:

nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver地址无效:文件中可能配置了一个内网地址(如路由器地址168.1.1),但该DNS服务可能因故停止工作,可以尝试将其替换为公共DNS地址进行测试。
警惕:网络管理服务的“自动覆盖”
在现代Linux发行版(如Ubuntu 18.04+, CentOS 7+)中,直接修改/etc/resolv.conf文件往往是徒劳的,因为系统中的网络管理服务,如NetworkManager或systemd-resolved,会在网络重启或系统重启时自动覆盖此文件。
-
systemd-resolved服务:
此服务提供了一个本地DNS存根(stub)监听在0.0.53。/etc/resolv.conf通常是一个指向其内部配置文件的符号链接,如果此服务异常,可能导致DNS解析失败。- 检查状态:
systemctl status systemd-resolved - 解决方案:
- 临时修复:断开符号链接,手动创建一个静态的
resolv.conf文件。sudo unlink /etc/resolv.conf sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
- 永久修复:编辑
/etc/systemd/resolved.conf文件,取消[Resolve]部分的注释,并设置DNS=8.8.8.8 8.8.4.4,然后重启服务。
- 临时修复:断开符号链接,手动创建一个静态的
- 检查状态:
-
NetworkManager服务:
这是大多数桌面版Linux使用的网络管理工具,它通过DHCP获取DNS信息,或允许用户为特定网络连接手动设置。- 检查状态:
systemctl status NetworkManager - 解决方案:建议使用其图形界面或命令行工具
nmcli来修改DNS设置,而不是直接编辑resolv.conf,为“Wired connection 1”设置DNS:nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8,8.8.4.4" nmcli con up "Wired connection 1"
- 检查状态:
检查防火墙与安全策略
DNS查询主要使用UDP协议的53端口,如果本地防火墙(如firewalld、ufw)或网络中的防火墙阻止了此端口的出站流量,DNS解析同样会失败。
- 检查
firewalld(CentOS/RHEL):
sudo firewall-cmd --list-all
确保服务区域中允许了dns服务,或明确放行了UDP 53端口。 - 检查
ufw(Ubuntu/Debian):
sudo ufw status verbose
查看规则列表,确认没有拒绝53端口的规则。
综合排查步骤小编总结
为了方便您快速定位问题,以下是一个简明的排查流程表:
| 步骤 | 操作命令/检查项 | 目的 |
|---|---|---|
| 1 | ping 8.8.8.8 |
确认基础网络连通性 |
| 2 | ping www.baidu.com |
确认是否为DNS解析问题 |
| 3 | cat /etc/resolv.conf |
检查DNS服务器地址配置是否正确 |
| 4 | systemctl status systemd-resolved |
检查systemd-resolved服务状态与影响 |
| 5 | systemctl status NetworkManager |
检查NetworkManager服务状态 |
| 6 | sudo firewall-cmd --list-all 或 sudo ufw status |
检查防火墙是否阻止了DNS端口 |
| 7 | 手动设置公共DNS并测试 | 排除本地DNS服务器故障的可能性 |
通过以上系统性的排查,绝大多数Linux下的DNS连接问题都能被定位并解决,关键在于理解不同网络管理服务的工作方式,并采用正确的工具进行配置,而不是盲目地修改配置文件。

相关问答FAQs
问题1:为什么我修改了 /etc/resolv.conf 文件,重启网络或系统后,我的修改总是被还原?
答: 这是因为您的Linux系统使用了网络管理服务,如NetworkManager或systemd-resolved,这些服务的职责之一就是自动管理网络配置,包括DNS设置,当网络状态发生变化时(如重启、重新连接),它们会根据其内部规则(如DHCP获取的地址或预设的连接配置)重新生成/etc/resolv.conf文件,从而覆盖您的手动修改,正确的做法是使用这些服务提供的工具来修改DNS设置,例如使用nmcli命令行工具或图形界面,或者修改/etc/systemd/resolved.conf文件来配置systemd-resolved。
问题2:除了Google的8.8.8,还有哪些稳定可靠的公共DNS服务器可以推荐使用?
答: 当然有,选择不同的公共DNS可以带来不同的体验,例如更快的解析速度、更好的隐私保护或更强的安全防护,以下是一些广受好评的公共DNS服务:
| DNS服务器地址 | 提供商 | 特点 |
|---|---|---|
1.1.1 / 0.0.1 |
Cloudflare | 强调隐私和安全,解析速度快 |
5.5.5 / 6.6.6 |
阿里云 | 针对中国大陆用户优化,访问国内网站速度快 |
29.29.29 / 254.116.116 |
腾讯云DNSPod | 同样针对国内网络环境优化,稳定可靠 |
9.9.9 / 112.112.112 |
Quad9 | 自动拦截已知恶意网站,注重安全性 |
您可以根据自己的地理位置和需求,选择一组合适的DNS服务器地址进行配置。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/251750.html