一、什么是 Linux 的“非对称路由”
1️⃣ 定义(先给结论)
非对称路由指的是:
数据包从 A 网卡进来,但回包却从 B 网卡出去
在多网卡、多出口服务器上非常常见,比如:
- 双网卡
- 多默认网关
- 同一台服务器连多个网络
你之前的情况就是典型的非对称路由。
2️⃣ Linux 默认为什么不喜欢非对称路由?
因为它可能意味着:
- IP 欺骗(spoofing)
- 流量劫持
- 路由异常
所以 Linux 默认启用了一个安全机制:
👉 反向路径过滤(Reverse Path Filtering,rp_filter)
二、rp_filter 的三种模式(重点)
rp_filter 就是你问的关键。
查看当前模式
sysctl net.ipv4.conf.all.rp_filter
1️⃣ strict 模式(严格模式)——默认
net.ipv4.conf.all.rp_filter = 1
行为:
如果一个包从网卡 X 进来
但根据路由表,回这个源地址不该走 X
→ 直接丢包
📌 特点:
- 安全
- 不允许非对称路由
- 多出口服务器必踩坑
2️⃣ loose 模式(宽松模式)⭐
net.ipv4.conf.all.rp_filter = 2
行为(你重点要记这个):
只要系统中存在一条到源 IP 的路由
不管从哪个网卡进
→ 都放行
📌 关键差异:
| 模式 | 要求 |
|---|---|
| strict (1) | 回包接口必须一致 |
| loose (2) | 只要能路由到就行 |
👉 允许非对称路由
3️⃣ off(完全关闭)
net.ipv4.conf.all.rp_filter = 0
行为:
- 不做任何检查
- 安全性最低
- 极少推荐
三、宽松模式(loose mode)怎么配置?
1️⃣ 临时生效(立刻测试)
sysctl -w net.ipv4.conf.all.rp_filter=2 sysctl -w net.ipv4.conf.default.rp_filter=2 # 单独网卡(可选) sysctl -w net.ipv4.conf.enp132s0f0.rp_filter=2 sysctl -w net.ipv4.conf.enp132s0f1.rp_filter=2
2️⃣ 永久生效(重启不丢)
编辑:
vi /etc/sysctl.conf
加入:
net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2
应用:
sysctl -p
四、宽松模式能解决你之前的问题吗?
👉 能
你的场景:
- 外部 ping
10.xx.247.2 - 请求进
enp132s0f1 - 回包走
enp132s0f0 - strict 模式 → ❌ 丢包
- loose 模式 → ✅ 放行
所以你会看到:
不开策略路由,只改 rp_filter=2,也能 ping 通
五、那为什么我还是强烈推荐“策略路由”?(说人话)
宽松模式 = 放行
策略路由 = 控制
| 方案 | 能否解决 | 安全性 | 可控性 |
|---|---|---|---|
| rp_filter=2 | ✅ | 中 | ❌ |
| 策略路由 | ✅ | 高 | ✅ |
| rp_filter=0 | ✅ | 低 | ❌ |
生产环境建议:
- ✔ 策略路由 + strict
- ✔ 或 策略路由 + loose
- ❌ 不建议:只靠 loose
六、什么时候“宽松模式”是合理选择?
✅ 适合场景
- 负载均衡器后端
- 非对称设计是刻意的
- 网络结构你完全可控
- 临时排障、验证
❌ 不适合场景
- 公网服务器
- 防火墙、边界设备
- 不清楚流量路径的环境
《多网卡如何区分路由,使用宽松模式测试网络》 是转载文章,点击查看原文。