在 Linux 机器上我们有三个网络接口,它们如下所示
| CentOS 6 Server
| ---------> eth0 (DHCP (192.168.1.x) Default Gateway, connects to a wired internet,
|----------> eth1 (IP : (10.165.11.139) GW to be used : (10.165.11.137), connects to a network A
|----------> eth2 (IP : (10.150.114.190) GW to be used: (10.150.114.191), connects to a network B
这里的问题是网络 A 和网络 B 都有具有相同 IP 的节点,例如:
10.232.130.171
10.232.130.172
10.232.131.100
Route-eth1 文件如下所示:
10.232.130.0/24 via 10.165.11.137
10.232.131.0/24 via 10.165.11.137
Route-eth2 文件如下所示:
10.232.130.0/24 via 10.150.114.189
10.232.131.0/24 via 10.150.114.189
因此 ping 10.232.130.171 将始终将其路由到 eth1 而不是 eth2 尝试使用与接口(星号 PBX)绑定的应用程序,来自上述 IP 的传入连接工作正常,但对其的任何响应都是通过 eth1 发送的,因此被拒绝。
有任何指示如何解决这个问题吗?
答案1
由于您提到传入连接,特别是错误方向的回复,听起来似乎使用源地址 10.150.114.190 (eth2) 发送的数据包使用通过 10.150.114.191 的路由就足够了,对于 eth1 也是如此。基于策略(源)的路由应该能够做到这一点。
它基本上应该归结为:
echo "201 net1" >> /etc/iproute2/rt_tables
echo "202 net2" >> /etc/iproute2/rt_tables
ip rule add from 10.165.11.139 lookup net1
ip route add 10.232.130.0/23 via 10.165.11.143 dev eth1 table net1
ip rule add from 10.150.114.190 lookup net2
ip route add 10.232.130.0/23 via 10.150.114.189 dev eth2 table net2
但我可能在这里错过了一些问题。
另请参见例如
- https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/
- https://superuser.com/questions/376667/how-to-route-only-specific-subnet-source-ip-to-a-pspecial-interface
- 在与传入相同的界面上回复?
请注意,这样做意味着中央主机上想要启动到“重复”网络之一的连接的任何进程都必须专门绑定到适当的接口/IP 地址,而且如果您路由来自两个 10.232. 130.0/23 阻止了外部世界,那么这还不够。
就我而言,上述内容也几乎未经测试。买者自负。我只是发布这是一个答案,以便可以对其进行否决。
老实说,如果我有选择,我会考虑贿赂两个网络的管理员,以对其中一个或两个网络进行重新编号。