通过 Linux Bridge 进行命名空间间通信

通过 Linux Bridge 进行命名空间间通信

因此,我有以下场景:我有一台具有 1 个物理网络接口的服务器。在此服务器上,我想创建 2 个网络命名空间(NS_NAStyNS_MongoDB)。这两个命名空间都应该能够通过物理接口(ens192)访问互联网,并且NS_NASty,以及默认命名空间,应该能够访问NS_MongoDB

命名空间配置

接口配置:

默认

ens192: 172.20.7.57/22
veth0: 192.168.1.1/24
veth2: 192.168.2.1/24

NS_MongoDB

veth1: 192.168.1.2/24

NS_NASty

veth3: 192.168.2.2/24

这是我当前使用的配置:

# create namespaces
ip netns add NS_NASty
ip netns add NS_MongoDB

# create virtual adapter pairs
ip link add veth0 type veth peer name veth1
ip link add veth2 type veth peer name veth3

# assign veth peer to namespace
ip link set veth3 netns NS_NASty
ip link set veth1 netns NS_MongoDB

# activate veth peers
ip netns exec NS_NASty ip link set veth3 up
ip netns exec NS_MongoDB ip link set veth1 up

# assign IPs to veth peers
ip netns exec NS_NASty ip addr add 192.168.2.2/24 dev veth3
ip netns exec NS_MongoDB ip addr add 192.168.1.2/24 dev veth1

# add veth IPs in default namespace
ip addr add 192.168.1.1/24 dev veth0
ip addr add 192.168.2.1/24 dev veth2

# create ethernet bridge
brctl addbr vbr0
brctl stp vbr0 off
brctl addif vbr0 veth0
brctl addif vbr0 veth2

# activate veth in default namespace
ip link set dev vbr0 up
ip link set veth0 up
ip link set veth2 up

# add default routes
ip netns exec NS_NASty ip route add default via 192.168.2.1
ip netns exec NS_MongoDB ip route add default via 192.168.1.1

我无法访问ping任何地址,除了命名空间的相应网关之外。

答案1

我认为您使用的是 IP 地址 192.168.2.1 和 192.168.1.1,子网掩码为 24。为了使网络空间相互通信,它们需要位于同一网络块中。因此,将子网掩码更改为 16 或将 IP 地址更改为 192.168.2.1 和 192.168.2.2 可能会有效。

相关内容