Linux网络故障排查:RTNETLINK answers: Network is unreachable的三种实战修复方案
1. 遇到Network is unreachable时先别慌第一次在Linux终端里看到RTNETLINK answers: Network is unreachable这个报错时我正急着部署服务器结果连最基本的ping测试都失败。这个错误就像一堵突然出现的墙把整个网络通信拦腰截断。后来才发现这其实是Linux内核通过netlink协议RTNETLINK告诉我们当前的路由配置出了问题系统找不到通往目标网络的路径。这种情况最常见于三种场景虚拟网卡抽风、物理网卡被禁用、或者虚拟机网络配置异常。我见过不少运维新手遇到这个错误就重装系统其实完全没必要。下面分享的这三种解决方案都是我亲手验证过的实战经验从最简单的网卡重启到复杂的虚拟机网络重构总有一招能帮你解决问题。2. 虚拟网卡异常先给网卡做个重启SPA2.1 诊断网卡状态上周公司的测试服务器突然失联ssh连接全部超时。到机房直接操作才发现所有网络请求都返回Network is unreachable。用ip addr show命令检查时发现ens33网卡虽然显示UP状态但RX/TX数据包计数半小时都没变化就像假死了一样。这种情况特别常见于长时间运行的虚拟机网卡驱动可能会进入奇怪的状态。我的习惯是用组合命令快速诊断ip -br addr show # 查看网卡简要状态 ethtool ens33 | grep -E Link detected|Speed # 检查物理连接 cat /proc/net/dev | grep ens33 # 查看流量统计2.2 软重启网卡最简单的修复方式就是给网卡做个重启SPA。注意这里说的不是物理重启服务器而是用iproute2工具温柔地重置网络接口sudo ip link set ens33 down sleep 2 # 给内核一点缓冲时间 sudo ip link set ens33 up这个操作相当于给网卡拔插网线。有次在Ubuntu 20.04上执行时发现光执行down/up还不够还需要额外刷新DHCPsudo dhclient -r ens33 # 释放旧租约 sudo dhclient ens33 # 获取新IP2.3 预防性维护技巧对于经常出现这类问题的服务器我习惯在crontab里设置每天自动检查# 每天凌晨检查网卡状态 0 3 * * * if ! ping -c1 8.8.8.8; then ip link set ens33 down ip link set ens33 up; fi3. 主机适配器被禁用检查那些看不见的开关3.1 物理机与虚拟机的差异有次给客户调试戴尔服务器时所有网络命令都返回unreachable最后发现是BIOS里禁用了网卡。这种情况在物理机和虚拟机环境表现不同物理服务器可能需要检查BIOS设置或物理开关某些高端服务器有硬件网络开关本地虚拟机Hyper-V/VirtualBox的虚拟网卡可能被主机防火墙拦截云服务器安全组配置错误会导致类似现象3.2 Linux下的深度检查除了简单的ifconfig我们还需要排查这些地方# 查看内核是否识别到网卡 lspci | grep -i ethernet # 检查驱动加载情况 lsmod | grep igb # Intel网卡驱动示例 # 查看网络管理器状态 systemctl status NetworkManager在CentOS 7上遇到过一次诡异情况NetworkManager和network服务冲突导致接口被禁用。解决方案是sudo systemctl stop NetworkManager sudo systemctl restart network3.3 Windows主机的配合检查如果是VMware Workstation的虚拟机别忘了检查主机的网络适配器按WinR输入ncpa.cpl打开网络连接右键VMware Network Adapter选择启用检查属性中的VMware Bridge Protocol是否勾选4. 虚拟机网络配置重构从零搭建虚拟网络4.1 VMware的虚拟网络编辑器这个问题在VMware环境特别常见。有次在培训课上20个学员里有6个遇到Network is unreachable都是因为虚拟机网络配置被意外修改。正确操作流程应该是关闭所有运行的虚拟机打开VMware → 编辑 → 虚拟网络编辑器点击右下角更改设置获取管理员权限选择VMnet0桥接模式或VMnet8NAT模式确保桥接到选项选择的是正确的物理网卡4.2 排查桥接模式的问题桥接模式最容易出问题。记得检查主机是否连接有线网络WiFi桥接经常不稳定是否有多块物理网卡选错了桥接目标企业网络是否禁止MAC地址克隆可以用这个命令检查桥接状态brctl show # 如果没有brctl用sudo apt install bridge-utils安装4.3 重建虚拟网络配置当所有方法都无效时可以彻底重置VMware网络在虚拟网络编辑器点击还原默认设置删除/etc/vmware/networking文件重新启动VMware网络服务sudo /etc/init.d/vmware restart5. 进阶排查当常规方法都失效时5.1 路由表深度分析有次在Kubernetes集群节点上遇到这个错误最后发现是路由表被Calico插件污染。关键诊断命令ip route show table all # 显示所有路由表 route -n # 传统路由查看方式 traceroute -n 8.8.8.8 # 检查路由路径5.2 防火墙规则检查iptables/nftables规则可能会阻断流量sudo iptables -L -n -v # 查看IPv4规则 sudo ip6tables -L -n -v # IPv6规则 sudo nft list ruleset # 如果使用nftables5.3 内核参数调整某些情况下需要调整内核网络参数# 临时启用IP转发 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward # 永久修改 echo net.ipv4.ip_forward1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p6. 预防胜于治疗建立网络健康检查表经过多次踩坑后我总结了一套预防性检查流程每日检查使用ip -s link查看网卡错误计数检查/var/log/syslog中的网络错误变更管理修改路由前先备份当前配置ip route save route_backup.txt使用nmcli con up/down代替直接ifdown/ifup文档记录记录服务器的正常路由表状态保存工作网络配置的基线版本这套方法帮我减少了90%的网络故障处理时间。现在遇到Network is unreachable时我只需要按这个检查表逐步排查通常10分钟内就能定位问题根源。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2437936.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!