我编写了以下代码来创建两个名称空间ns1和ns2,并使用bridge(br),tap0和tap1在它们之间建立连接。但最后以" ping"我有无法访问的网络。你能指导一下我的问题吗?
ip netns add ns1
ip netns add ns2
ip link add name br type bridge
ip tuntap add dev tap0 mode tap
ip tuntap add dev tap1 mode tap
ip link set dev tap0 master br
ip link set tap0 up
ip link set dev tap1 master br
ip link set tap1 up
ip link set tap0 netns ns1
ip link set tap1 netns ns2
ip netns exec ns1 ip addr add 10.0.0.1/24 dev tap0
ip netns exec ns2 ip addr add 10.0.0.2/24 dev tap1
ip netns exec ns1 ip link set dev tap0 up
ip netns exec ns2 ip link set dev tap1 up
ip netns exec ns1 ip link set dev lo up
ip netns exec ns2 ip link set dev lo up
ip link set br up
ip netns exec ns1 ping 10.0.0.2
答案 0 :(得分:1)
如果要在脚本中定期检查桥的状态,问题可能会变得更加明显。在设置其中一个点击设备的命名空间之前,它看起来像这样:
@ApiOperation(response = TempClass.class)
在# ip netns exec ip link show tap0
10: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br state DOWN mode DEFAULT qlen 500
link/ether b2:e6:85:8a:43:61 brd ff:ff:ff:ff:ff:ff
操作之后,它看起来像这样:
setns
请注意,您不再在此输出中看到10: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500
link/ether b2:e6:85:8a:43:61 brd ff:ff:ff:ff:ff:ff
;当你
将接口移出已删除的全局命名空间
桥(因为它不再可见)。
通常,要将命名空间连接到主机上的网桥,您需要
使用master br
设备,而不是veth
设备。 tap
设备是一个
连接的一对接口(想象它像虚拟跳线)。
你将这一对的一侧添加到你的桥上,另一端去
进入网络命名空间。像这样:
veth
以上之后:
ip netns add ns1
ip netns add ns2
ip link add name br0 type bridge
for ns in ns1 ns2; do
# create a veth pair named $ns-inside and $ns-outside
# (e.g., ns1-inside and ns1-outside)
ip link add $ns-inside type veth peer name $ns-outside
# add the -outside half of the veth pair to the bridge
ip link set dev $ns-outside master br0
ip link set $ns-outside up
# add the -inside half to the network namespace
ip link set $ns-inside netns $ns
done
ip netns exec ns1 ip addr add 10.0.0.1/24 dev ns1-inside
ip netns exec ns2 ip addr add 10.0.0.2/24 dev ns2-inside
ip netns exec ns1 ip link set dev ns1-inside up
ip netns exec ns2 ip link set dev ns2-inside up
ip link set br0 up