![通过 Linux Bridge 进行命名空间间通信](https://linux22.com/image/717126/%E9%80%9A%E8%BF%87%20Linux%20Bridge%20%E8%BF%9B%E8%A1%8C%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E9%97%B4%E9%80%9A%E4%BF%A1.png)
因此,我有以下场景:我有一台具有 1 个物理网络接口的服务器。在此服务器上,我想创建 2 个网络命名空间(NS_NASty
和NS_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 可能会有效。