这是一个关于Debian Buster(内核 4.19.0-18)和Debian Bullseye(内核 5.10.0-9)之间网络行为差异的问题。在 Buster 上,如果接口上的链接断开,代理 arp 条目将继续存在。在 Bullseye 上,他们没有。
情况:在特定接口上创建静态代理 ARP 条目:
ip neigh add proxy 1.2.3.5 dev eth0
我可以验证该条目是否存在:
ip neigh show proxy
现在,如果该接口上的链接断开并再次恢复,则在 Buster 上,代理 arp 条目仍然存在,在 Bullseye 上它们消失了。
我想知道这种差异背后的原因。它是内核功能吗?udev 是这样做的吗?是否有一个 sysctl 设置来管理这个?
有人能指出我正确的方向吗?如果您知道如何在 Bullseye / 内核 5.10 上创建静态 ARP 条目,那就更好了。
请注意,我使用的是 sysvinit,而不是 systemd。谢谢!
以下是与此问题相关的更改历史记录:
2018-10-12 09:47:39 -0700
在 netdev -next 树上提交:这负责在链路使运营商关闭时删除邻居条目,并在提交消息中提供基本原理。
2018-10-22 07:47:45 +0100
内核 v4.19 发布。
这仍然不包括来自 netdev -next 分支的提交。
2018-10-24 06:47:44 +0100
Davem 的合并请求(包括先前的邻居更改)被合并到 linux master 中,因此一旦发布就包含在 linux v4.20中。
快进……
2021-11-01 19:57:14 -0700 + 2021-11-01 19:57:17 -0700
因此,您可能必须等待靶心反向移植中的内核 >= 5.16 才能通过执行 then 来恢复旧行为,例如:
或等待稍后的一些调整使代理条目表现得像永久条目(使特定代码不受运营商停机事件的影响)。
关于第二个问题“如何创建静态 ARP 条目”,这里是在接口eth0上添加 MAC 地址为 12:34:56:78:9a:bc 的 192.0.2.2 的静态条目的方法,使用
replace
关键字而不是add
关键字这可能会随机返回一个RTNETLINK answers: File exists error
(或change
会遭受相反的影响):