地址池 ARP 刷新
地址池 ARP 刷新
背景
在网络设备替换场景中(例如原厂商设备被 FortiGate 替换),如果设备的 SNAT 使用了 IP Pool(地址池),可能会出现如下问题:
- 新防火墙上线后,IP Pool 不会主动发送 Gratuitous ARP(免费 ARP)。
- 上游路由器或交换机的 ARP 缓存仍保留旧防火墙的 MAC。
- 因此下行流量仍发往旧 MAC,新防火墙收到后直接丢弃。表现为:上行能通,下行不通。
- 割接时无法联系运营商关闭路由器接口,导致无法更新运营商路由器的 ARP 表。
网络环境

使用 FortiGate 替换原有旧防火墙。
FortiGate 上线后,上游 ISP 路由器的 ARP 缓存仍保留旧防火墙的 MAC。
新 FortiGate 通过 IP Pool 配置 SNAT,使内网客户端访问 Internet。
config system interface edit wan1 set ip 192.168.1.2/24 set allowaccess ping next end config firewall ippool edit "pool1" set startip 192.168.1.11 set endip 192.168.1.20 set associated-interface wan1 next end config firewall policy edit 1 set name "to_Internet" set srcintf "lan" set dstintf "wan1" set action accept set srcaddr "LAN" set dstaddr "all" set schedule "always" set service "ALL" set ssl-ssh-profile "certificate-inspection" set nat enable set ippool enable set poolname "pool1" next end
方法 1 - HA 切换
如果设备为 HA 组网,HA 主备切换会触发 ARP 更新,FortiGate 会对所有 VIP、接口 IP、IP Pool 地址广播 Gratuitous ARP。
确认 HA 已启用 Gratuitous ARP(默认即启用)。
config system ha set gratuitous-arps enable set arps 5 set arps-interval 8 end在当前 HA 主设备上手动触发一次 HA 切换。
diagnose sys ha reset-uptime切换完成后,在新的 HA 主设备上抓包验证,可以看到设备根据 IP Pool 中的地址发送了对应的 Gratuitous ARP。
FortiGate # diagnose sniffer packet port3 "arp" 4 0 l 2025-10-13 20:57:17.298321 port3 -- arp who-has 192.168.1.11 tell 192.168.1.11 2025-10-13 20:57:17.298331 port3 -- arp who-has 192.168.1.12 tell 192.168.1.12 2025-10-13 20:57:17.298340 port3 -- arp who-has 192.168.1.13 tell 192.168.1.13 ... 2025-10-13 20:57:49.206136 port3 -- arp who-has 192.168.1.18 tell 192.168.1.18 2025-10-13 20:57:49.206143 port3 -- arp who-has 192.168.1.19 tell 192.168.1.19 2025-10-13 20:57:49.206149 port3 -- arp who-has 192.168.1.20 tell 192.168.1.20
方法 2 - 临时创建 VIP
FortiGate 的 VIP 支持参数gratuitous-arp-interval,可主动周期性广播 Gratuitous ARP。可临时将 IP Pool 地址段配置为 VIP 对象,以此强制发送 Gratuitous ARP 来刷新上游路由器 ARP 表项。
创建 VIP 对象,地址范围包含 IP Pool 中的地址(可根据 IP Pool 数量配置多个 VIP)。
重要
extip:填写 IP Pool 中的地址。mappedip:可随意填写。extintf:填写连接运营商侧的接口。gratuitous-arp-interval:Gratuitous ARP 的更新间隔,范围 5~86400s,设置为 0 表示不发送 Gratuitous ARP。注意间隔设置过小可能触发上游安全告警。
config firewall vip edit arp-refresh set extip 192.168.1.11-192.168.1.20 set mappedip 192.168.3.11-192.168.3.20 set extintf wan1 set portforward enable set gratuitous-arp-interval 5 set extport 12345 set mappedport 12345 next end配置完成后抓包验证,设备根据 VIP 中的地址发送了对应的 Gratuitous ARP。
FortiGate # diagnose sniffer packet wan1 'arp' 4 0 l interfaces=[port3] filters=[arp] 2025-10-13 21:50:46.230249 port3 -- arp who-has 192.168.1.11 tell 192.168.1.11 2025-10-13 21:50:46.230257 port3 -- arp who-has 192.168.1.12 tell 192.168.1.12 2025-10-13 21:50:46.230262 port3 -- arp who-has 192.168.1.13 tell 192.168.1.13 ...确认上游路由器 ARP 更新完成后,删除该 VIP。
config firewall vip delete arp-refresh end
Gratuitous ARP 原理
报文示例
Gratuitous ARP 的报文示例(gratuitous_arp.pcap)。
报文特征:Gratuitous ARP = Sender IP == Target IP 且 Destination MAC == FF:FF:FF:FF:FF:FF。

主要作用
- 刷新上游交换机或路由器的 ARP 表。
- 通知邻居设备该 IP 地址的 MAC 已变更。
- 检测 IP 冲突(同网段若有重复地址,会收到响应)。
| 字段 | 特征 | 说明 |
|---|---|---|
| 操作码(Opcode) | 1 (request) 或 2 (reply) | GratuitousARP 可为 Request 或 Reply 形式 |
| Sender IP (SPA) | 本机 IP | 表示自己拥有的 IP 地址 |
| Target IP (TPA) | 与 Sender IP 相同 | 这是 Gratuitous ARP 的关键特征之一 |
| 目标 MAC (THA) | 全 0 (00:00:00:00:00:00) | 因为不是响应任何主机,所以目标 MAC 为空 |
| 源 MAC (SHA) | 本机 MAC 地址 | 通常是接口的真实 MAC |
| 以太网目标地址 | FF:FF:FF:FF:FF:FF(广播) | 告知整个二层网段的所有设备 |
| 以太网类型 (Ethertype) | 0x0806 | 表示这是一个 ARP 报文 |
Gratuitous ARP 的两种类型
| 类型 | Opcode | 特点 | 主要用途 |
|---|---|---|---|
| ARP Request 型 | 1 | “谁有我的地址?” | 通知邻居更新 ARP 表 |
| ARP Reply 型 | 2 | “我就是这个地址” | 某些厂商采用这种形式广播自己的存在 |