如何配置桥接器以便仅与桥接接口交换数据包?

如何配置桥接器以便仅与桥接接口交换数据包?

为了重新创建网状网络拓扑,我喜欢连接多个网络命名空间。每个连接端都是此类命名空间中的一个接口。

现在我需要将命名空间中的所有端点接口连接成一个。我想到了网桥,但它们的行为不符合我的需要,因为它们会自行进行路由。

所以我需要让网桥充当集线器并阻止网桥接口之间的通信。

要将网桥配置为集线器:

ip link set "br0" type bridge stp_state 0
ip link set "br0" type bridge ageing_time 0
ip link set "br0" type bridge forward_delay 0

(这会导致所有数据包泛滥到除发送方之外的所有其他接口)

但是我该如何阻止网桥接口之间的任何流量呢?

答案1

您可以通过将桥的所有端口设置为隔离来实现这一点,但有一个除外:未隔离的端口,因此隔离端口仍可与之通信。它的概念类似于私有 VLAN,又称端口隔离,其中非隔离端口将被称为上行链路

人桥

桥接链路集 - 设置端口上的桥接特定属性

[...]

隔离于或者隔离
控制给定端口是否隔离,这意味着它只能与非隔离端口通信。默认情况下,此标志处于关闭状态。

这个非隔离端口不能是桥的自隐端口(至少我从测试中可以得出这个结论)。因此,你不能直接在桥上放置 IP。相反,你可以将桥留空并添加一个新的韦特对:一个作为桥接端口,另一个作为 IP。这将是“上行链路”。

假设你已经奴役了接口veth0 veth1veth2,链接其他命名空间,到br0。当它们成为桥接端口后,你必须执行以下操作:

for i in veth0 veth1 veth2; do bridge link set $i isolated on; done

现在这些端口之间无法进行通信,只能与非隔离端口进行通信。

添加上行链路接口(带有韦特两端保持在相同的当前命名空间中)并对其进行配置:

ip link add name uplink type veth peer name bridgeuplinkport
ip link set bridgeuplinkport master br0
ip link set bridgeuplinkport up
ip link set uplink up
ip address add dev uplink 192.0.2.10/24 # for example

相关内容