BusyBox下主路由表无默认网关能否正常建立出站流量
不需要强制在main路由表中添加默认网关条目,你遇到的出站流量中断问题,本质是策略路由规则覆盖不全+配置笔误导致,和main表是否存在默认路由没有硬性绑定关系。
你当前配置的ip rule规则仅覆盖两类流量:
- 源IP为eth0/eth1接口地址的流量(对应
from 10.184.194.108/32、from 10.184.194.109/32规则) - 目标IP为eth0/eth1接口地址的入站流量(对应
to 10.184.194.108/32、to 10.184.194.109/32规则)
入站流量能正常工作,是因为入站包的源/目标IP是明确的,可以命中上述规则,走到对应自定义路由表查得转发路径。但设备本地主动发起的互联网出站流量,在路由查找阶段还没有确定出站接口和源IP,无法匹配你配置的from/to规则,会直接按默认优先级落到main路由表查找。而你的main路由表只有接口up时自动生成的直连网段路由,没有非直连网段的转发路径,查路由失败就会直接丢包,表现为出站流量中断。
当你在main表添加默认网关后,流量在main表可以查到默认路由,内核会先选定出站接口和源IP,要么直接按main表路由转发,要么命中源地址规则走自定义表,所以通信恢复,但这种配置会让你预设的分接口独立路由策略失效,同网段双接口场景下很容易出现流量乱走、连接异常的问题。
另外你的配置里还有一处笔误:给eth1-rt路由表添加直连路由时,src参数写的是eth0的地址10.184.194.108,不是eth1自身的10.184.194.109,也会导致eth1的转发异常。
不需要给main表添加默认路由,按以下步骤调整即可实现双接口独立路由:
- 修正路由表配置错误
先删除eth1-rt表中错误的直连路由,添加正确条目:ip route del 10.184.194.0/24 dev eth1 src 10.184.194.108 table eth1-rt ip route add 10.184.194.0/24 dev eth1 src 10.184.194.109 table eth1-rt - 调整策略路由规则
删除冗余的目标地址匹配规则(入站回应流量会自动匹配源地址规则,不需要单独配置to规则),添加本地出站流量的匹配规则,优先级设置为比main表默认的32766更高,确保流量在走到main表之前就能命中自定义路由表:# 删除冗余规则 ip rule del to 10.184.194.108/32 table eth0-rt ip rule del to 10.184.194.109/32 table eth1-rt # 保留源地址匹配规则,优先级设为50/60,优先处理已明确源IP的流量 ip rule add from 10.184.194.108/32 table eth0-rt priority 50 ip rule add from 10.184.194.109/32 table eth1-rt priority 60 # 添加本地主动出站流量的匹配规则,iif lo代表本地始发流量,按出站接口绑定对应路由表 ip rule add iif lo oif eth0 table eth0-rt priority 100 ip rule add iif lo oif eth1 table eth1-rt priority 200 - 关闭严格反向路由校验
由于两个接口同属一个二层广播域,需要将接口的rp_filter设置为松散模式,避免反向路由校验丢包:sysctl -w net.ipv4.conf.eth0.rp_filter=2 sysctl -w net.ipv4.conf.eth1.rp_filter=2
配置完成后可以用ip rule list查看规则顺序,用ip route get 8.8.8.8 from 10.184.194.108、ip route get 8.8.8.8 oif eth1这类命令验证路由查找结果,确认流量走到对应自定义路由表即可。
内容的提问来源于stack exchange,提问作者Parvathy J.R

