
故障概述
故障现象
排查思路总览
详细排查步骤
修复方案
验证测试
生产环境操作规范
预防措施
命令速查表
在新安装的Linux系统(特别是openEuler、CentOS等企业级发行版)中,系统安装完成后经常遇到网络未正确配置的情况。这会导致:
无法执行系统更新(dnf update、yum update)
无法安装软件包
无法访问外部网络资源
远程管理受阻(SSH无法连接)
| 场景 | 描述 |
|---|---|
| 虚拟机安装 | VMware、VirtualBox、KVM等虚拟化平台安装的系统 |
| 物理服务器 | 裸金属服务器首次开机配置 |
| 云环境 | 私有云环境中的镜像部署 |
| 离线安装 | 使用ISO镜像安装后未配置网络 |
# 1. 软件源访问失败[root@localhost ~]# dnf updateFailed to download metadata for repo 'openeuler'Error: Failed to download metadata for repo 'openeuler'# 2. 网络连接超时[root@localhost ~]# dnf install vimCentOS Linux 8 - AppStream 0.0 B/s | 0 B 00:02 Errors during downloading metadata for repo 'appstream': - Curl error (-28): Timeout was reached# 3. IP地址获取失败[root@localhost ~]# ip a1: lo: <LOOPBACK,UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff # 注意:eth0 没有 inet 地址,state 为 DOWN
| 症状 | 说明 |
|---|---|
ip a 无物理网卡IP | 网卡未获取到IP地址 |
ip a 网卡状态为DOWN | 网卡未启用 |
ping www.baidu.com 超时 | DNS解析正常但网络不通 |
ping 8.8.8.8 超时 | 物理网络连接问题 |
dnf install 失败 | 软件源无法访问 |

| 优先级 | 检查项 | 耗时 | 重要性 |
|---|---|---|---|
| 1 | 网卡硬件识别 | 1分钟 | ⭐⭐⭐⭐⭐ |
| 2 | 网卡驱动加载 | 1分钟 | ⭐⭐⭐⭐⭐ |
| 3 | NetworkManager服务 | 1分钟 | ⭐⭐⭐⭐⭐ |
| 4 | 网卡启用状态 | 30秒 | ⭐⭐⭐⭐ |
| 5 | IP地址获取 | 30秒 | ⭐⭐⭐⭐ |
| 6 | DNS配置 | 1分钟 | ⭐⭐⭐ |
| 7 | 软件源配置 | 2分钟 | ⭐⭐⭐ |
# 方法1:使用lspci查看PCI设备列表[lspci | grep-i ethernet]00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device (rev 01)# 方法2:使用ip link查看网络接口[ip link show]1: lo: <LOOPBACK,UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff3: ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff# 方法3:查看系统网络设备[cat /proc/net/dev]Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo frame compressed colls carrier lo: 123410000000123410000000 eth0: 0000000000000000
| 情况 | 判断 | 处理 |
|---|---|---|
lspci 能看到网卡 | 硬件正常 | 进入Step 2 |
lspci 看不到网卡 | 硬件问题 | 检查虚拟机配置或物理网卡 |
ip link 无eth0/ens33 | 内核未识别 | 加载驱动或检查配置 |
| 环境 | 常见网卡名 | 说明 |
|---|---|---|
| VMware | ens33, eth0 | 准虚拟化网卡 |
| KVM | virtio_net | VirtIO驱动 |
| VirtualBox | enp0s3 | PCI总线命名 |
| 物理服务器 | em1, p1p1 | 品牌服务器命名 |
# 查看已加载的网络相关模块[lsmod | grep-E"net|eth|e1000|virtio|bridge"]virtio_net 123450virtio_blk 67890virtio_pci 23450virtio_ring 111112 virtio_net,virtio_blkvirtio 12344 virtio_net,virtio_blk,virtio_pci,virtio_ring# 查看特定模块信息[modinfo virtio_net]filename: /lib/modules/5.10.0-xxx.el8.x86_64/kernel/drivers/net/virtio_net.ko.xzversion: 1.0.0license: GPLdescription: Virtio network driverauthor: Rusty Russellparm: csum:boolparm: gso:bool# 检查模块是否加载[modprobe -c | grep virtio_net]# 如果没有输出,说明模块未加载
| 驱动名称 | 适用环境 | 性能 |
|---|---|---|
| virtio_net | KVM, QEMU | 最佳(准虚拟化) |
| e1000 | VMware, VirtualBox | 一般(模拟驱动) |
| vmxnet3 | VMware | 较好(VMware专用) |
| ixgbevf | VMware vSphere | 较好(SR-IOV) |
# 如果驱动未加载,手动加载[modprobe virtio_net]# 设置开机自动加载[echo "virtio_net" > /etc/modules-load.d/virtio_net.conf]# 验证加载[lsmod | grep virtio_net]virtio_net 123450
# 查看NetworkManager服务状态[systemctl status NetworkManager]● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2024-01-1510:30:00 CST; 1h 30min ago Docs: man:NetworkManager(8) Main PID: 1024 (NetworkManager) Tasks: 3 (limit: 32768) Memory: 8.5M CPU: 123ms CGroup: /system.slice/NetworkManager.service └─1024 /usr/sbin/NetworkManager -n--config-dir=/etc/NetworkManager# 如果服务未运行,状态会显示为# Active: inactive (dead)
# 启动服务[systemctl start NetworkManager]# 设置开机自启[systemctl enable NetworkManager]# 重新加载systemd配置[systemctl daemon-reload]
| 状态 | 说明 | 处理 |
|---|---|---|
| active (running) | 服务正常运行 | 检查网络配置 |
| inactive (dead) | 服务未启动 | 启动服务 |
| failed | 服务启动失败 | 查看日志排查原因 |
| masked | 服务被禁用 | 取消mask后启动 |
# 查看所有网络连接[nmcli con show]NAME UUID TYPE DEVICE System eth0 5fb06bd0-0bb0-7ffb-45f2-d9f72e3935f1 ethernet eth0 ens33 6d4f3a2b-8c9e-4d5e-9f1a-2b3c4d5e6f7a ethernet --# 查看网络设备状态[nmcli dev status]DEVICE TYPE STATE CONNECTION eth0 ethernet connected System eth0 ens33 ethernet disconnected --# 查看具体网卡详情[nmcli dev show eth0]GENERAL.DEVICE: eth0GENERAL.TYPE: ethernetGENERAL.HWADDR: 52:54:00:12:34:56GENERAL.MTU: 1500GENERAL.STATE: 100 (connected)GENERAL.CONNECTION: System eth0GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1IP4.ADDRESS[1]: 192.168.1.100/24IP4.GATEWAY: 192.168.1.1IP4.DNS[1]: 8.8.8.8IP4.DNS[2]: 114.114.114.114
# 问题1:网卡未启用# 解决:启用网卡nmcli con up "System eth0"# 或nmcli dev connect eth0# 问题2:网卡显示"unavailable"# 解决:检查硬件连接和驱动nmcli dev set eth0 managed yes# 问题3:网卡显示"unmanaged"# 解决:修改NetworkManager配置nmcli dev set eth0 managed yes
# 启用网卡ip link set eth0 up# 查看网卡状态ip link show eth0# 查看IP地址ip addr show eth0# 添加IP地址(临时)ip addr add 192.168.1.100/24 dev eth0# 删除IP地址ip addr del 192.168.1.100/24 dev eth0
# 查看DNS配置[cat /etc/resolv.conf]# Generated by NetworkManagernameserver 8.8.8.8nameserver 114.114.114.114nameserver 192.168.1.1# 如果文件为空或无nameserver,DNS未配置
# 测试DNS解析nslookup www.baidu.comServer: 8.8.8.8Address: 8.8.8.8#53Non-authoritative answer:Name: www.baidu.comAddress: 220.181.38.149Name: www.baidu.comAddress: 220.181.38.150# 或使用dig命令dig www.baidu.com
# 检查DNS服务器是否可达ping-c38.8.8.8# 检查DNS端口是否可达telnet8.8.8.8 53# 查看DNS服务状态systemctl status systemd-resolved
# 查看所有repo源dnf repolist all# 或yum repolist all# 输出示例repo id repo name statusopeneuler openEuler enabledupdate openEuler Update enabledsource openEuler Source disableddebuginfo openEuler Debuginfo disabled
# 查看openEuler基础源配置cat /etc/yum.repos.d/openEuler.repo[openEuler]name=openEulerbaseurl=https://repo.openeuler.org/openEuler-24.03-LTS/OS/$basearch/enabled=1gpgcheck=0priority=1
# 测试网络到软件源curl-I https://repo.openeuler.org# 如果无法访问,检查是否需要代理curl-I--proxy http://proxy.example.com:8080 https://repo.openeuler.org# 清理缓存并重建dnf clean alldnf makecache
适用于内网环境,配置简单:
# 1. 启用网卡并设置为自动获取IPnmcli con mod "System eth0" ipv4.method autonmcli con mod "System eth0" ipv4.gateway ""nmcli con mod "System eth0" ipv4.addresses ""nmcli con mod "System eth0" ipv4.dns ""# 2. 激活连接nmcli con down "System eth0"nmcli con up "System eth0"# 3. 验证ip addr show eth0# 应该能看到类似:inet 192.168.1.100/24
适用于需要固定IP的生产环境:
# 1. 配置静态IP地址nmcli con mod "System eth0" ipv4.method manualnmcli con mod "System eth0" ipv4.addresses 192.168.1.100/24nmcli con mod "System eth0" ipv4.gateway 192.168.1.1nmcli con mod "System eth0" ipv4.dns "8.8.8.8,114.114.114.114"# 2. 配置DNS搜索域(可选)nmcli con mod "System eth0" ipv4.dns-search "example.com"# 3. 激活连接nmcli con down "System eth0"nmcli con up "System eth0"# 4. 验证ip addr show eth0ping -c 3 192.168.1.1
# 1. 备份原配置文件cp /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak# 2. 创建新的repo文件cat > /etc/yum.repos.d/openEuler.repo << 'EOF'[openEuler]name=openEuler - Local Mirrorbaseurl=http://192.168.1.200/repo/openEuler-24.03-LTS/OS/x86_64/enabled=1gpgcheck=0priority=1[update]name=openEuler Update - Local Mirrorbaseurl=http://192.168.1.200/repo/openEuler-24.03-LTS/Update/x86_64/enabled=1gpgcheck=0priority=1EOF# 3. 清理并重建缓存dnf clean alldnf makecache
# 1. 设置全局代理(所有服务使用)cat >> /etc/environment << 'EOF'export http_proxy=http://proxy.example.com:8080export https_proxy=http://proxy.example.com:8080export no_proxy="localhost,127.0.0.1,.example.com"EOF# 2. 为dnf单独设置代理cat >> /etc/dnf/dnf.conf << 'EOF'proxy=http://proxy.example.com:8080proxy_username=your_usernameproxy_password=your_passwordEOF# 3. 测试代理dnf makecache
# 备份原配置cp /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak# 创建阿里云镜像配置cat > /etc/yum.repos.d/openEuler.repo << 'EOF'[openEuler]name=openEulerbaseurl=https://mirrors.aliyun.com/openEuler/openEuler-24.03-LTS/OS/x86_64/enabled=1gpgcheck=0priority=1EOF# 重建缓存dnf clean alldnf makecache
# 1. 测试网关连通性ping -c 3 192.168.1.1# 2. 测试DNS解析ping -c 3 www.baidu.com# 3. 测试公网IPping -c 3 8.8.8.8# 4. 测试端口连通性telnet repo.openeuler.org 443curl -I https://repo.openeuler.org
# 1. 列出可用软件包dnf list available | head -20# 2. 搜索软件包dnf search vim# 3. 安装测试包dnf install -yvim-q# 4. 系统更新测试dnf update --dry-run
#!/bin/bash# network_diagnosis.sh - 网络故障诊断脚本echo "=========================================="echo "Linux网络故障诊断报告"echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"echo "主机名: $(hostname)"echo "=========================================="echo ""echo "【1. 网卡硬件检查】"echo "PCI设备列表(以太网控制器):"lspci | grep-i ethernetecho ""echo "【2. 内核模块检查】"echo "已加载的网络模块:"lsmod | grep-E"net|eth| virtio"echo ""echo "【3. 网络接口状态】"ip -brief addr showecho ""echo "【4. NetworkManager状态】"systemctl is-active NetworkManagerecho ""echo "【5. DNS配置】"cat /etc/resolv.confecho ""echo "【6. 软件源状态】"dnf repolistecho ""echo "【7. 网络连通性测试】"echo "网关连通性:"ping -c 2 -W 2 192.168.1.1 2>&1 | tail -2echo ""echo "DNS解析测试:"nslookup www.baidu.com 2>&1 | grep-A1"^Name:" || echo"DNS解析失败"echo ""echo "【8. 测试系统更新】"dnf check-update -q2>&1 | head -5echo ""echo "=========================================="echo "诊断完成"echo "=========================================="
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 记录当前配置 | ip addr > /tmp/ip_before.txt |
| 2 | 备份配置文件 | cp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ |
| 3 | 创建恢复点 | VMware快照或物理服务器断电准备 |
| 4 | 通知相关人员 | 告知维护窗口 |
⚠️ 重要提示:1. 远程操作时,确保有备用连接方式(如ILO/DRAC/IPMI)2. 修改网络配置前,确保当前会话不会断开3. 使用screen或tmux保持会话4. 每步操作后立即验证
# ========== 生产环境网络配置修改流程 ==========# 第一阶段:备份与准备echo "=== 阶段1: 备份配置 ==="cp /etc/resolv.conf /etc/resolv.conf.bak.$(date +%Y%m%d%H%M)cp /etc/NetworkManager/system-connections/*.nmconnection /tmp/ 2>/dev/nullip addr > /tmp/ip_before.txtip route > /tmp/route_before.txt# 第二阶段:验证当前状态echo "=== 阶段2: 验证当前状态 ==="ip addr show eth0ping -c 2 192.168.1.1# 第三阶段:执行修改echo "=== 阶段3: 执行修改 ==="nmcli con mod "System eth0" ipv4.addresses 192.168.1.100/24nmcli con mod "System eth0" ipv4.gateway 192.168.1.1nmcli con mod "System eth0" ipv4.dns "8.8.8.8"# 第四阶段:重启服务echo "=== 阶段4: 重启服务 ==="nmcli con down "System eth0"sleep2nmcli con up "System eth0"# 第五阶段:验证结果echo "=== 阶段5: 验证结果 ==="ip addr show eth0ping -c 3 www.baidu.comdnf makecacheecho "=== 完成 ==="
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 安装时配置网络 | 打开"网络与主机"配置 |
| 2 | 设置主机名 | 使用规范的主机名命名 |
| 3 | 配置网络 | 设置IP、网关、DNS |
| 4 | 启用网络 | 确保网络服务开机启动 |
# /etc/NetworkManager/system-connections/eth0.nmconnection[connection]id=eth0uuid=5fb06bd0-0bb0-7ffb-45f2-d9f72e3935f1type=ethernetautoconnect-priority=-999interface-name=eth0[ethernet]mac-address-blacklist=[ipv4]method=manualaddress1=192.168.1.100/24,192.168.1.1dns=8.8.8.8;114.114.114.114;dns-search=route1=0.0.0.0/0,192.168.1.1[ipv6]method=disabled[proxy]
chmod 600 /etc/NetworkManager/system-connections/eth0.nmconnectionchown root:root /etc/NetworkManager/system-connections/eth0.nmconnection
| 监控项 | 阈值 | 告警方式 |
|---|---|---|
| 网卡状态 | state=DOWN | 邮件+短信 |
| 网络丢包率 | >1% | 邮件 |
| DNS解析失败 | 连续3次 | 邮件+短信 |
| 软件源不可用 | 连续2次 | 邮件 |
# 每周巡检脚本#!/bin/bashLOGFILE="/var/log/network_health.log"echo "=== 网络健康检查 $(date) ===" >> $LOGFILE# 检查网络连通性ping -c 3 192.168.1.1 >> $LOGFILE2>&1ping -c 3 www.baidu.com >> $LOGFILE2>&1# 检查软件源dnf check-update >> $LOGFILE2>&1# 检查DNSnslookup www.baidu.com >> $LOGFILE2>&1# 定期清理日志find /var/log -name"network_health.log"-mtime+30-delete
| 命令 | 作用 | 示例 |
|---|---|---|
ip addr | 查看IP地址 | ip addr show eth0 |
ip link | 查看网卡状态 | ip link set eth0 up |
ip route | 查看路由表 | ip route show |
ss -tlnp | 查看监听端口 | ss -tlnp \| grep 22 |
netstat -rn | 查看路由表 | netstat -rn |
ip neigh | 查看ARP表 | ip neigh show |
| 命令 | 作用 | 示例 |
|---|---|---|
nmcli dev status | 查看设备状态 | nmcli dev status |
nmcli con show | 查看连接列表 | nmcli con show |
nmcli con up | 激活连接 | nmcli con up "System eth0" |
nmcli con down | 关闭连接 | nmcli con down "System eth0" |
nmcli con mod | 修改连接 | nmcli con mod "eth0" ipv4.addresses 192.168.1.100/24 |
nmcli dev connect | 连接设备 | nmcli dev connect eth0 |
nmtui | 文本界面配置 | nmtui |
| 命令 | 作用 | 示例 |
|---|---|---|
nslookup | DNS查询 | nslookup www.baidu.com |
dig | 详细DNS查询 | dig www.baidu.com |
host | 简单DNS查询 | host www.baidu.com |
cat /etc/resolv.conf | 查看DNS配置 | cat /etc/resolv.conf |
| 命令 | 作用 | 示例 |
|---|---|---|
dnf repolist | 列出所有源 | dnf repolist |
dnf list | 列出软件包 | dnf list available |
dnf search | 搜索软件包 | dnf search nginx |
dnf install | 安装软件包 | dnf install vim |
dnf update | 更新软件包 | dnf update |
dnf clean all | 清理缓存 | dnf clean all |
dnf makecache | 重建缓存 | dnf makecache |
| 命令 | 作用 | 示例 |
|---|---|---|
systemctl status NetworkManager | 查看NM状态 | systemctl status NetworkManager |
systemctl start NetworkManager | 启动NM | systemctl start NetworkManager |
systemctl enable NetworkManager | 开机自启 | systemctl enable NetworkManager |
journalctl -u NetworkManager -f | 查看NM日志 | journalctl -u NetworkManager -f |

| 文件/目录 | 说明 |
|---|---|
/etc/NetworkManager/ | NetworkManager配置目录 |
/etc/NetworkManager/system-connections/ | 网卡连接配置 |
/etc/resolv.conf | DNS配置文件 |
/etc/hosts | 主机名解析 |
/etc/sysconfig/network | 网络全局配置 |
/etc/sysconfig/network-scripts/ | 网卡脚本配置 |
/etc/dnf/dnf.conf | DNF全局配置 |
/etc/yum.repos.d/ | 软件源配置 |