无论arp_filter设置如何,多网卡Linux机器的网卡都响应对方的ARP

我有一台运行2.4.37内核的旧式Linux机器。 在机器中,两个网卡都在同一个networking上,具有不同的IP地址。 对于某些testing,我们希望每个IP的stream量都通过该NIC进行路由,但实际发生的情况是,两个IP的所有stream量都通过以太网设备之一路由,而另一个未使用。 如果我把networking上的另一台机器用一个空的ARPcaching并且ping两个IP,然后检查ARPcaching,我看到它具有两个IP下的两个NIC之一的MAC。 基本上Linux机器允许两个NIC对彼此的ARP请求作出响应,这是默认行为。 但是,我已经启用了arp_filter这两个网卡应该消除这种情况发生,但似乎没有任何效果。 我也尝试禁用rp_filter,但似乎也没有效果。 这里是我的相关sysctl条目:

net.ipv4.conf.eth1.arp_filter = 1 net.ipv4.conf.eth1.rp_filter = 0 net.ipv4.conf.eth0.arp_filter = 1 net.ipv4.conf.eth0.rp_filter = 0 net.ipv4.conf.lo.arp_filter = 1 net.ipv4.conf.lo.rp_filter = 0 net.ipv4.conf.default.arp_filter = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.all.arp_filter = 1 net.ipv4.conf.all.rp_filter = 0 

我发现在谷歌上有相同问题的人们有很多的链接,但是一旦他们设置了arp_filter = 1,问题就会消失,但对我来说却不是这样。

编辑 :我也一直在玩各种arp_ignore和arp_announce设置,但不pipe我做什么我不能让每个接口只响应ARP自己的IP

从Linux指南到IP层networkingpipe理 :

防止ARP通量的一种方法是使用net/ipv4/conf/$DEV/arp_filter 。 简而言之,使用arp_filter会导致收件人(在下面的情况下为真实服务器)执行路由查找以确定通过其发送回复的接口,而不是默认行为(如上所示),从所有以太网接收请求的接口。

如果到目的地的唯一路由是通过其中一个网卡的话,arp_filter解决scheme可能会产生意想不到的效果。

因此,arp_filter通过查询路由表来工作,以确定应该使用哪个接口将数据包发送到发出请求的主机。 如果你的路由表有这样一个单一的默认路由:

 default dev eth0 src 192.168.0.10 

那么无论eth0是否具有匹配的IP,它总是会在eth0上发送ARP应答。

一个可能的解决scheme(我没有testing过)是设置源策略路由select基于源IP的输出接口:

 echo 10 eth0 >> /etc/iproute2/rt_tables echo 11 eth1 >> /etc/iproute2/rt_tables ip route add 192.168.0.0/24 dev eth0 table eth0 ip route add 192.168.0.0/24 dev eth1 table eth1 ip rule add from 192.168.0.10 lookup eth0 ip rule add from 192.168.0.11 lookup eth1