4. ARP问题排查:ARP表项错误、ARP攻击导致路由不可达

说到ARP,我估计不少朋友都吃过它的亏。

ARP这玩意儿,说白了就是IP地址和MAC地址之间的翻译官。路由器要转发数据包,光知道目标IP不行,还得知道下一跳设备的MAC地址。这个翻译过程一旦出错,路由就不可达了。

我遇到过好几次这样的情况:网络配置看着都对,路由表也正常,但就是ping不通。查来查去,最后发现是ARP表项在搞鬼。

4.1 ARP表项错误:最常见的“隐形杀手”

ARP表项错误,通常有两种情况:

  • ARP表项老化:设备变更了IP或MAC,但网关的ARP表没更新
  • ARP表项冲突:同一个IP对应了多个MAC地址

怎么排查?我个人的习惯是三步走:

  1. 第一步:查看ARP表
    在网关或路由器上执行:
# 查看完整的ARP表
arp -a

# 或者用更详细的命令(Linux环境)
ip neigh show

输出大概长这样:

192.168.1.1  00:1a:2b:3c:4d:5e  dynamic
192.168.1.10 00:1a:2b:3c:4d:5f  dynamic
192.168.1.20 00:1a:2b:3c:4d:60  stale

注意看状态列。如果出现 stalefailed,说明这个表项可能有问题。

  1. 第二步:验证MAC地址真实性
    去目标设备上查一下真实的MAC:
# Windows
ipconfig /all

# Linux
ip link show

对比一下,如果ARP表里的MAC和实际设备对不上,那就是表项错误了。

  1. 第三步:手动清理并重建ARP表项
# 删除指定IP的ARP表项
arp -d 192.168.1.10

# 或者清空整个ARP表(慎用)
arp -d

# 然后触发重新学习
ping 192.168.1.10
我的经验: 有一次客户说核心交换机到某台服务器不通,我查了半天路由没问题,最后发现是ARP表里那个服务器的MAC地址是00:00:00:00:00:00。你想想看,这怎么可能通?手动删掉后,重新ping一下,立马就恢复了。

4.2 ARP攻击:网络里的“冒名顶替者”

ARP攻击,说白了就是有人伪造ARP应答包,告诉网关“我是那个IP,我的MAC是XX”。网关信了,就把流量发给了攻击者。

典型的症状:

  • 部分用户间歇性断网
  • 网关的ARP表里,同一个IP对应多个MAC
  • 网络延迟忽高忽低

排查方法,我一般这么干:

4.2.1 抓包确认

在网关端口上抓包,过滤ARP流量:

tcpdump -i eth0 arp -nn

正常情况,ARP请求和应答应该是一对一的。如果你看到同一个IP的ARP应答来自不同的MAC地址,那基本可以确定有攻击。

4.2.2 定位攻击源

我曾经遇到过一个案例,整个办公室都在喊网络卡。我抓包一看,好家伙,网关的IP被几十个MAC地址轮番应答。顺着MAC地址查交换机端口,最后发现是一台中了毒的员工电脑。

定位方法:

  1. 在交换机上查MAC地址对应的端口:show mac-address-table | include 00:1a:2b:3c:4d:5e
  2. 顺着端口找到接入设备
  3. 断网隔离,然后杀毒或重装系统

4.2.3 临时防御措施

在找到根源之前,可以先做临时防护:

# 在网关上配置静态ARP(以Linux为例)
arp -s 192.168.1.1 00:1a:2b:3c:4d:5e

# 或者用ip命令
ip neigh add 192.168.1.1 lladdr 00:1a:2b:3c:4d:5e nud permanent
注意: 静态ARP虽然能防攻击,但一旦网关或对端设备更换了网卡,你得手动更新。否则,网络又会不通。我曾经就吃过这个亏,换了核心交换机忘了更新静态ARP,结果半夜被叫起来处理故障。

4.3 实战排查流程总结

嗯,这里我给大家整理一个快速排查清单:

步骤 操作 预期结果
1 arp -a 查看ARP表 表项完整,状态为dynamic或reachable
2 对比实际设备MAC MAC地址一致
3 抓包检查ARP应答 每个IP只有唯一MAC应答
4 检查交换机MAC表 MAC地址对应唯一端口
5 配置静态ARP(临时方案) 路由可达,ping通

核心要点:

  • ARP表项错误,先删后重建,简单粗暴
  • ARP攻击,先抓包确认,再定位端口,最后隔离源头
  • 静态ARP是双刃剑,用得好是防护,用不好是隐患

说实话,ARP问题排查起来并不复杂,但容易被忽略。很多工程师一遇到路由不可达,就盯着路由表看半天,其实回头看一眼ARP表,问题可能就解决了。我个人习惯是,只要遇到“路由可达但ping不通”的情况,第一件事就是查ARP。

好了,这一节就到这里。下一节我们聊聊更隐蔽的MTU问题,那个坑更深。