Linux静态ARP绑定需用ip neigh add加nud permanent实现永久绑定,配合发行版持久化配置及内核arp_ignore/arp_announce防护参数,才能有效防御ARP欺骗。

Linux中配置静态ARP绑定,核心是把特定IP和MAC地址强制关联,并确保它不被动态刷新覆盖、不随重启丢失。光用arp -s加一条命令只是临时生效,实际防不住ARP欺骗——系统一重启、网络一重载,绑定就没了。
用 ip neigh add 替代 arp -s,明确指定网卡和永久标记
推荐使用ip neigh命令,语义清晰、行为可控,尤其适合多网卡环境:
-
ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent—— 这条命令显式绑定了IP、MAC、网卡,并设为永久不超时 -
nud permanent是关键:禁用不可达检测,不因探测失败或时间到期而删除 -
dev eth0必须写全,避免默认选错接口(比如误绑到docker0或lo) - 已有条目要更新,直接用
ip neigh replace,不要先del再add,防止短暂空白期被攻击
让静态ARP开机自动加载,不能靠手动执行
临时绑定毫无防护意义。持久化方式需按发行版选择,避免混用:
- Debian/Ubuntu(使用ifupdown):在
/etc/network/interfaces对应接口段添加post-up ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent - RHEL/CentOS 8+ 或 NetworkManager 用户:
nmcli connection modify "System eth0" +ipv4.post-up-command "ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent"
并务必加上:nmcli connection modify "System eth0" ipv4.ignore-auto-routes yes,否则DHCP更新会悄悄冲掉绑定 - 通用兼容方案:写systemd服务,
After=network-online.target,ExecStart调用shell脚本执行ip neigh add,脚本开头加sleep 2防网络未就绪
验证是否真生效,不能只看 arp -n 显示 PERM
显示PERM不等于防得住。必须确认三点:
- 运行
ip neigh show 192.168.1.1,输出中要有PERMANENT字样,且dev字段是你指定的网卡(如eth0) - 主动发ARP请求验证:
arping -c 2 -I eth0 192.168.1.1,返回的MAC必须和你绑定的一致 - 模拟攻击测试:用另一台机器运行
arpspoof -i eth0 -t 192.168.1.1 192.168.1.100,再查ip neigh show 192.168.1.1——MAC不应变化
必须同步开启内核级ARP防护参数
静态绑定只是“锁住已知条目”,不开内核防护,攻击者仍可伪造响应污染邻居表:
- 编辑
/etc/sysctl.conf,加入以下三项并设为1:net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.all.rp_filter = 1 - 对单网卡更严格可指定接口名,如
net.ipv4.conf.eth0.arp_ignore = 1 - 执行
sudo sysctl -p立即加载,确保重启后也生效


















