Linux 服务器无法连接外网,教你排查 DNS

引言:外网不通,先别急着重启网卡

当 Linux 服务器突然连不上外网(比如 ping baidu.com 没反应),很多新手第一反应是重启网卡或重装系统。
其实大部分情况是 DNS 解析出了岔子。DNS(域名系统)负责把域名转换成 IP 地址,如果它配置错误,即使网络本身是通的,你也无法通过域名访问任何网站。
本文从零开始,带你一步步排查 DNS 问题,让你从此不再盲目敲命令。

准备条件:确认是不是 DNS 的锅

在动手配置前,先做一个简单的判断:

  1. 测试能否 ping 通外网 IP
   ping 114.114.114.114

如果能收到回复,说明网络链路是通的,问题基本锁定在 DNS。

  1. 测试域名解析
   nslookup baidu.com
   # 或者
   dig baidu.com

如果提示 connection timed outserver can't find baidu.com,那 90% 是 DNS 配置错误。

分步操作:从配置文件到防火墙全面检查

1. 检查 /etc/resolv.conf – 最直接的 DNS 配置

Linux 的 DNS 服务器地址通常写在 /etc/resolv.conf 里。
用以下命令查看:

cat /etc/resolv.conf

正确的样子应该包含一个或多个 nameserver 行,比如:

nameserver 8.8.8.8
nameserver 114.114.114.114

如果文件为空、只有 # 注释,或指向了不可用的 DNS 服务器(比如内网地址却连不上),就需要修改。

修改方法(请提前备份):

sudo cp /etc/resolv.conf /etc/resolv.conf.bak
sudo vi /etc/resolv.conf

写入以下内容(用阿里 DNS 示例):

nameserver 223.5.5.5
nameserver 223.6.6.6

保存后立刻测试:ping baidu.com

2. 解决 systemd-resolved 覆盖 resolv.conf 的问题

很多现代 Linux 发行版(Ubuntu 18.04+、CentOS 8+)使用 systemd-resolved 管理 DNS,导致手动修改 /etc/resolv.conf 会被自动还原。
如果发现改了又变,请运行:

ls -l /etc/resolv.conf

如果显示是一个符号链接(比如指向 /run/systemd/resolve/stub-resolv.conf),则说明被 systemd-resolved 接管。

正确做法:编辑 /etc/systemd/resolved.conf

sudo vi /etc/systemd/resolved.conf

取消注释并修改:

[Resolve]
DNS=223.5.5.5 223.6.6.6
#FallbackDNS=
#Domains=

然后重启服务:

sudo systemctl restart systemd-resolved

3. 检查防火墙是否拦截 DNS 端口

DNS 请求默认使用 UDP 端口 53,如果防火墙拦截了出站 UDP 53,解析也会失败。
以 iptables 为例:

sudo iptables -L -n -v | grep :53

如果看到 Drop 或 Reject 规则,暂时清空防火墙测试:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

(注意:生产环境请精确放行,不要轻易清空规则)

如果你使用 firewalld(CentOS 7+),运行:

sudo firewall-cmd --list-all

确认输出中有 ports: 53/udp 或服务 dns 已添加。

4. 检查网络管理服务是否覆盖 DNS

如果你使用 NetworkManager(桌面版或部分服务器),它的配置会覆盖 /etc/resolv.conf
检查当前使用哪个服务:

systemctl status NetworkManager

如果正在运行,建议通过 nmcli 修改连接配置:

nmcli con show
# 找到当前活动连接名称,比如 eth0
nmcli con mod eth0 ipv4.dns "223.5.5.5 223.6.6.6"
nmcli con up eth0

然后验证 cat /etc/resolv.conf 是否已经更新。

避坑指南:常见但容易被忽略的坑

  • 坑 1:resolv.conf 被其他软件反复覆盖 除了 systemd-resolved 和 NetworkManager,还有 ppp(拨号)、dhclient 等也可能自动改写 resolv.conf。可以通过 chattr +i /etc/resolv.conf 锁定文件(但注意这可能导致更新失效,谨慎使用)。
  • 坑 2:公网 DNS 被防火墙或 DNS 劫持 有时你写了 8.8.8.8,但运营商或云平台强制拦截,导致解析失败。改用国内 DNS 如 223.5.5.5 通常能解决。
  • 坑 3:忘记放行 UDP 53 和 TCP 53 一些场景下 DNS 查询会回退到 TCP(比如响应过长),所以防火墙不仅要放 UDP 53,也得放 TCP 53。
  • 坑 4:DNS 缓存导致旧记录残留 修改配置后,可以用 systemd-resolve --flush-caches(systemd-resolved)或重启 nscd 服务来清空缓存。

效果验证:确认 DNS 已经正常

完成上述调整后,依次执行以下验证:

  1. ping 域名
   ping -c 4 baidu.com

看到有回包说明 DNS 解析和网络都正常。

  1. nslookup 详细结果
   nslookup baidu.com

输出中应显示 Address: ...Non-authoritative answer: 等。

  1. curl 测试 HTTP 访问
   curl -I https://www.baidu.com

返回 HTTP 200 表示完整链路畅通。

如果以上都没问题,你的服务器外网连接就彻底恢复了。
记住:遇到 Linux 服务器无法连接外网,优先排查 DNS 问题,按照本文的顺序检查 resolv.conf、systemd-resolved、防火墙和网络管理服务,90% 的情况都能解决。
如果在操作中遇到本文没提到的报错,欢迎留言讨论。

分享到:
上一篇
用大模型写 SQL 语句,导致数据库性能下降
下一篇
宝塔面板后台被锁定,教你解锁管理员账号
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意