公司动态

Linux多网卡路由配置问题与解决方案

📅 2026/8/7 8:52:18
Linux多网卡路由配置问题与解决方案
1. 问题背景与现象描述上周在部署一台新服务器时遇到了一个典型的网络配置问题这台机器配备了四块物理网卡分别连接了不同的网络环境。在完成基础系统安装后发现机器无法正常访问外网但内网通信完全正常。这种多网卡环境下的网络连通性问题在实际运维中相当常见特别是当系统存在多个默认路由配置时。具体表现为能ping通同网段的其他主机能通过SSH连接同VLAN的管理口无法解析DNS域名无法访问互联网资源traceroute显示流量从错误的网卡发出2. 网络拓扑与配置分析2.1 物理连接情况这台Dell R740服务器配置如下eno1连接192.168.1.0/24网段管理网络eno2连接10.0.0.0/24网段业务网络Aeno3连接172.16.0.0/24网段业务网络Beno4未启用2.2 当前路由表分析通过ip route show命令查看时发现了问题所在default via 192.168.1.1 dev eno1 proto static metric 100 default via 10.0.0.1 dev eno2 proto static metric 101 192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.100 metric 100 10.0.0.0/24 dev eno2 proto kernel scope link src 10.0.0.100 metric 101 172.16.0.0/24 dev eno3 proto kernel scope link src 172.16.0.100 metric 102关键问题点存在两个默认路由default route管理网卡(eno1)的路由metric值更低100 101所有外网流量都优先从管理网卡发出3. 问题诊断与解决方案3.1 路由优先级原理Linux系统选择路由时遵循以下规则优先匹配最长前缀最具体的路由前缀相同时选择metric值更小的路由metric相同时可能产生路由抖动在本次案例中由于两个默认路由的前缀长度相同都是0.0.0.0/0系统会选择metric值更小的eno1作为出口而管理网络通常不配置外网访问权限。3.2 解决方案实施步骤3.2.1 临时修改方案立即生效# 删除原有默认路由 sudo ip route del default via 192.168.1.1 # 确认路由表 ip route show | grep default3.2.2 永久配置方案CentOS/RHEL修改网卡配置文件sudo vi /etc/sysconfig/network-scripts/ifcfg-eno1移除或注释以下行GATEWAY192.168.1.1为主业务网卡配置默认网关sudo vi /etc/sysconfig/network-scripts/ifcfg-eno2确保包含GATEWAY10.0.0.1 DEFROUTEyes重启网络服务sudo systemctl restart network3.3 验证步骤检查路由表ip route show | grep default应只看到一个默认路由通过eno2出去测试外网连通性ping -c 4 8.8.8.8 curl -I https://example.com检查路径追踪traceroute -n 8.8.8.8第一跳应为10.0.0.14. 高级配置与优化建议4.1 多网卡绑定方案对于需要高可用的场景建议使用bonding技术# 安装bonding驱动 sudo modprobe bonding # 创建bond0接口 sudo nmcli con add type bond con-name bond0 ifname bond0 mode active-backup # 添加从属接口 sudo nmcli con add type bond-slave ifname eno2 master bond0 sudo nmcli con add type bond-slave ifname eno3 master bond0 # 配置IP和网关 sudo nmcli con mod bond0 ipv4.addresses 10.0.0.100/24 sudo nmcli con mod bond0 ipv4.gateway 10.0.0.1 sudo nmcli con mod bond0 ipv4.dns 8.8.8.8 sudo nmcli con mod bond0 ipv4.method manual4.2 策略路由配置对于复杂网络环境可以使用iproute2的高级功能# 创建自定义路由表 echo 200 custom /etc/iproute2/rt_tables # 添加路由规则 ip rule add from 192.168.1.100 lookup custom ip route add default via 192.168.1.1 table custom # 持久化配置 sudo bash -c cat /etc/rc.local EOF #!/bin/bash ip rule add from 192.168.1.100 lookup custom ip route add default via 192.168.1.1 table custom EOF sudo chmod x /etc/rc.local5. 常见问题排查指南5.1 典型错误现象网络时通时断检查是否有多个默认路由metric值相同使用ip route get 8.8.8.8查看实际路由选择SSH连接突然断开可能是默认路由切换导致检查系统日志journalctl -u NetworkManagerDNS解析失败但IP可通确认DNS服务器可达检查/etc/resolv.conf配置5.2 实用诊断命令# 查看完整路由表 ip route show table all # 追踪路由决策过程 ip route get 8.8.8.8 # 检查ARP缓存 ip neigh show # 查看网络接口统计 ip -s link show # 抓包分析 sudo tcpdump -i any -nn -v icmp or port 536. 经验总结与最佳实践生产环境建议管理网络与业务网络物理隔离为每个网卡配置明确的用途标签使用NetworkManager而非直接修改ifcfg文件RHEL8配置规范单台服务器只保留一个DEFROUTEyes的配置为备用路由设置更高的metric值使用/etc/sysconfig/network-scripts/route-ifname文件管理静态路由自动化检查脚本#!/bin/bash # 检查多默认路由问题 if [ $(ip route show | grep -c ^default) -gt 1 ]; then echo 发现多个默认路由 ip route show | grep ^default exit 1 fi # 检查网关可达性 gateway$(ip route show | awk /^default/ {print $3}) if ! ping -c 2 -W 1 $gateway /dev/null; then echo 默认网关 $gateway 不可达 exit 1 fi在实际运维中我习惯为每台服务器建立网络配置档案记录每个接口的用途、VLAN、IP和路由信息。当遇到网络问题时这份文档能快速帮助定位配置是否被意外修改。对于关键业务服务器建议在变更网络配置前先做好回退方案比如准备一个带网络恢复选项的应急启动镜像。