![为什么 Linux 桥接器显示本地接口的两个 MAC 地址条目?](https://linux22.com/image/1593141/%E4%B8%BA%E4%BB%80%E4%B9%88%20Linux%20%E6%A1%A5%E6%8E%A5%E5%99%A8%E6%98%BE%E7%A4%BA%E6%9C%AC%E5%9C%B0%E6%8E%A5%E5%8F%A3%E7%9A%84%E4%B8%A4%E4%B8%AA%20MAC%20%E5%9C%B0%E5%9D%80%E6%9D%A1%E7%9B%AE%EF%BC%9F.png)
为什么 Linux 桥接器显示本地接口的两个 MAC 地址条目?
brctl showmacs bridge1
port no mac addr is local? ageing timer
1 0c:b4:7a:f5:36:b6 no 23.90
1 0c:b4:7a:f5:37:3b no 19.58
1 0c:a4:7a:f9:d7:04 yes 0.00
1 0c:a4:7a:f9:d7:04 yes 0.00
10 fe:c4:00:ab:d5:18 yes 0.00
10 fe:c4:00:ab:d5:18 yes 0.00
答案1
这与我的 Debian 9 类似:
# brctl showmacs br0
port no mac addr is local? ageing timer
2 00:08:ca:42:2c:02 yes 0.00
2 00:08:ca:42:2c:02 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
这些条目来自 FDB(转发数据库)。还有另一个工具可以显示它:
# bridge fdb show | grep 'master br0'
00:30:18:a6:cb:21 dev eth1 vlan 1 master br0 permanent
00:30:18:a6:cb:21 dev eth1 master br0 permanent
00:08:ca:42:2c:02 dev wlan0 master br0 permanent
00:08:ca:42:2c:02 dev wlan0 vlan 1 master br0 permanent
两个具有相同 MAC 地址的条目在输出中看起来相同,brctl
但bridge
显示它们不同。每对都有一个有MAC 地址的条目vlan 1
和一个没有 MAC 地址的条目。
vlan 1
指的是虚拟局域网(VLAN)标识符为 1。这表示该特定标识符有一个 VLAN 过滤器条目。
未配置 VLAN 的基本交换机会禁用或永久启用 VLAN 功能,并使用包含设备上所有端口作为成员的默认 VLAN。默认 VLAN 通常使用 VLAN 标识符 1。
我从未在 Debian 中明确配置过它vlan 1
;它默认存在。我尝试调查它的来源,发现这次讨论。那里的问题与您的问题无关,但它仍然表明vlan 1
Linux 中的 VLAN-aware bridge 没有什么奇怪的。
为了确认 VLAN 与您的要求相关,我执行以下操作:
# bridge vlan show dev eth1
port vlan ids
eth1 1 PVID Egress Untagged
# bridge vlan add vid 123 dev eth1
#
# bridge vlan show dev eth1
port vlan ids
eth1 1 PVID Egress Untagged
123
# bridge fdb show | grep 'master br0'
00:30:18:a6:cb:21 dev eth1 vlan 123 master br0 permanent
00:30:18:a6:cb:21 dev eth1 vlan 1 master br0 permanent
00:30:18:a6:cb:21 dev eth1 master br0 permanent
00:08:ca:42:2c:02 dev wlan0 master br0 permanent
00:08:ca:42:2c:02 dev wlan0 vlan 1 master br0 permanent
#
# brctl showmacs br0
port no mac addr is local? ageing timer
2 00:08:ca:42:2c:02 yes 0.00
2 00:08:ca:42:2c:02 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
#
# bridge vlan del vid 123 dev eth1
#
# sudo brctl showmacs br0
port no mac addr is local? ageing timer
2 00:08:ca:42:2c:02 yes 0.00
2 00:08:ca:42:2c:02 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
1 00:30:18:a6:cb:21 yes 0.00
如你所见,将带有标识符123
(任意数字,示例)的 VLAN 过滤器添加到我的后eth1
,brctl showmacs
列出了其 MAC 地址三次。123
已删除 – 我们又回到了两次。
概括:
- 您的网桥能够识别 VLAN。
- 每个桥接本地接口都添加了一个 VLAN 过滤器条目(
vlan X
,最有可能vlan 1
)。 - 实际上,对于每个这样的接口,FDB 包含两个条目:一个带有该接口的条目
vlan X
,一个不带有该接口的条目。 brctl showmacs
显示这些条目但省略了有关 VLAN 的信息,因此有些行看起来完全相同。bridge fdb show
不会省略有关 VLAN 的信息,它会向您显示实际条目的不同。