Linux 双网卡路由配置指南

Linux 双网卡路由配置指南

chinese_cover

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. 最佳实践

  1. 避免同一子网多IP:尽量避免将多个网卡配置在同一子网
  2. 明确路由策略:为每个IP配置明确的路由策略和路由表
  3. 调整反向路径过滤:在多网卡环境中使用宽松模式(rp_filter=2​)
  4. 使用metric区分优先级:为不同网卡设置不同的metric值
  5. 永久生效配置:通过netplan配置确保重启后配置依然有效
  6. AWS特殊考虑
  • 检查安全组配置
  • 禁用Source/Destination Check
  • 配置正确的路由表关联

通过遵循这些配置原则和排查方法,可以有效解决Linux服务器双网卡环境下的路由问题,确保应用程序在多IP环境下正常运行。

发表评论