用nmcli配置静态arp映射需在网卡上线后自动执行arp -s绑定、限定设备、禁用dhcp路由覆盖,并启用arp_ignore/announce/rp_filter内核参数;验证须见ip neigh的permanent条目、arping响应一致且抗arpspoof攻击。

用 nmcli 配置物理网卡的静态 ARP 映射,核心是让绑定命令在网卡上线后自动执行、限定作用设备、防止 DHCP 覆盖,并配合内核参数堵住其他污染路径。临时运行 arp -s 无法防住重启或网络重载后的攻击窗口,必须持久化且带设备约束。
确认 NetworkManager 版本与连接名
静态 ARP 的 post-up-command 功能从 NM 1.22 开始原生支持:
- 运行
nmcli --version检查版本,低于 1.22 需升级或改用 dispatcher(不推荐) - 查当前有线连接名:
nmcli connection show --active | grep ethernet,常见如System eth0或Wired connection 1 - 确保网卡由 NM 管理:
nmcli device show eth0 | grep GENERAL.CONNECTION,若为unmanaged,先执行sudo nmcli device set eth0 managed yes
添加带设备限定的静态 ARP 绑定
每条绑定必须单独添加,显式指定目标 IP 和真实 MAC,且使用冒号分隔的 MAC 格式:
nmcli connection modify "System eth0" +ipv4.post-up-command "arp -s 192.168.1.1 00:11:22:33:44:55"nmcli connection modify "System eth0" +ipv4.post-up-command "arp -s 192.168.1.254 aa:bb:cc:dd:ee:ff"- 务必用
+号追加,避免覆盖已有 post-up-command - 不要合并为一行 shell 命令,NM 不会解析分号或 &&
关闭自动路由注入,防止 DHCP 覆盖 ARP 条目
DHCP 更新时可能刷新默认路由并触发邻居表重建,导致静态绑定失效:
nmcli connection modify "System eth0" ipv4.ignore-auto-routes yes-
nmcli connection modify "System eth0" ipv4.route-metric 100(设为较高值,降低优先级) - 这两步不做,即使绑定了,几小时后也可能被 DHCP 重获取过程悄悄清除
验证是否真正生效且抗干扰
不能只看 arp -n 是否显示 PERM,要确认三点:
- 运行
ip neigh show dev eth0,对应条目需含PERMANENT且dev字段为eth0 - 执行
arping -c 2 -I eth0 192.168.1.1,返回 MAC 必须与你绑定的一致 - 模拟攻击测试:在另一台机器上运行
arpspoof -i eth0 -t 192.168.1.1 192.168.1.100,再查arp -n | grep 192.168.1.1—— MAC 不应变动
同步启用关键内核防护参数
仅靠静态绑定不够,攻击者仍可通过未校验的 ARP 请求更新邻居表:
-
sudo sysctl -w net.ipv4.conf.eth0.arp_ignore=1(只响应目标为本机 IP 的请求) -
sudo sysctl -w net.ipv4.conf.eth0.arp_announce=2(发 ARP 时用最佳本地地址作源) -
sudo sysctl -w net.ipv4.conf.eth0.rp_filter=1(启用反向路径过滤) - 以上需写入
/etc/sysctl.conf持久化,否则重启即失效











