因为arp -s仅写入内核运行时arp缓存,不落盘持久化,系统重启、网络服务重载或dhcp更新触发的接口重置均会清空;其perm标记仅表示当前会话不超时,并非真正永久,且不校验mac真实性、不指定网卡易绑错设备。

arp -s 添加的条目为什么重启就没了
因为 arp -s 只写入内核运行时 ARP 缓存,不落盘、不持久。系统重启、systemctl restart networking、甚至 DHCP lease 更新触发的接口重置,都会清空它。
常见错误是执行完 sudo arp -s 192.168.1.1 00:11:22:33:44:55 就以为防住了——实际上只要网络服务 reload 一次,绑定就失效,攻击窗口立刻打开。
-
arp -n输出里看到PERM标记 ≠ 永久,只是“当前会话内不超时” - 没验证 MAC 是否真实:输错
00:11:22:33:44:55却没 ping + arp -n 确认,结果通信直接中断 - 多网卡环境默认绑到第一个可用接口,可能绑错设备(比如绑到了 docker0 而非 eth0)
用 ip neigh add 替代 arp -s 更可靠
ip neigh add 显式指定网卡和永久标记,语义更清晰、行为更可控,尤其适合脚本化和多接口场景。
正确写法:ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
nud permanent是关键:表示不可达检测禁用、永不超时、不被动态刷新覆盖 -
dev eth0必须显式指定,避免自动选错接口 - 替换已有条目用
ip neigh replace,不是先del再add,防止短暂空白期 - 验证是否生效:
ip neigh show 192.168.1.1应返回含PERMANENT和正确dev的行
让静态 ARP 开机自动加载的三种方式
持久化不是可选项,是防 ARP 欺骗的底线。不同发行版适配策略不同,别混用。
- Debian/Ubuntu(使用 ifupdown):在
/etc/network/interfaces对应接口段加post-up ip neigh add ...,每条绑定单独一行 - RHEL/CentOS 8+ 或 NetworkManager 用户:用
nmcli connection modify "System eth0" ipv4.post-up-command "ip neigh add ...",且必须配ipv4.ignore-auto-routes yes,否则 DHCP 获取的网关会覆盖静态条目 - 通用方案(兼容所有发行版):写 systemd service,
After=network-online.target,ExecStart 调用 shell 脚本执行ip neigh add命令;脚本开头加sleep 2避免网络未就绪失败
光绑 IP-MAC 远不够,必须开内核防护
静态绑定只是“锁住已知条目”,不开内核参数,攻击者仍可通过伪造响应污染邻居表或绕过绑定。
以下三项必须设为 1 并写入 /etc/sysctl.conf:
-
net.ipv4.conf.all.rp_filter = 1:反向路径过滤,丢弃源地址不可达的包 -
net.ipv4.conf.all.arp_ignore = 1:只响应目标为本机 IP 的 ARP 请求 -
net.ipv4.conf.all.arp_announce = 2:ARP 回复时优先用接收接口的 IP,防跨网卡污染
最后执行 sysctl -p 加载。漏掉任意一项,静态绑定在真实攻击下大概率被绕过。










