2个名称空间之间的连接

时间:2016-02-14 18:14:10

标签: linux networking linux-kernel kernel lxc

我编写了以下代码来创建两个名称空间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

1 个答案:

答案 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