Fedora/Arch Linux系统DNS解析失败导致无网络连接的排查与解决方案


阅读 12 次

问题现象描述

最近在Fedora和Arch Linux系统中都遇到了相同的问题:系统安装时网络正常,但在操作软件源镜像(fastestmirror配置)后,出现以下症状:


$ ping 8.8.8.8
网络不可达
$ ping google.com
名称解析暂时失败
$ sudo dnf install
无法解析主机:mirrors.fedoraproject.org

快速诊断步骤

首先通过以下命令检查网络基础状态:


# 检查网络接口状态
ip addr show
# 检查路由表
ip route
# 测试基础网络连通性
ping -c 4 1.1.1.1
# 检查DNS配置
cat /etc/resolv.conf
# 查看systemd-resolved状态(如果使用)
systemctl status systemd-resolved

常见原因分析

根据国内开发者的实际经验,这类问题通常由以下原因导致:

  • NetworkManager与systemd-resolved服务冲突
  • /etc/resolv.conf被错误配置或变成不可写的符号链接
  • 防火墙规则阻止了DNS查询(特别是53端口)
  • DHCP获取的DNS服务器不可用
  • 软件源镜像配置错误导致网络服务异常

解决方案实践

方案1:重置网络配置


# 停止NetworkManager
sudo systemctl stop NetworkManager
# 删除现有配置
sudo rm /etc/resolv.conf
# 创建新的resolv.conf
echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf
# 重启网络服务
sudo systemctl restart NetworkManager

方案2:修复systemd-resolved冲突


# 检查是否使用resolved
ls -l /etc/resolv.conf
# 如果是指向/run/systemd/resolve/stub-resolv.conf的链接
sudo unlink /etc/resolv.conf
sudo systemctl stop systemd-resolved
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf

方案3:手动指定DNS服务器


# 对于NetworkManager管理的连接
nmcli con mod "连接名" ipv4.dns "180.76.76.76 119.29.29.29"
nmcli con up "连接名"
# 或者直接修改配置文件
sudo vi /etc/NetworkManager/NetworkManager.conf
# 在[main]部分添加:
dns=default

深度排查技巧

如果上述方法无效,可以使用更底层的网络诊断工具:


# 检查DNS查询过程
dig +trace google.com
# 检查53端口连通性
telnet 114.114.114.114 53
# 抓取DNS数据包
sudo tcpdump -i any port 53 -w dns.pcap
# 检查服务依赖关系
systemctl list-dependencies network.target

预防措施

为避免再次出现此类问题,建议:

  • 在修改/etc/dnf/dnf.conf时备份原配置
  • 使用国内稳定的DNS服务器如阿里云(223.5.5.5)或DNSPod(119.29.29.29)
  • 在~/.bashrc中添加网络测试别名:

alias nettest='ping -c 2 223.5.5.5 && dig +short google.com'

{end}