组网第27课:ARP 的能与不能——免费 ARP、代理 ARP 与 ARP 欺骗

全网断网的元凶:一条免费 ARP 引发的血案


文章目录

  • [全网断网的元凶:一条免费 ARP 引发的血案](#全网断网的元凶:一条免费 ARP 引发的血案)
    • 一、开场:全公司轮流掉线,竟是一台电脑在"冒名顶替"
    • [二、ARP 是干嘛的:广播问一句"谁是这个 IP"](#二、ARP 是干嘛的:广播问一句“谁是这个 IP”)
      • [1. 类比:在办公室里喊"总台电话是多少"](#1. 类比:在办公室里喊“总台电话是多少”)
      • [2. ARP 请求与应答](#2. ARP 请求与应答)
      • [3. ARP 表:设备的"IP-MAC 通讯录"](#3. ARP 表:设备的“IP-MAC 通讯录”)
    • [三、免费 ARP 与代理 ARP:两个"特殊操作"](#三、免费 ARP 与代理 ARP:两个“特殊操作”)
      • [1. 免费 ARP:主动喊"我是这个 IP"](#1. 免费 ARP:主动喊“我是这个 IP”)
      • [2. 代理 ARP:热心的"总台"替你应答](#2. 代理 ARP:热心的“总台”替你应答)
      • [3. ARP 解析流程](#3. ARP 解析流程)
    • [四、ARP 欺骗:一场"冒名顶替"的中间人戏](#四、ARP 欺骗:一场“冒名顶替”的中间人戏)
      • [1. 原理:坏人冒充总台,把流量全引到自己身上](#1. 原理:坏人冒充总台,把流量全引到自己身上)
      • [2. 怎么判断是不是 ARP 欺骗](#2. 怎么判断是不是 ARP 欺骗)
      • [3. 命令落点(华为 VRP)](#3. 命令落点(华为 VRP))
      • [4. 三道防线:从"人工查"到"自动拦"](#4. 三道防线:从“人工查”到“自动拦”)
      • [5. 异常与排查](#5. 异常与排查)
      • 思科对照
    • [五、🔧 运维视角 & 📐 设计视角](#五、🔧 运维视角 & 📐 设计视角)
    • 六、小结与命令速查表
    • [七、思考题 & 评论区接招](#七、思考题 & 评论区接招)

一、开场:全公司轮流掉线,竟是一台电脑在"冒名顶替"

那天下午,甲方公司接连报障:网一会儿通一会儿断,网页转圈,有的同事还弹出"IP 地址冲突"。奇怪的是,重启交换机好一会儿,过一阵又不行。

我赶到后先在一台电脑上看 ARP 表,这一看就发现猫腻------网关 IP 对应的 MAC,根本不是网关设备的 MAC,而是工位上一台普通电脑的 MAC。

顺藤摸瓜,那台电脑不知装了什么,正在疯狂发 ARP 应答,逢人就喊"我才是网关"。于是整个公司的流量都先绕到它那儿,它转发得过来就通、转发不过来就断,还顺带把大家的账号密码看了个遍。

拔掉这台电脑,全网立刻恢复正常。

这种事,老网工都不陌生。它的根子,就是上一课反复出现的那个机制------ARP 。ARP 本是个"广播找人"的好设计,可它只负责问、不负责核实对方身份,这就给了坏人冒名顶替的机会。

这一课把 ARP 讲透:它怎么工作、ARP 表怎么记、免费 ARP 为什么是双刃剑、代理 ARP 是干嘛的,以及 ARP 欺骗怎么防。


二、ARP 是干嘛的:广播问一句"谁是这个 IP"

1. 类比:在办公室里喊"总台电话是多少"

上一课说过,帧在二层是靠 MAC 地址找设备的,可我们平时记的是 IP。怎么从 IP 得到 MAC?靠 ARP(地址解析协议):

  • 电脑要给网关发数据,先在"房间"里广播喊一句:"谁是 192.168.10.1?把你的 MAC 告诉我!";
  • 网关听到,单播回答:"我是,我的 MAC 是 xxxx";
  • 电脑把这个对应关系记下来,下次直接用,不用再喊。

这就像在办公室里问"谁是总台",对应人应一声,你就把他的分机记进通讯录。

2. ARP 请求与应答

两条规则要记牢:

  • ARP 请求是广播 (同 VLAN 都能收到),ARP 应答是单播(只回给请求者);
  • ARP 只在**同一个广播域(VLAN)**里有效,跨网段要靠网关,这也是上一课"先交网关"的原因。

多问一句:ARP 报文里装了什么?

ARP 本身也是封装在帧里的,关键字段就几个:发送方 IP、发送方 MAC、目标 IP、目标 MAC。发请求时,发送方填自己,目标 MAC 留空(因为还不知道),目标 IP 填要问的 IP;对方应答时,把自己的 MAC 填上、再交换收发位置。理解了这几个字段,就明白 ARP 欺骗为什么能得逞------报文里的发送方 IP/MAC 全由发送者自己填,协议不核对,攻击者想填成网关就填成网关。

3. ARP 表:设备的"IP-MAC 通讯录"

ARP 学到的对应关系,存在 ARP 表里,有动态学习、有老化时间(过一段时间不用就删,避免记到搬走的设备)。

  • 电脑、交换机、路由器上都有各自的 ARP 表;
  • 排障时,先看 ARP 表里网关 IP 对应的 MAC 对不对,往往一眼就能发现欺骗。

为什么 ARP 表要老化、不能永久记?

因为网络是会变的:员工换工位、电脑换网卡、设备换端口,MAC 都可能变。如果一条对应关系永久记着,设备搬走后,旧记录还指向不存在的 MAC,反而会把数据发错地方。所以动态 ARP 表有老化时间(华为常见 20 分钟,不同设备不同),过期不用就删,需要时重新学习。这和第 22 课 MAC 表老化是一个道理------网络是活的,记录也得跟着更新。

静态绑定恰恰相反,它是"永久记",所以只适合绑定网关这种几乎不变、又必须防篡改的关键条目;要是把所有终端都静态绑,终端一变动就得手工改,维护量爆炸。这正是小网用静态、大网上 DAI 的原因。


三、免费 ARP 与代理 ARP:两个"特殊操作"

1. 免费 ARP:主动喊"我是这个 IP"

正常 ARP 是"有需求才问",而免费 ARP(Gratuitous ARP)是设备主动发一个 ARP,内容相当于"我是 192.168.10.1,MAC 是这个",并不针对谁的请求。

它有正当用途:

  • 检测 IP 冲突:一台设备开机发免费 ARP,如果有人应答,说明这个 IP 已经被占用;
  • 通知别人更新缓存:设备换了网卡、MAC 变了,主动喊一声,让大家更新。

但它也是双刃剑 :正因为能"主动宣告我是某个 IP",攻击者可以伪造免费 ARP,抢着喊"我是网关",让大家把错误的 MAC 记下来。开头那台电脑,就是这么干的。

2. 代理 ARP:热心的"总台"替你应答

代理 ARP(Proxy ARP) :当一台主机要访问"它以为在同网段、其实在别的网段"的 IP 时,路由器替那个目标主机应答 ARP,让主机以为目标就在本地,流量先发给路由器,再由它转走。

  • 它主要用于一些特殊的编址/迁移场景,正常园区规划里用得不多;
  • 开了代理 ARP 会让网络的"真实位置"变得不直观,没有需求不要随便开。

3. ARP 解析流程

#mermaid-svg-E0kaatidvSHVBxtb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E0kaatidvSHVBxtb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E0kaatidvSHVBxtb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E0kaatidvSHVBxtb .error-icon{fill:#552222;}#mermaid-svg-E0kaatidvSHVBxtb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E0kaatidvSHVBxtb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E0kaatidvSHVBxtb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E0kaatidvSHVBxtb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E0kaatidvSHVBxtb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E0kaatidvSHVBxtb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E0kaatidvSHVBxtb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E0kaatidvSHVBxtb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E0kaatidvSHVBxtb .marker.cross{stroke:#333333;}#mermaid-svg-E0kaatidvSHVBxtb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E0kaatidvSHVBxtb p{margin:0;}#mermaid-svg-E0kaatidvSHVBxtb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E0kaatidvSHVBxtb .cluster-label text{fill:#333;}#mermaid-svg-E0kaatidvSHVBxtb .cluster-label span{color:#333;}#mermaid-svg-E0kaatidvSHVBxtb .cluster-label span p{background-color:transparent;}#mermaid-svg-E0kaatidvSHVBxtb .label text,#mermaid-svg-E0kaatidvSHVBxtb span{fill:#333;color:#333;}#mermaid-svg-E0kaatidvSHVBxtb .node rect,#mermaid-svg-E0kaatidvSHVBxtb .node circle,#mermaid-svg-E0kaatidvSHVBxtb .node ellipse,#mermaid-svg-E0kaatidvSHVBxtb .node polygon,#mermaid-svg-E0kaatidvSHVBxtb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E0kaatidvSHVBxtb .rough-node .label text,#mermaid-svg-E0kaatidvSHVBxtb .node .label text,#mermaid-svg-E0kaatidvSHVBxtb .image-shape .label,#mermaid-svg-E0kaatidvSHVBxtb .icon-shape .label{text-anchor:middle;}#mermaid-svg-E0kaatidvSHVBxtb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E0kaatidvSHVBxtb .rough-node .label,#mermaid-svg-E0kaatidvSHVBxtb .node .label,#mermaid-svg-E0kaatidvSHVBxtb .image-shape .label,#mermaid-svg-E0kaatidvSHVBxtb .icon-shape .label{text-align:center;}#mermaid-svg-E0kaatidvSHVBxtb .node.clickable{cursor:pointer;}#mermaid-svg-E0kaatidvSHVBxtb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E0kaatidvSHVBxtb .arrowheadPath{fill:#333333;}#mermaid-svg-E0kaatidvSHVBxtb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E0kaatidvSHVBxtb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E0kaatidvSHVBxtb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E0kaatidvSHVBxtb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E0kaatidvSHVBxtb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E0kaatidvSHVBxtb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E0kaatidvSHVBxtb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E0kaatidvSHVBxtb .cluster text{fill:#333;}#mermaid-svg-E0kaatidvSHVBxtb .cluster span{color:#333;}#mermaid-svg-E0kaatidvSHVBxtb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E0kaatidvSHVBxtb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E0kaatidvSHVBxtb rect.text{fill:none;stroke-width:0;}#mermaid-svg-E0kaatidvSHVBxtb .icon-shape,#mermaid-svg-E0kaatidvSHVBxtb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E0kaatidvSHVBxtb .icon-shape p,#mermaid-svg-E0kaatidvSHVBxtb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E0kaatidvSHVBxtb .icon-shape .label rect,#mermaid-svg-E0kaatidvSHVBxtb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E0kaatidvSHVBxtb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E0kaatidvSHVBxtb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E0kaatidvSHVBxtb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 有
没有
要和某个IP通信
查ARP表有该IP吗
用对应MAC封装帧
广播ARP请求
目标主机单播ARP应答
写入ARP表并通信


四、ARP 欺骗:一场"冒名顶替"的中间人戏

1. 原理:坏人冒充总台,把流量全引到自己身上

ARP 天生不核验应答者身份,谁应答就信谁。攻击者利用这一点:

  • 不断给员工电脑发伪造 ARP 应答:"网关 IP 的 MAC 是我";
  • 员工电脑信了,把要发给网关的流量全发给攻击者;
  • 攻击者再把流量转发给真网关,表面上网络还通------这就是"中间人"。

后果可大可小:

  • 网络时断时续、变慢、掉线;
  • 账号、密码、网页内容被窃听甚至篡改;
  • 网关冲突、IP 冲突告警满天飞。

2. 怎么判断是不是 ARP 欺骗

  • 在多台电脑上看 ARP 表,网关 IP 对应的 MAC 是不是同一个、是不是真网关的 MAC;
  • 如果不同电脑看到的网关 MAC 不一样,或网关 MAC 是一台普通终端,基本就是欺骗;
  • 顺着这个 MAC,在交换机 MAC 表(第 22 课)里定位它接在哪个口,揪出那台设备。

把一次现场排查完整走一遍(照着做)

  1. 员工报"网一卡一卡",先在他电脑上查 ARP(Windows 敲 arp -a),看网关 IP 对应的 MAC;
  2. 再到另一台正常电脑上同样查,两台看到的网关 MAC 不一样、或不是网关真 MAC,基本锁定欺骗;
  3. 记下这个假 MAC,到交换机上 display mac-address xxxx-xxxx-xxxx,查它在哪个端口;
  4. 顺着端口找到工位,拔掉或隔离那台电脑,网络立刻恢复;
  5. 最后 arp static 绑定网关、或开 DHCP Snooping + DAI 防复发。

这一套下来,从"全网掉线"到"抓到人",通常十几分钟,关键是先用 ARP 表确认、再用 MAC 表定位 ,别一上来就重启设备。员工电脑上还可用 arp -d 清掉错误缓存,让它重新学习,避免拔掉攻击者后仍残留错误记录。

3. 命令落点(华为 VRP)

查看 ARP 表:

shell 复制代码
<SW> display arp

正常回显(关键看网关 IP 对应 MAC 是否正确):

text 复制代码
IP ADDRESS   MAC ADDRESS   EXPIRE(M)  INTERFACE
192.168.10.1 00e0-fc12-3456  20       Vlanif10

也可以只看某个接口、或定位某个 IP:

shell 复制代码
<SW> display arp interface Vlanif 10
<SW> display arp | include 192.168.10.1

静态绑定网关(小网最直接的防法):

shell 复制代码
<SW> system-view
[SW] arp static 192.168.10.1 00e0-fc12-3456      # 把网关IP和MAC固定,假的改不动

免费 ARP / 代理 ARP 开关(按需):

shell 复制代码
[SW] interface Vlanif 10
[SW-Vlanif10] arp gratuitous-arp send enable     # 按版本控制是否发送免费ARP
[SW-Vlanif10] arp proxy enable                  # 确有需要才开代理ARP

4. 三道防线:从"人工查"到"自动拦"

第三道防线(正式园区推荐):DHCP Snooping + DAI

  • 先开 DHCP Snooping,交换机记录"哪个 IP 发给了哪个 MAC、哪个口"的绑定表;
  • 再开 DAI(动态 ARP 检测) ,所有 ARP 报文都和绑定表核对,发送 IP/MAC 对不上的,直接丢弃,伪造 ARP 在硬件层面就被拦下。

华为交换机上的基础配置(命令细节随版本有差异,以对应版本手册为准):

shell 复制代码
[SW] dhcp enable
[SW] dhcp snooping enable
[SW] vlan 10
[SW-vlan10] dhcp snooping enable
[SW] interface GigabitEthernet0/0/24
[SW-GigabitEthernet0/0/24] dhcp snooping trusted      # 上联口设为信任口

说明:华为不同型号对 DAI 的命令形式略有差异(部分版本通过 arp anti-attack 系列实现等价功能),核心思路一致------靠 DHCP Snooping 绑定表核对 ARP 真伪。配之前查对应版本手册,别凭记忆照抄。

5. 异常与排查

现象 命令 看到什么 判断 动作
全网时断时续 display arp 网关 MAC 是普通终端 ARP 欺骗 按 MAC 定位端口、拔机
提示 IP 冲突 电脑/日志看 免费 ARP 冲突 有人占用或私接设备 查冲突源、改 IP
网关 MAC 老变 多机查 ARP 各机看到的 MAC 不同 欺骗或网关冲突 静态绑定 + 开 DAI
绑定后仍异常 看绑定表 绑定没生效 口没设信任/配置漏 核对 trusted 口与配置
个别主机不通 display arp 学不到对方 ARP 同 VLAN 隔离或物理问题 回查 VLAN、端口、链路

思科对照

动作 华为 VRP 思科 IOS
看 ARP display arp show ip arp / show arp
静态绑定 arp static IP MAC arp IP MAC ARPA
开 DHCP Snooping dhcp snooping enable ip dhcp snooping
开 DAI (arp anti-attack / 对应命令) ip arp inspection vlan 10
信任口 dhcp snooping trusted ip dhcp snooping trust
代理 ARP arp proxy enable ip proxy-arp

五、🔧 运维视角 & 📐 设计视角

🔧 运维视角:

  • 全网掉线、时断时续、IP 冲突,先 display arp 核对网关 MAC,这是定位欺骗最快的一刀;
  • 小网络直接 arp static 绑死网关,立竿见影;
  • 抓到异常 MAC,回 MAC 表定位端口,别只在电脑上反复重启。

📐 设计视角:

  • 正式园区从规划阶段就把 DHCP Snooping + DAI 写进安全方案,上联口设信任、接入口严格校验;
  • 网关 IP/MAC 要在文档里固定,全网统一,便于核对;安全方案要在施工前评审,别等割接上线后再补,返工成本高。
  • 免费 ARP、代理 ARP 按需开启,默认收敛,减少被滥用的面。

六、小结与命令速查表

  • ARP 负责"已知 IP 求 MAC",请求广播、应答单播,结果记在 ARP 表;
  • 免费 ARP 主动宣告,用于检测冲突/更新缓存,也被 ARP 欺骗利用;
  • 代理 ARP 由路由器替别的网段应答,按需使用;
  • ARP 欺骗靠伪造应答冒充网关,做中间人,现象是掉线、变慢、冲突;
  • 防御三招:查 ARP 表、静态绑定、DHCP Snooping + DAI 自动核对。

本篇命令速查表(华为 VRP):

目的 华为命令 思科对照
看 ARP 表 display arp show ip arp
过滤某 IP `display arp include x.x.x.x`
静态绑定 arp static IP MAC arp IP MAC ARPA
代理 ARP arp proxy enable ip proxy-arp
DHCP Snooping dhcp snooping enable ip dhcp snooping
信任口 dhcp snooping trusted ip dhcp snooping trust
DAI (版本对应 arp anti-attack) ip arp inspection vlan 10

七、思考题 & 评论区接招

💬 统计题(评论区扣个数字,我统计下概率):

你在实际工作中,遇到过 ARP 欺骗、网关冲突或私接路由器导致的断网吗?

遇到过的,评论区扣 1 ;靠"静态绑定"解决的扣 2,靠"DHCP Snooping/DAI"解决的扣 3。

我会统计下这类问题的概率,再把"现场怎么快速定位到那台惹事电脑"的完整步骤整理出来。


系列导航:

我是你们的老网工。这一课把 ARP 的"能"和"不能"讲清楚了:它能帮我们找到 MAC,却不能替我们核实对方身份。到这儿,二层、三层、ARP 这一圈基本理顺。下一课我们换个话题------很多人以为把两根网线捆一起,带宽就该翻倍,结果发现并没有,问题就出在链路聚合的"分担方式"上。下一课《链路聚合》,我们聊聊为什么聚合后流量还会"偏科"。下一课见。

相关推荐
云计算练习生1 小时前
什么是文件权限?Linux 中 rwx 与数字权限的对应关系
linux·运维·服务器·操作系统·文件权限管理
FY@-@1 小时前
VMware ESXi 7.0 实验全记录:嵌套安装 → 网络配置 → 存储 → Windows 10 虚拟机部署
运维·网络·windows·云计算
ynchyong1 小时前
IPv4 时代的地址冲突检测
网络·ipv4·冲突检测·免费arp·无敌apr·announcemnet
饿了吃洗衣凝珠1 小时前
red hat day2
linux·运维·服务器
ONLYOFFICE2 小时前
ONLYOFFICE 10.0:深入了解最新的 40 项安全修复
网络·安全
上海云盾-高防顾问2 小时前
边缘验签是什么
运维·服务器·网络
CH_Qing2 小时前
lspci 常见debug 命令
网络
天南散修2 小时前
《802.11-2024》第08讲 · 聚合与块确认:把「一次一帧」变成「一次一批」
linux·网络·wifi·802.11
Source.Liu2 小时前
【A11】服务器数据库结构笔记
服务器·数据库·笔记