![如何确保 Linux 中的出站流量与入站流量使用相同的接口?](https://linux22.com/image/1286880/%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%20Linux%20%E4%B8%AD%E7%9A%84%E5%87%BA%E7%AB%99%E6%B5%81%E9%87%8F%E4%B8%8E%E5%85%A5%E7%AB%99%E6%B5%81%E9%87%8F%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E6%8E%A5%E5%8F%A3%EF%BC%9F.png)
我有一个 Linux 机器,有两个接口:一个用于数据,另一个用于管理。如果两个接口都在同一个网络上,我会为两个接口添加路由。
想象一下路由表是:
192.168.132.0 255.255.255.0 eth0
192.168.132.0 255.255.255.0 eth1 ( management interface)
问题是,即使与管理 IP()发起了连接eth1
,返回流量仍会打开eth0
。
如何确保连接上的返回流量使用与转发流量相同的接口?
答案1
理想情况下,两个接口都应该是不同 IP 子网的一部分,但如果您确信只需要这样走,那么您应该使用 Linux 分割访问路由。
首先,创建两个路由表 T1 和 T2,用于发送到或来自这些 NIC 的数据包,方法是添加以下行
252 T1
251 T2
到 /etc/iproute2/rt_tables。
接下来,通过这些表设置路由规则来路由传入和传出的数据包:
ip route add 10.105.16.0/24 dev eth0 src 10.105.16.100 table T1
ip route add default via 10.105.16.2 dev eth0 src 10.105.16.100 table T1
ip rule add from 10.105.16.100 table T1
ip route add 10.105.16.0/24 dev eth1 src 10.105.16.101 table T2
ip route add default via 10.105.16.2 dev eth1 src 10.105.16.101 table T2
ip rule add from 10.105.16.101 table T2