Centos

將 TAP 介面添加到網橋時 ARP 表清空

  • January 9, 2021

我在 CentOS 上的 ARP 表有問題。有時,當我創建 TAP 介面並將其添加到網橋時,ARP 表會被清除。

例如,當我執行此命令時:

sudo ip tuntap add dev tap-device-u98 mode tap; sudo ip link set dev tap-device-u98 master br0

ARP 表下降到只有幾個條目。

當我這樣做時也會發生這種情況:

sudo ip link set dev tap-device-u98 nomaster

ARP 表中的大多數條目都是永久性的,由自製的專用應用程序管理(滿足我們的特定需求)。它們最多可以容納 12k 條目,但數量無關緊要(大表(12k)和小表(10)一樣)。

這發生在我們的大部分伺服器上,從 CentOS6.2 到 CentOS7.8。

生產中出現的確切問題不是上述命令,而是 openvpn(創建 TAP 介面)和 brctl(將介面添加到網橋)。但這似乎無關緊要,因為問題也發生在“ip”上。帶有“ip”命令的 PoC 在 CentOS 7.4.1708 上執行,核心為 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017

/var/log/messages 沒有多大幫助:

--- (Create interface and mount it on br0)
Nov 26 15:52:51 localhost NetworkManager[733]: <info>  [1606402371.7604] manager: (tap-device-u98): new Tun device (/org/freedesktop/NetworkManager/Devices/2723)
Nov 26 15:52:51 localhost kernel: br0: port 7(tap-device-u98) entered blocking state
Nov 26 15:52:51 localhost kernel: br0: port 7(tap-device-u98) entered disabled state
Nov 26 15:52:51 localhost kernel: device tap-device-u98 entered promiscuous mode
--- (Remove interface from br0 and delete it)
Nov 26 15:52:51 localhost kernel: device tap-device-u98 left promiscuous mode
Nov 26 15:52:51 localhost kernel: br0: port 7(tap-device-u98) entered disabled state
Nov 26 15:52:51 localhost NetworkManager[733]: <info>  [1606402371.8909] device (tap-device-u98): released from master device br0

關於可能出錯的任何想法?

為了記錄,我在這裡發布答案。

由於網橋的 MAC 地址的計算方式,向/從它添加或刪除介面可以觸發 MAC 地址的重新計算(來自br_stp_if.c 的函式 br_stp_recalculate_bridge_id

因此,由於網橋沒有固定的 MAC 地址,它可能會被重新生成,從而導致 ARP 丟棄。

要解決此問題,只需修復 MAC 地址,然後:

sudo vim /etc/sysconfig/network-scripts/ifcfg-br0
   [...]
   MACADDR=xx:xx:xx:xx:xx:xx

sudo ifdown br0
sudo ifup br0

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