如何避免 ARP Flux 问题

在 Debain9 默认配置下,只要 ARP 请求中的目标 IP 配置在本机,无论目标 IP 是否配置在收到 ARP 请求包的网口上,Linux 收包网口都会以自身 MAC 地址发送 ARP 响应。当一台主机多网口在同子网的情况下,一个 APR 请求就会收到多个 ARP 响应,这种情况被称为 ARP Flux。它可能会造成严重问题(我们在使用某些品牌交换机时确实遇到了)。

最常见的避免 ARP Flux 方案是将网口的 arp_ignore 置为 1 来避免响应目标 IP 不属于网口自身的 APR 请求。这样做有一个缺陷:在某些场景下降低了网络的连通的成功率,比如在 docker 使用 macvlan 又需要与主机通信的情况下。

另一种解决方案是将网口的 arp_filter 置为 1,kernel 会根据反向路由来控制由哪个网口响应 arp 请求(通常只有一个网口)。

还有一种方案是将网口的 rp_filter 置为 1,它是 Centos7 上的默认配置。对于每个进来的数据包, kernel会根据路由规则表校验收包网口是不是最佳应答网口,如果不是,数据包会被丢掉。

根据影响最小原则,这里推荐变更 arp_filter 来避免 ARP Flux 问题。当然试具体情况而变。

参考连接:
ether-arp-flux
Networking Tuning Tips
ARP响应实例研究
ip-sysctl

你可能感兴趣的:(如何避免 ARP Flux 问题)