Linux-Networking

Linux:是什麼導致靜態 ARP 條目在鏈路斷開時刷新

  • November 17, 2021

這是一個關於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。謝謝!

以下是與此問題相關的更改歷史記錄:

net:驅逐運營商關閉的鄰居條目

在 netdev -next 樹上送出:這負責在鏈路使運營商關閉時刪除鄰居條目,並在送出消息中提供基本原理。

核心 v4.19 發布。

這仍然不包括來自 netdev -next 分支的送出。

Davem 的合併請求(包括先前的鄰居更改)被合併到 linux master 中,因此一旦發布就包含在 linux v4.20中。

快進……

net: arp: 引入arp_evict_nocarriersysctl 參數

此更改引入了一個新的 sysctl 參數arp_evict_nocarrier. 當設置(預設)時,ARP 記憶體將在NOCARRIER事件中被清除。此新選項已預設為“1”,以保持現有行為。

$$ … $$

因此,您可能必須等待靶心反向移植中的核心 >= 5.16 才能通過執行 then 來恢復舊行為,例如:

sysctl -w net.ipv4.conf.eth0.arp_evict_nocarrier=0

或等待稍後的一些調整使代理條目表現得像永久條目(使特定程式碼不受運營商停機事件的影響)。


關於第二個問題“如何創建靜態 ARP 條目”,這裡是在介面eth0上添加 MAC 地址為 12:34:56:78:9a:bc 的 192.0.2.2 的靜態條目的方法,使用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

引用自:https://serverfault.com/questions/1083698