☰
交换机如何根治ARP欺骗?华为H3C实战配置详解
2026/10/9 22:26:41 网站建设 项目流程

早上刚到工位,群里就炸了:楼下生产网大量终端同时掉线,Ping网关一会儿通一会儿不通。等我把笔记本接到镜像口抓包,一眼就看到了问题——通篇都是同一台设备在回答“我是网关”,ARP表里网关的MAC已经变成了一台办公电脑的网卡地址。这就是很典型的ARP欺骗,不用怀疑。

很多刚接触网络的朋友会觉得ARP欺骗是个老话题,病毒软件、杀毒软件都宣传“防ARP欺骗”,有什么好讲的?但真正到了交换机层面,尤其是你手里管着一批华为、H3C的接入交换机、汇聚交换机,你会发现:终端上的所谓“防欺骗”大多是事后补救,真正的防线应该在交换机上。一台交换机可以同时管几十甚至几百个端口,它是在数据帧进入网络的入口处就能做拦截的唯一节点。这篇文章我就把这个事彻底说透:ARP欺骗到底骗了什么、交换机为什么天然适合防它、华为和H3C的交换机上怎么落地配置,以及配置完以后怎么验证效果。

1. ARP欺骗到底“骗”的是什么

1.1 ARP的工作方式决定了它天生容易被打

先花两分钟把这层关系捋清楚。以太网里两台设备要通信,二层靠的是MAC地址,三层靠的是IP地址。数据包在普通局域网里传输,最终必须要找到目的设备的MAC地址才能把帧从网卡发出去。ARP协议干的就是这件事:已知对方的IP,求对方的MAC。

正常流程是这样的:PC-A想访问网关192.168.1.1,它先看自己的ARP缓存,如果没有对应的MAC,就向整个广播域发一条ARP请求:“192.168.1.1是谁?请把你的MAC告诉我。”这个请求是广播的,网段里所有设备都能收到。正常情况下,只有IP是192.168.1.1的那台设备(网关)会回应:“我是192.168.1.1,我的MAC是xxxx。”其他设备虽然收到了这个请求,但发现自己IP不对,就不回应。PC-A收到应答后,把这条“IP---MAC”的映射关系放进自己的ARP缓存表里,后续发往网关的帧就直接封装到这个MAC上。

这个协议在设计时完全没有考虑“安全问题”。它在链路层默认了一个前提:网络上所有设备都是诚实的,你问谁,谁就会如实回答。问题就出在这里——ARP应答报文不需要任何认证,任何一台设备都可以主动发送“我是192.168.1.1”,而且很多操作系统对收到的ARP应答是无条件信任的,直接把表项更新掉。

我经常用一个门禁卡来打比方:小区门口保安问“你是几栋几零几的”,这时走过来一个人说“我是3栋502的”。保安既不查登记表,也不核对身份证,就让这人进去了。真正的3栋502业主反而被拦在外面。ARP协议就是这样工作了几十年。

1.2 交换机为什么会“帮”攻击者把流量带偏

很多文章讲ARP欺骗都停在这层,但真正能不能防住,关键要看交换机的转发机制。交换机本身是个二层转发设备,它不关心IP地址,只认MAC表(FDB表)。当PC-A要把数据包发给网关时,这个帧的目的MAC地址已经写好了,是“网关的MAC”。交换机查自己的MAC表,发现这个MAC对应的出接口是连到网关的那个口,就会把帧从那个口转出去。这个逻辑在正常情况下没有任何问题。

但如果有人发出伪造的ARP应答,把网关的MAC改掉了,事情就完全变了。攻击者的操作分两步:第一步,向整个网段发送大量ARP应答,声称“192.168.1.1的MAC是 AA:BB:CC:DD:EE:FF”,而这个MAC其实是他自己网卡的;第二步,所有收到这条应答的主机,ARP缓存里的网关表项都会被他改掉。接下来PC-A再给网关发包时,目的MAC就变成了攻击者的网卡MAC。交换机查MAC表——这个MAC对应的出接口是攻击者所在的那一口,于是整个帧就鬼使神差地送到了攻击者的端上。

这里有个关键点容易忽略:攻击者不一定只改IP-MAC映射。他发送伪造ARP应答时,如果把自己的源MAC也写成网关的MAC,那么交换机的MAC表也会刷新——原本“网关MAC对应上联口”的表项,会被学习成“网关MAC对应攻击者端口”。这种基于源MAC学习的机制,是交换机转发平面的基本特性,没有特殊防护时,它对这种“移动”是毫无抵抗力的。

顺便说一句,在框式交换机、分布式转发架构里,ARP学习可能是主控板上的CPU完成的,而数据转发是各接口板上的转发芯片完成的。两条路径虽然分工不同,但MAC表最终会被统一同步。攻击者只要让任何一个入口收到了伪造报文,经过表项同步,全网转发就会受影响。这也是为什么只要一台终端发起了ARP欺骗,整片网络都会迅速“沦陷”。

1.3 局域网里中招后的具体表现

遭遇ARP欺骗的现场,我把它归纳成三种典型症状,方便大家对号入座。

第一种是全网掉线,或者叫“大面积丢包”。攻击者冒充的是网关,所有终端发往网关的流量全被他截走了。如果他不开IP转发功能,数据直接石沉大海,表现就是全网断网;如果他开了转发功能,数据会被他转发出去,但多了一道中间环节,延迟剧增、掉包明显。

第二种是点对点的监听。攻击者只冒充某台特定主机的IP,比如冒充服务器。其他终端询问服务器MAC的时候,得到的是攻击者的MAC,于是发往服务器的流量都会经过攻击者。这种欺骗比冒充网关更隐蔽,因为大部分人只盯着网关ARP表项看,不会去检查服务器表项有没有变。

第三种是ARP风暴。攻击者用工具不停发送变种的ARP报文,导致交换机CPU处理不过来,MAC表不断抖动。表现是内网速度奇慢,交换机日志刷屏,有的低端交换机甚至直接死机。华为、H3C交换机如果开启了对应的防攻击功能,日志里会大量出现类似“Attack Source”的告警,这种情况多半就是有人在扫网段或者网络里有环路冲突。

2. 交换机侧防欺骗的底层逻辑

2.1 从“无条件信任”到“确定性校验”

理解了ARP欺骗的原理,防它的思路就顺理成章了:不能无条件信任网络上发来的ARP报文,必须要有依据地验证“这个IP到底该不该由这个MAC来回答”。

传统网络是默认信任所有用户终端的。接入交换机只管转发,不管内容,谁发ARP应答都信,谁声明自己是网关就认谁。防欺骗的第一步,就是打破这种“无条件信任”,建立一套有据可查的校验机制。

这里有个核心概念一定要理解:交换机防ARP欺骗,并不是靠“智能识别哪台设备是好人,哪台是坏人”,而是建立一张“白名单表”,只允许报文符合表项中记录的IP-MAC-端口-VLAN关系,不符合的直接丢弃。这张白名单表,就是整个防御体系的基石。

2.2 防欺骗方案的三根支柱

要做这件事,交换机上有三个功能分工不同,配合起来才完整。

第一根支柱是DHCP Snooping。它的字面意思是“DHCP窥探”,它监听DHCP服务器和客户端之间的交互过程。当一台终端通过DHCP获取到IP地址时,交换机就能学到一个关键绑定关系:某台MAC地址的设备,在某个物理端口上,从DHCP服务器那里获得了某个IP地址。交换机把这个关系记录到一张表里,叫做“DHCP Snooping绑定表”。这张表非常关键,因为一个IP是由DHCP服务器正式分配的,这个消息是“可信”的。后续所有防欺骗检查,都拿这张表当参照物。

第二根支柱是DAI(Dynamic ARP Inspection),动态ARP检测。它利用DHCP Snooping建立起来的绑定表,对收到的每一个ARP报文进行检查。校验的核心字段包括:ARP报文里的源IP地址、源MAC地址,是否与绑定表里记录的“IP-MAC-端口-VLAN”一致。只要有一个字段对不上,这个报文就直接被丢弃。这一下就把“冒充网关”、“冒充服务器”的伪造报文挡在了端口之外。

第三根支柱是静态IP-MAC绑定和端口安全。有些网络环境里没跑DHCP,全部用静态IP,这时候DHCP Snooping学不到绑定表。那就需要手动建立“某个IP允许由哪个MAC在哪台设备的哪个口上使用”,形式和DHCP Snooping的表类似,只是来源是手工配置。端口安全则限制了每个端口最多能学习几个MAC地址,防止有人用一个端口接一堆设备,变相绕过防欺骗。

这三根支柱配合起来,思路其实很简单:先搞清楚网络里存在哪些合法关系(绑定表),再在入口处强制校验(DAI),最后用端口安全堵住物理接入层的漏洞。

2.3 为什么防线必须建在交换机上

同样一个问题,在终端上装防火墙、装ARP防火墙软件也能解决一部分。但它们解决的问题是“我的ARP缓存不被篡改”,这个动作的本质是保护单台终端。你现在管着全公司几百台电脑、几十台交换机,指望每台终端都自觉安装软件,是不现实的。

交换机是二层数据进入网络的必经之路。数据帧无论是要去网关还是要找服务器,第一个经过的设备必然是接入交换机。如果在这里做过滤,相当于在园区门口查出入证。伪造的ARP应答在还没进到广播域之前就被拦掉了,其他终端根本收不到恶意报文,整片网络的ARP缓存都是干净的。这是成本最低、覆盖最全的思路。

另外从我在机房里摸爬滚打的经验看,交换机上做防ARP欺骗还有一个隐藏优势:它独立于终端操作系统。Windows、Linux、Android,不管终端装不装安全软件,交换机这层不管,照样拦截。这样运维抓手就在自己手里,不至于有个别终端的杀毒软件和ARP防火墙冲突而搞得全网鸡飞狗跳。

3. 实战:在华为/H3C交换机上配置防ARP欺骗

3.1 先搭一个典型场景

纸上谈兵没意思,我直接用一个我在项目里经常碰到的组网来演示。接入层是一台华为S5700或者H3C S5130(这两个系列在中小型网络里太常见了),下挂若干办公PC,上联口接到核心交换机,网关在核心上,DHCP服务器也在核心侧,所有终端通过DHCP动态获取IP。整个组网里,终端处于同一广播域(同一个VLAN),假设VLAN 10,网段192.168.10.0/24。

注意,我说的这个组网里,DHCP服务器和网关都在上联方向,这个细节非常重要。因为后面配置信任端口的时候,凡是连接可信设备的端口——比如上联口、DHCP服务器接口——都要设置为信任端口。

如果你用的是模拟器(比如eNSP)练习,协议细节可能会和物理机有差异,但配置思路是一致的。文中命令以华为VRP5平台和H3C常见的Comware平台为主,不同版本具体命令名称略有差异,我在步骤里会特别说明哪些是关键点,哪些版本差异可以容忍。

3.2 第一步:开启DHCP Snooping,建立绑定表

所有防欺骗功能都是建立在绑定表之上的,所以第一步一定先把DHCP Snooping跑起来。

华为交换机上的配置如下:

# 全局开启DHCP功能(如果之前关闭的话) dhcp enable # 全局开启DHCP Snooping功能 dhcp snooping enable # 进入需要保护的VLAN视图,开启该VLAN的DHCP Snooping vlan 10 dhcp snooping enable

这里还有一个特别关键的配置:把上联口设置为信任端口。为什么要这么做?因为DHCP Snooping开启后,交换机会监听所有DHCP报文。默认情况下,只有连接到合法DHCP服务器的接口才被允许发送DHCP OFFER和DHCP ACK报文,其他接口发送的DHCP应答会被交换机视为攻击并丢弃。如果上联口不被标记为信任,终端就收不到DHCP服务器的回应,地址都获取不到。

interface GigabitEthernet0/0/24 # 连接到核心/网关/DHCP服务器的上联口 dhcp snooping trusted

配置完成后,可以查看绑定表有没有生成:

display dhcp snooping user-bind

看到类似下面这种输出就说明终端上线时表项记录成功了:

DHCP Dynamic Bind Info: IP Address MAC Address Interface VLAN 192.168.10.10 00e0-fc11-2233 GE0/0/1 10 192.168.10.11 00e0-fc11-4455 GE0/0/2 10

这里我提醒一下:如果你是在H3C设备上操作,命令会是dhcp-snooping enable(中间多了一个短横线),信任端口命令是dhcp-snooping trust。两者功能一样,别被华为的写法误导,配置前记得敲display version看一眼平台或查对应手册。

3.3 第二步:开启DAI动态ARP检测

绑定表有了,接下来开启DAI。华为交换机上常见的命令,我以S5700系列为例:

# 全局开启IP-MAC绑定检查 arp anti-attack check user-ip-and-mac check-item ip-address mac-address

这条命令的含义是:交换机对所有收到的ARP报文进行检测,检查报文里的源IP地址和源MAC地址是否与DHCP Snooping绑定表一致。如果报文来源IP或MAC没有在绑定表里找到,或者不一致,就直接丢弃。

H3C设备上的开启方式则是:

# 全局开启ARP检测功能 arp detection enable # 在需要被检测的VLAN上启用 arp detection enable vlan 10

如果希望更灵活地管理,可以进入端口视图,把信任端口标记出来:

interface GigabitEthernet1/0/24 # 上联口是可信的,此接口收到的ARP报文不做检测 arp detection trust

这里有一个非常关键的顺序问题:必须先让绑定表里有完整的合法项,再开DAI。如果你先开了DAI但绑定表是空的,交换机就会认为所有ARP报文都没上报过,直接把全部ARP报文都丢掉,结果就是整个VLAN直接瘫痪。

现实中很多第一次配置的朋友就是栽在这上面。我建议的操作顺序是:先开DHCP Snooping,等终端地址全部获取稳定了,检查绑定表完整无误,再开DAI,然后立刻用几台终端验证连通性。

3.4 没有DHCP的场合:静态绑定怎么配

有些环境不用DHCP,所有终端都是静态IP,比如打印机、服务器、工控机。这些场景下DHCP Snooping根本学不到绑定表,DAI也就没有参照物。这种情况下需要手工添加静态绑定表项。

华为设备上可以这样配置单个绑定项:

# 在VLAN 10下,为GE0/0/1口绑定一个静态IP-MAC dhcp snooping user-bind ip-address 192.168.10.50 mac-address 00e0-fc33-4455 interface GigabitEthernet0/0/1 vlan 10

H3C设备对应的命令则是:

dhcp-snooping binding ip-address 192.168.10.50 mac-address 00e0-fc33-4455 interface GigabitEthernet1/0/1 vlan 10

手工绑定这种方式最大的问题是维护量大。你每加一台终端、每换一块网卡都要去交换机上加一条表项,端口一换也要同步修改。所以它只适合服务器、网络打印机这类长期固定位置的少数设备。办公区的PC机位经常变动,还是建议统一走DHCP,让交换机自动学习绑定表。

3.5 华为与H3C命令差异速查

为了方便对照,我把两组命令整理成一张速查表:

功能华为VRP5系列H3C Comware平台
全局开启DHCP Snoopingdhcp snooping enabledhcp-snooping enable
接口配置信任口dhcp snooping trusteddhcp-snooping trust
查看绑定表display dhcp snooping user-binddisplay dhcp-snooping
开启ARP检测arp anti-attack check user-ip-and-macarp detection enable
接口信任ARP检测一般与DHCP信任联动arp detection trust
手工绑定表项dhcp snooping user-bind ...dhcp-snooping binding ...

另外提一个实战中常见的问题:如果你用的是华为CE系列交换机(比如CE6850)或者较新的VRP8版本,命令格式可能更偏向“基于VLAN的业务策略”风格,和S5700这种老写法不一样。配置前先看一遍设备手册,别直接把网上的命令复制粘贴就往生产设备上怼。

4. 配置完怎么验证与排障

4.1 验证绑定表与丢弃计数

配置完成后,很多人觉得“没报故障就说明生效了”,这个想法很危险。ARP欺骗是突发的、主动的攻击行为,你不能等它来了再验证效果。正确做法是自己主动触发一次,看完交换机的反应。

首先是确认绑定表完整。每台在线终端的IP-MAC-VLAN-端口都能在表里找到,遗漏任何一台,它就可能成为漏洞。然后查看DAI的丢弃计数:

华为:

display arp anti-attack statistics

H3C:

display arp detection statistics

如果没有攻击发生,统计计数里应该只有微量的清零前的历史记录。这时候你可以手动构造一个伪造报文来测试。我之前常用的方法是用一台测试笔记本,手动指定IP为网关地址,然后用发包工具向交换机口上发送伪造的ARP应答报文,源IP写成192.168.10.1,源MAC写测试机的MAC。正常情况下这个报文会被交换机直接丢弃,其他终端上的ARP表项完全不会被影响。

验证收尾后再看一下丢弃计数有没有对应增加,有增加就说明DAI确实在干活。

4.2 常见问题速查

我把这几年在配置防ARP欺骗时遇到的高频问题汇总成一个表,每一类都附带排查方向:

问题现象可能原因排查方向
开启DAI后,整个VLAN无法上网网关口/上联口没有设置为信任端口检查上联口是否配置了DHCP Snooping trusted,或ARP检测信任状态
只有部分终端获取不到IP某台接入端口没有开启DHCP Snooping,或该接口被当成数据中心口处理检查端口下的DHCP监听配置,确认VLAN级Snooping覆盖范围
静态IP的打印機、服务器掉线绑定表里没有对应静态绑定条目手工添加静态绑定表项,或将对应上联口设为信任端口
偶发掉线,绑定表里没有异常终端的网卡MAC被修改,或者端口上接了扩展设备核对终端物理MAC,检查端口下的MAC学习情况
DHCP列表明明正常但DAI丢弃计数疯狂涨有设备在发免费ARP或老化探测报文,且来源无法匹配绑定表抓包看丢弃报文的源IP/MAC,评估来源设备并决定是否加入白名单

4.3 实际运维中容易踩的坑

补充几个只有动手配过才会遇到的细节。

第一,别把“上联口”理解为“所有接服务器的口都信任”。上联口信任是因为它是网关和DHCP服务器所在方向。你要是随手把下联口也配成了信任口,那就等于给攻击者开了后门——攻击者从那个口发来的ARP报文不检测,前面防得再严也没意义。

第二,开DAI以后,不光ARP报文被管了,有些交换机还会顺带做IP报文检查(比如检查IP源地址是否和绑定表一致)。这本来是好事,但如果你网络的某个业务使用了非常规的源地址(比如VRRP虚拟IP、NAT后的内网地址映射),有可能会被误杀。遇到奇怪的丢包先看下是否有IP Source Guard相关的日志。

第三,镜像口和监控口容易让人迷惑。你把流量镜像给审计设备时,虚假的ARP报文同样会被镜像一份送出去。如果审计设备也开启了ARP欺骗检测,它会整天告警“全网全是ARP欺骗”。这不代表你的防御失效,反而说明镜像口在真实反映被交换机拒绝的攻击流量。这时候不要关镜像,调好审计设备的告警阈值就行。

5. 进阶:防ARP欺骗之外的联动思路

5.1 ARP欺骗为什么不能用ACL来防

很多人问过我:既然攻击者报文里有IP和MAC,我直接在交换机上写一条ACL,把网关IP以外的ARP应答全部deny掉,不就行了吗?答案是行不通。ACL在绝大多数交换芯片上匹配的是IP报文和TCP/UDP报文。ARP是二层协议,以太网类型是0x0806,它既不携带IP头(请求和应答报文里虽然有IP地址,但那只是载荷字段),也不走三层转发。普通ACL根本没有能力对它进行过滤。

这也是很多人折腾eNSP“ACL单向访问不管用”的根本原因。你要实现“A能访问B、B不能访问A”这种需求,是靠三层ACL匹配IP实现的;但如果你想限制的是一台设备在ARP层面模拟另一台设备,二层ACL和三层ACL都帮不上忙,必须走DAI这种专门针对ARP报文的检测机制。

如果你确实有“限制某台终端只能访问指定服务器”的需求,正确做法是在三层接口上使用ACL匹配源IP和目的IP,或者在接入交换机上通过端口安全限制接入设备,再配合DAI做底层防欺骗。各管一层,不要混用。

5.2 从接入层到网关的防欺骗协同

接入交换机的DAI解决了“本广播域内谁在伪造ARP”,但它只对收到报文的端口所在的VLAN有效。如果网络规模大,划分了很多VLAN,终端跨VLAN访问网关时,核心交换机或网关路由器本身的ARP表项也面临同样风险。我在实际项目里见过一种情况:接入交换机防得很好,但核心交换机自己不设防,攻击者从另一个方向直接打核心的ARP表,照样把网关路由表项污染了。

所以一个完整的防ARP欺骗方案,应该是接入层靠DAI和端口安全,汇聚/核心层靠设备自带的ARP防攻击能力和表项固化。比如华为设备上的“ARP表项固化”特性,可以确保网关IP的MAC地址在首次学到后不再被任何后续ARP报文修改。这类能力专门保护设备自身的ARP缓存,和接入层的DAI互补。

把这条线串起来看,防ARP欺骗不是某一个功能的单打独斗,而是从接入端口、VLAN内转发、网关三层表项多个层面协同防护的一整套机制。理解了这一点,再回看那些设备安全配置,你就知道每一道防线分别挡住了哪一路攻击。

我在实际操作中的体会是,防ARP欺骗这活,一次性配置到位不稀奇,稀奇的是半年之后还能保持表项干净、统计计数不异常。我的习惯是每季度扫一遍绑定表,剔除废弃的静态绑定,同时抽查几个端口看MAC地址是不是和终端报修记录吻合。网络里没有绝对的安全,但把能做的校验都做了,至少能把百分之九十的“冒名顶替”挡在门外。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询