我有 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 表以使两个接口可以独立运行,并且无法转发流量?(我想确定如果我将流量发送到特定接口 - 它永远不会通过其他接口)。