我有一个(实验)设置,其中一个主机myhost.mydomain有三个networking接口都连接到相同的VLAN作为其默认网关mygateway.mydonain 。 设置如下所示:
interface MAC IP address --------- ----------------- --------------- eth0 aa:aa:aa:aa:aa:aa myhost.mydomain eth1 bb:bb:bb:bb:bb:bb 192.168.0.7 eth2 cc:cc:cc:cc:cc:cc 192.168.1.7
我观察到的是约。 每4小时一个ARP请求从默认网关到达,ARP响应在所有三个接口上发出。 所有三个接口上的ARP请求(根据tcpdump )读取:
who-has myhost.mydomain tell mygateway.mydomain
ARP响应读取:
myhost.mydomain is aa:aa:aa:aa:aa:aa # on eth0 myhost.mydomain is bb:bb:bb:bb:bb:bb # on eth1 myhost.mydomain is cc:cc:cc:cc:cc:cc # on eth2
这是如何在这样的设置? 我有点惊讶,因为myhost.mydomain显然是“仅” aa:aa:aa:aa:aa:aa ,因为该地址绑定到eth0 。 我还看到,在这些响应之后,默认网关会在eth2 (而不是eth0 )上发送进一步的TCP通信,这会导致其他复杂情况。
我知道这个问题可以通过arptables来解决,也可以通过将主机的接口连接到不同的networking来解决,但是我还想在继续之前了解这个具体情况。 主机运行Debian 8.9。
更新看起来像我在这里遇到ARP 通量 。
这原来是ARP通量的一个例子。 以下说明适用:
Linux的一个特点是它愿意响应绑定到任何接口的任何IP的ARP请求。 这可能会导致ARP通量,一个给定的IP有时在一个MAC地址上访问,有时是另一个MAC地址访问的情况。 ( 这里 )
同一来源提出了这种补救措施:
防止ARP通量的一种方法是使用
net/ipv4/conf/$DEV/arp_filter。 简而言之,使用arp_filter会导致收件人(在下面的情况下为真实服务器)执行路由查找以确定通过其发送回复的接口,而不是默认行为(如上所示),从所有以太网接收请求的接口。 ( 这里 )
为了得到一个可以在myhost.mydomain重新启动过程中保留的解决scheme,我select了下面的配方:
echo "net.ipv4.conf.all.arp_filter = 1" > /etc/sysctl.d/arp_filter.conf sysctl -p /etc/sysctl.d/arp_filter.conf
同时我也注意到这种情况是这个论坛最近的另一个问题。