如何在多个接口上正确配置点对点连接的路由表?

如何在多个接口上正确配置点对点连接的路由表?

我有 2 台服务器,每台都有 3 个网络接口。1 个接口(“eno”)用于通过网关连接互联网,2 个接口(“ens0”、“ens1”)用于直接点对点连接两台服务器。它看起来像:

    |
   gw
 |    |
S1 == S2

我需要分别将数据从“ens0”发送到“ens0”,并从“ens1”发送到“ens1”。当我尝试在 S2 服务器上执行此操作时,我发现所有流量都经过 ens0尽管我将 2 个套接字 (C++) 绑定到不同的接口。当我在 S1 上执行此操作时,它运行良好。所以我检查了“ip 表”。它们是:

S1(正常工作):

default via 192.168.1.4 dev eno1 
192.168.1.0/24 dev eno1 proto kernel scope link src 192.168.1.3 
192.168.2.0/24 dev ens3f0 proto kernel scope link src 192.168.2.1 
192.168.2.0/24 dev ens3f1 proto kernel scope link src 192.168.2.2 

S2(工作不正确):

default via 192.168.1.4 dev eno2 proto static metric 100 
default via 192.168.1.4 dev ens3f0 proto static metric 101 
default via 192.168.1.4 dev ens3f1 proto static metric 102 
192.168.1.0/24 dev eno2 proto kernel scope link src 192.168.1.2 metric 100 
192.168.1.4 dev ens3f0 proto static scope link metric 100 
192.168.1.4 dev ens3f1 proto static scope link metric 101 
192.168.2.0/24 dev ens3f0 proto kernel scope link src 192.168.2.3 metric 100 
192.168.2.0/24 dev ens3f1 proto kernel scope link src 192.168.2.4 metric 101 

S2 的表由 OS 生成。

为了解决这个问题,我尝试像更改 S1 一样更改 S2 的 IP 表。我将其更改为以下状态:

default via 192.168.1.4 dev eno2 proto static
192.168.1.0/24 dev eno2 proto kernel scope link src 192.168.1.2
192.168.2.0/24 dev ens3f0 proto kernel scope link src 192.168.2.3

然后当我试图

sudo ip route add 192.168.2.0/24 dev ens3f1 src 192.168.2.4

我收到错误

RTNETLINK answers: File exists


net.ipv4.ip_forward = 0 for both servers.

我的问题是:

1)为什么当最后一个实体在 S1 上时我无法将其添加到 S2 上?

2)如何正确配置 IP 表以使两个接口可以独立运行,并且无法转发流量?(我想确定如果我将流量发送到特定接口 - 它永远不会通过其他接口)。

相关内容