问题现象描述
最近在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}