nmcli配置静态ARP需用post-up-command(NM 1.22+)持久绑定并限定设备,配合ignore-auto-routes、route-metric及内核arp_ignore/announce/rp_filter防护,验证须见ip neigh的PERMANENT条目与arping一致性。

用 nmcli 配置静态 ARP 映射,核心是让绑定命令在网卡上线后自动执行,并避开 NetworkManager 对 ARP 表的干扰。它不能靠临时 arp -s 解决,必须持久化、带设备限定、配合路由隔离。
确认 NetworkManager 版本并启用 post-up-command
该功能从 NM 1.22 开始原生支持。先检查版本:
nmcli --version若低于 1.22,需改用 dispatcher 脚本(不推荐,易出错)。确认可用后,确保连接名准确(如 System eth0),再添加绑定指令:
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"
注意:每条绑定单独一行,不要合并;MAC 地址格式统一用冒号分隔(:),避免短横线(-)导致解析失败。
关闭自动路由覆盖,防止 DHCP 冲掉静态条目
NetworkManager 默认会把 DHCP 获取的网关写入路由表,并可能触发 ARP 表刷新。必须禁用此行为:
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 不够。攻击者仍可通过未校验的 ARP 请求更新邻居表。必须同步开启:
-
sysctl -w net.ipv4.conf.eth0.arp_ignore=1(只响应目标为本机 IP 的 ARP 请求) -
sysctl -w net.ipv4.conf.eth0.arp_announce=2(使用最佳本地地址应答) -
sysctl -w net.ipv4.conf.eth0.rp_filter=1(启用反向路径过滤)
以上参数需写入 /etc/sysctl.conf 持久化,否则重启即失效。


















