当前位置: 代码网 > it编程>游戏开发>ar > 多网卡同网段IP引发的ARP Flux问题

多网卡同网段IP引发的ARP Flux问题

2026年01月26日 ar 我要评论
什么是 arp flux?arp flux 是一种网络现象,通常发生在具有多个网络接口(多宿主)的主机上,当主机对同一个 ip 地址的 arp 请求做出多个不同 mac 地址的响应时出现。这种情况可能

什么是 arp flux?

arp flux 是一种网络现象,通常发生在具有多个网络接口(多宿主)的主机上,当主机对同一个 ip 地址的 arp 请求做出多个不同 mac 地址的响应时出现。

这种情况可能导致网络通信异常,如数据包被错误地路由或丢弃。

arp flux 的原因

1.多宿主主机(multihomed host)

  • 如果一台主机有多个网络接口(如多个网卡或 vlan 接口),并且这些接口位于同一子网,操作系统可能会通过多个接口响应 arp 请求。
  • 例如,主机有两个网卡(eth0eth1),ip 地址分别是 192.168.1.10192.168.1.11,但 arp 请求查询 192.168.1.10 时,主机可能同时用 eth0eth1 的 mac 地址响应。

2.代理 arp(proxy arp)

  • 某些路由器或防火墙可能启用代理 arp
  • 导致它们代替其他设备响应 arp 请求,从而产生多个 arp 响应。

3.ip 地址冲突

  • 如果同一子网内有两个设备使用相同的 ip 地址
  • 它们都会响应 arp 请求,导致 arp flux。

arp flux 的影响:

1.网络不稳定

  • 交换机或路由器可能会收到多个 mac 地址对应同一个 ip,导致数据包被错误地转发。

2.通信中断

  • 某些设备可能缓存错误的 mac 地址,导致数据包无法到达目标。

3.arp 表抖动

  • 网络设备的 arp 表可能频繁变化,影响性能。

arp flux 案例分析

a 主机的 ip 配置如下(即存在 arp flux 的主机):

[root@ism ~]# ip a
1: lo: <loopback,up,lower_up> mtu 65536 qdisc noqueue state unknown group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp125s0f0: <broadcast,multicast,up,lower_up> mtu 1500 qdisc mq state up group default qlen 1000
    link/ether b0:4f:a6:7a:23:96 brd ff:ff:ff:ff:ff:ff
    inet 10.1.88.94/24 brd 10.1.88.255 scope global noprefixroute enp125s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::b4a:6afe:afb9:3cf8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp125s0f1: <broadcast,multicast,up,lower_up> mtu 1500 qdisc mq state up group default qlen 1000
    link/ether b0:4f:a6:7a:23:97 brd ff:ff:ff:ff:ff:ff
    inet 10.1.89.3/24 brd 10.1.89.255 scope global dynamic noprefixroute enp125s0f1
       valid_lft 29975sec preferred_lft 29975sec
    inet 10.1.88.95/24 brd 10.1.88.255 scope global noprefixroute enp125s0f1
       valid_lft forever preferred_lft forever
    inet6 fe80::6115:6f6d:e709:dbaf/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: enp125s0f2: <broadcast,multicast,up,lower_up> mtu 1500 qdisc mq state up group default qlen 1000
    link/ether b0:4f:a6:7a:23:98 brd ff:ff:ff:ff:ff:ff
    inet 172.16.11.5/24 brd 172.16.11.255 scope global dynamic noprefixroute enp125s0f2
       valid_lft 31573sec preferred_lft 31573sec
    inet 172.16.11.94/24 brd 172.16.11.255 scope global secondary noprefixroute enp125s0f2
       valid_lft forever preferred_lft forever
    inet6 fe80::1c1:9d2a:5550:a9b3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在 b 主机上验证是否存在 arp flux:

[root@arsen ~]# arping -f -i enp125s0f0 10.1.88.94
arping 10.1.88.94 from 172.16.11.97 enp125s0f0
unicast reply from 10.1.88.94 [b0:4f:a6:7a:23:98]  0.604ms
sent 1 probes (1 broadcast(s))
received 1 response(s)
[root@arsen ~]# 
[root@arsen ~]# arping -f -i enp125s0f0 10.1.88.95
arping 10.1.88.95 from 172.16.11.97 enp125s0f0
unicast reply from 10.1.88.95 [b0:4f:a6:7a:23:98]  0.571ms
sent 1 probes (1 broadcast(s))
received 1 response(s)
[root@arsen ~]# 
[root@arsen ~]# arping -f -i enp125s0f0 172.16.11.94
arping 172.16.11.94 from 172.16.11.97 enp125s0f0
unicast reply from 172.16.11.94 [b0:4f:a6:7a:23:98]  0.596ms
sent 1 probes (1 broadcast(s))
received 1 response(s)

从测试结果来看,a 主机存在 arp flux 问题,因为:

10.1.88.9410.1.88.95 都返回了相同的 mac 地址 b0:4f:a6:7a:23:98(属于 enp125s0f2)。

  • 10.1.88.94 本应属于 enp125s0f0(mac b0:4f:a6:7a:23:96)。
  • 10.1.88.95 本应属于 enp125s0f1(mac b0:4f:a6:7a:23:97)。

这表明 arp 响应被错误地代理或劫持。

服务器抓包:

# a主机抓包
tcpdump -i any -nn "arp" -w arp_capture.pcap

# b主机发送探测包
arping -f 10.1.88.94
arping -f 10.1.88.95

包分析:

可见都是返回 b0:4f:a6:7a:23:98 mac 地址,该地址属于 enp125s0f2,发生了 arp flux。

arp flux 对业务影响?

原本客户端只想收到来自目标主机 10.1.88.94 对应网卡 enp125s0f0 的 mac 地址 b0:4f:a6:7a:23:96(arp 响应),而现在确收到的是 enp125s0f2 的 mac 地址 b0:4f:a6:7a:23:98(arp 响应)。

于是:

  • 客户端就认为:10.1.88.94 对应的 mac 是 enp125s0f2 的 mac;
  • 接下来所有对 10.1.88.94 的流量都会发给 enp125s0f2
  • 然而服务可能只绑定在 enp125s0f0 上,或者路由表不匹配;
  • 导致请求进来了但服务不处理、或响应从错误网卡出去,最终连接失败或被丢弃。

如何避免 arp flux?

调整主机 arp 行为

# 全局arp规范
echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf      # 禁止非本机接口ip的arp响应
echo 'net.ipv4.conf.all.arp_announce = 2' >> /etc/sysctl.conf    # 始终使用最佳本地ip响应arp

# 单接口子网隔离,让每个接口只对自己拥有的 ip 发 arp 回复,防止“越界抢答”(可选)
# echo 'net.ipv4.conf.enp125s0f0.arp_filter = 1' >> /etc/sysctl.conf
# echo 'net.ipv4.conf.enp125s0f1.arp_filter = 1' >> /etc/sysctl.conf

# 使配置生效(实时)
sysctl -p

禁用不必要的代理 arp

在路由器或防火墙上关闭不必要的代理 arp 功能。

检查 ip 冲突

确保网络中不存在重复的 ip 地址。

网络分段

如果可能,将多宿主主机放在不同的子网中,避免 arp 混乱。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com