首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个命名空间之间的连接

两个命名空间之间的连接
EN

Stack Overflow用户
提问于 2016-02-14 18:14:10
回答 1查看 2.8K关注 0票数 1

我编写了以下代码来创建两个名称空间ns1和ns2,并使用桥(Br)、tap0和tap1在它们之间建立连接。但是,在"ping“结束时,我有了无法到达的网络。你能指点我吗?有什么问题吗?

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-15 13:59:52

如果您在脚本中定期检查桥的状态,问题可能会变得更加明显。在设置其中一个抽头设备的命名空间之前,如下所示:

代码语言:javascript
运行
复制
# 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操作之后,如下所示:

代码语言:javascript
运行
复制
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设备是一对连接的接口(把它想象成一个虚拟的补丁电缆)。将一对的一端添加到桥接器中,另一端则进入网络命名空间。就像这样:

代码语言:javascript
运行
复制
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

在上述情况之后:

代码语言:javascript
运行
复制
# ip netns exec ns1 ping -c2 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.044 ms

--- 10.0.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.034/0.039/0.044/0.005 ms
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35395309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档