Linux 双网卡路由配置指南
1. 问题介绍
在服务器配置双网卡时,常见的问题是流量无法按预期从正确的网卡出站或入站。本文档以一个实际案例为基础,介绍如何配置和排查Linux(尤其是Ubuntu)系统中的路由问题。
2. 环境说明
示例网络架构
- 服务器:Ubuntu 20.04 LTS,运行Zabbix服务
- 网卡1 (ens5):192.168.1.2/24,网关 192.168.1.254
- 网卡2 (ens6):192.168.1.1/24,网关 192.168.1.254
- 服务:监听在端口10051(Zabbix Server)
问题描述
- 从分支办公室可以连接到
192.168.1.2:10051
- 无法连接到
192.168.1.1:10051
,尽管服务监听在0.0.0.0:10051
3. Linux路由基础
路由表结构
Linux使用多个路由表和路由策略来决定数据包的流向:
# 查看路由表列表cat /etc/iproute2/rt_tables## reserved values#255 local254 main253 default0 unspec## local#100 primary200 secondary
默认路由和指标值(metric)
# 查看当前路由表ip route showdefault via 192.168.1.254 dev ens5 proto dhcp src 192.168.1.2 metric 100192.168.1.0/24 dev ens6 proto kernel scope link src 192.168.1.1192.168.1.0/24 dev ens5 proto kernel scope link src 192.168.1.2 metric 100
4. Netplan配置
Ubuntu使用Netplan管理网络配置,下面是两个网卡的配置文件:
主网卡配置 /etc/netplan/50-cloud-init.yaml
network: ethernets: ens5: dhcp4: true dhcp6: false match: macaddress: 00:11:22:33:44:55 set-name: ens5 routing-policy: - from: 192.168.1.2 table: 100 - to: 192.168.1.2 table: 100 routes: - to: default via: 192.168.1.254 table: 100 metric: 200 # 高值意味着低优先级 version: 2
辅助网卡配置 /etc/netplan/99-ens6.yaml
network: ethernets: ens6: addresses: - 192.168.1.1/24 routing-policy: - from: 192.168.1.1 table: 200 - to: 192.168.1.1 table: 200 routes: - to: default via: 192.168.1.254 table: 200 - to: default via: 192.168.1.254 metric: 50 # 低值意味着高优先级
5. 常见问题诊断
路由问题检查
# 查看路由表ip route show# 查看策略路由ip rule list# 查看反向路径过滤设置sysctl -a | grep rp_filter# 查看IP转发sysctl -a | grep ip_forward# 抓包分析tcpdump -i any port 10051 -nn
内核参数调整
# 启用IP转发sysctl -w net.ipv4.ip_forward=1# 设置反向路径过滤为宽松模式sysctl -w net.ipv4.conf.all.rp_filter=2sysctl -w net.ipv4.conf.ens5.rp_filter=2sysctl -w net.ipv4.conf.ens6.rp_filter=2
6. 解决方案
调整路由优先级
通过设置metric值控制默认路由优先级:
# 删除旧默认路由sudo ip route del default via 192.168.1.254 dev ens5# 添加新默认路由,通过业务网卡sudo ip route add default via 192.168.1.254 dev ens6 metric 50
7. 最佳实践
- 避免同一子网多IP:尽量避免将多个网卡配置在同一子网
- 明确路由策略:为每个IP配置明确的路由策略和路由表
- 调整反向路径过滤:在多网卡环境中使用宽松模式(
rp_filter=2
) - 使用metric区分优先级:为不同网卡设置不同的metric值
- 永久生效配置:通过netplan配置确保重启后配置依然有效
- AWS特殊考虑:
- 检查安全组配置
- 禁用Source/Destination Check
- 配置正确的路由表关联
通过遵循这些配置原则和排查方法,可以有效解决Linux服务器双网卡环境下的路由问题,确保应用程序在多IP环境下正常运行。