linux – 同一子网上具有IP的多个物理接口

前端之家收集整理的这篇文章主要介绍了linux – 同一子网上具有IP的多个物理接口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有9个网卡的 linux机箱,我希望其中有8个网卡在同一个子网上有唯一的地址,例如:
ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0

在这种情况下,默认ARP行为极其适得其反,因为它会导致所有IP的所有流量完全通过eth1传递,这几乎与我想要的完全相反.

所以我四处翻找并最终对sysctl进行了一些更改,例如:

net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

这确实阻止了eth1冒充所有其他人,但我仍然无法成功ping除eth1的地址以外的任何内容. (例如,来自同一交换机上的第二台计算机,只有192.168.123.1响应ping)

我猜我需要用arptables或iproute或SOMETHING做点什么,但我在这个领域迷失了.

奖励要点:解决方案必须与Linux 2.6.27.27兼容. (更具体地说,Slax 6.1.2)

解决方法

你需要一个 strong end system model. Linux基本上是围绕一个弱的发送系统模型构建的,所以它对于这个应用程序来说真的不是一个好的操作系统选择.

您将不得不伪造所需的所有行为,从ARP到策略路由到源地址选择.您还需要过滤器以防止数据包到达错误的接口时被接受.

绝对必要的步骤是:

>在所有接口上配置arp_filter = 1和arp_ignore = 2.
>为传出流量添加每个接口,基于源的路由. (必须根据源地址选择目标接口.)
>添加每个接口的入口过滤以静默丢弃在错误接口上接收的数据包. (将目标地址分配给另一个接口的数据包.)

不幸的是,对于这三个步骤是否都是必需的,尚未达成共识.弱端系统模型内置于整个Linux TCP / IP堆栈中,并不清楚组播等细微问题可能出现的问题.

例如,目前尚不清楚如何为广播选择输出接口.它应该全部消失吗?也许.如果堆栈获得一个源地址未分配给其中一个接口的出站广播,那么正确的行为是什么?

同样,你选择了错误的工具.

猜你在找的Linux相关文章