这是一个关于网络行为差异的问题Debian 破坏者(内核 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。谢谢!
答案1
以下是与此问题相关的变更历史记录:
-
net:驱逐运营商停机时的邻居条目
在 netdev -next tree 上提交:当链路上的载波发生故障时,负责删除邻居条目,并在提交消息中说明理由。
-
内核v4.19发布。
这仍然不包括来自 netdev -next 分支的提交。
-
Davem 的拉取请求(包括之前的邻居更改)的合并已合并到 linux master 中,因此被包含在 linux 中v4.20一旦发布。
快进...
2021-11-01 19:57:14 -0700+2021-11-01 19:57:17 -0700
net:arp:引入
arp_evict_nocarrier
sysctl参数此更改引入了一个新的 sysctl 参数
arp_evict_nocarrier
。设置后(默认),ARP 缓存将在事件发生时清除NOCARRIER
。此新选项的默认设置为“1”,以保持现有行为。
[...]
因此,您可能必须等待 bullseye-backports 中的内核 >= 5.16 才能恢复旧行为,例如:
sysctl -w net.ipv4.conf.eth0.arp_evict_nocarrier=0
或者等待稍后的调整代理人条目的行为类似于永久条目(其获取特定代码以免受到载体关闭事件的影响)。
关于第二个问题“如何创建静态 ARP 条目”,以下是在接口上为 MAC 地址为 12:34:56:78:9a:bc 的 192.0.2.2 添加静态条目的方法eth0,使用replace
关键字而不是关键字,add
该关键字可能会随机返回RTNETLINK answers: File exists error
(或者change
会遭受相反的结果):
ip neigh replace 192.0.2.2 dev eth0 lladdr 12:34:56:78:9a:bc nud permanent