强制本地网络流量通过交换机

强制本地网络流量通过交换机

我有一台带有三块网卡的机器。一块网卡连接到 WAN,另外两块网卡连接到同一台交换机,子网相同(192.168.1.0/24)。我想要做的是在两块网卡之间发送数据,但要确保数据确实通过交换机,而不是留在 Linux 网络堆栈内部。

当我正常设置两张卡并尝试从一张卡 ping 另一张卡时,它可以工作,但是 Wireshark 没有显示任何流量,因此它没有进入网络。

我尝试设置到交换机的静态路由,试图强制所有流量都必须通过交换机。当我这样做时,ping 会得到网络响应,并且我会收到大量未答复的 ARP 请求,试图找到另一个地址。但任何一个地址都可以 ping 子网上的另一台机器,而那台机器也可以 ping 任何一个地址。

我曾尝试更改 Linux 内核上的 arp 过滤器设置,但没有成功。

有什么建议吗?谢谢!

另外,设置一个具有 IP 别名的 NIC 来执行相同操作还可以获得加分。

答案1

我是新来的,但我可能知道这个问题的答案。

操作系统将尝试识别另一块网卡是本地设备。我认为您可以使用“开发' 选项 '路由' 强制将其从另一块网卡中拔出。

例如我有一个 IP 地址:

45.32.160.129

此子网的路由显示设备 dev ens3

45.32.160.0/24 dev ens3 proto kernel scope link src 45.32.160.129

但是假设我有另一张网卡,ens4,地址为 45.32.161.4/24:

45.32.161.0/24 dev ens4 proto kernel scope link src 45.32.161.4

然后你可以使用'开发' 选项 '路由' 来指定使用的设备。这样,当您尝试从本地机器访问另一个网卡时,您可以指定它自己作为 ens3 ip,而不是使用 ens3(本身)。这里的诀窍是您还必须使用策略路由。因为您不能让网卡尝试访问自身并出去其他卡的接口,因为它永远找不到自己。因此,您必须使用策略/源路由指定,当该卡尝试访问它时,它应该只跳过另一张卡。这就是您必须指定源匹配的地方。甚至更进一步,您还必须确保您在尝试使用或测试的网络软件中绑定到正确的 ip 源地址。这应该强制它通过交换机访问另一张网卡。当然,你会对另一张卡做同样的事情,但反过来。

这可能会解决您的问题。请查看'路由' 路线优先级手册页和 '开发' 参数。然后查看规则匹配以执行策略部分。它应该看起来像这样:

ip rule add from 45.32.161.4 lookup from1
ip rule add from 45.32.160.129 lookup from2

然后添加相反的路线:

ip route add 45.32.160.129 via 45.32.161.4 dev ens4 table from1
ip route add 45.32.161.4 via 45.32.160.129 dev ens3 table from2

您需要在 /etc/iproute2 中创建这些表

相关内容