为了重新创建网状网络拓扑,我喜欢连接多个网络命名空间。每个连接端都是这样一个命名空间中的一个接口。
现在我需要将命名空间中的所有端点接口连接成一个。想到了网桥,但它们的行为不像我需要的那样,因为它们自己做路由。
所以我需要使网桥充当集线器并阻止网桥接口之间的通信。
要将网桥配置为集线器:
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
(这应该会导致所有数据包被洪泛到所有其他接口,除了发送方)
但是如何阻止网桥接口之间的任何流量呢?
您可以通过将所有网桥的端口设置为隔离来做到这一点,除了一个:未隔离的一个未隔离,因此隔离端口仍然可以与之通信。这是一个类似于Private VLAN aka port isolation的概念,其中非隔离端口将被称为uplink。
从人桥:
这个非隔离端口不能是网桥的自隐式端口(至少我可以从测试中弄清楚)。因此,您不能直接在网桥上放置一个 IP。相反,您将网桥留空并添加一个新的veth对:一个作为网桥端口,另一个作为 IP。这将是“上行链路”。
假设您已经奴役了接口veth0 veth1和veth2,将其他命名空间链接到br0。在它们成为桥接端口之后,您必须这样做:
现在这些端口之间无法通信,只能使用非隔离端口。
添加上行链路接口(两端保持在同一个当前命名空间中的veth )并配置它: