两种不同namespace之间的通信方式

举报
bella zh 发表于 2019/12/30 19:41:23 2019/12/30
【摘要】 多个netns之间使用bridge通信通过veth pair只能连接两个namespace,若多个namespace需要互通,则需要bridge。创建veth pair[root@HS ~]# ip link add tap1 type veth peer name tap1_peer[root@HS ~]# ip link add tap2 type veth peer name tap...

 多个netns之间使用bridge通信

通过veth pair只能连接两个namespace,若多个namespace需要互通,则需要bridge

image.png

创建veth pair

[root@HS ~]# ip link add tap1 type veth peer name tap1_peer
[root@HS ~]# ip link add tap2 type veth peer name tap2_peer
[root@HS ~]# ip link add tap3 type veth peer name tap3_peer
[root@HS ~]# ip link add tap4 type veth peer name tap4_peer

创建命名空间

[root@HS ~]# ip netns add ns1
[root@HS ~]# ip netns add ns2
[root@HS ~]# ip netns add ns3
[root@HS ~]# ip netns add ns4

tap口移到相应的命名空间

[root@HS ~]# ip link set tap1 netns ns1
[root@HS ~]# ip link set tap2 netns ns2
[root@HS ~]# ip link set tap3 netns ns3
[root@HS ~]# ip link set tap4 netns ns4

创建bridge

[root@HS ~]# brctl addbr br1

tap设备添加到bridge

[root@HS ~]# brctl addif br1 tap1_peer
[root@HS ~]# brctl addif br1 tap2_peer
[root@HS ~]# brctl addif br1 tap3_peer
[root@HS ~]# brctl addif br1 tap4_peer

配置tap口的ip地址

[root@HS ~]# ip netns exec ns1 ip addr add local 10.10.10.10/24 dev tap1
[root@HS ~]# ip netns exec ns2 ip addr add local 10.10.10.11/24 dev tap2
[root@HS ~]# ip netns exec ns3 ip addr add local 10.10.10.12/24 dev tap3
[root@HS ~]# ip netns exec ns4 ip addr add local 10.10.10.13/24 dev tap4

启动bridgetap

[root@HS ~]# ip link set br1 up
[root@HS ~]# ip link set tap1_peer up
[root@HS ~]# ip link set tap2_peer up
[root@HS ~]# ip link set tap3_peer up
[root@HS ~]# ip link set tap4_peer up
[root@HS ~]# ip netns exec ns1 ifconfig tap1 up
[root@HS ~]# ip netns exec ns2 ifconfig tap2 up
[root@HS ~]# ip netns exec ns3 ifconfig tap3 up
[root@HS ~]# ip netns exec ns4 ifconfig tap4 up

不同的命名空间tap口互ping

[root@HS ~]# ip netns exec ns1 ping 10.10.10.11
PING 10.10.10.11 (10.10.10.11) 56(84) bytes of data.
64 bytes from 10.10.10.11: icmp_seq=1 ttl=64 time=0.122 ms
64 bytes from 10.10.10.11: icmp_seq=2 ttl=64 time=0.079 ms
--- 10.10.10.11 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.079/0.100/0.122/0.023 ms
 
[root@HS ~]# ip netns exec ns1 ping 10.10.10.12
PING 10.10.10.12 (10.10.10.12) 56(84) bytes of data.
64 bytes from 10.10.10.12: icmp_seq=1 ttl=64 time=0.118 ms
64 bytes from 10.10.10.12: icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from 10.10.10.12: icmp_seq=3 ttl=64 time=0.073 ms
--- 10.10.10.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.070/0.087/0.118/0.021 ms
 
[root@HS ~]# ip netns exec ns1 ping 10.10.10.13
PING 10.10.10.13 (10.10.10.13) 56(84) bytes of data.
64 bytes from 10.10.10.13: icmp_seq=1 ttl=64 time=0.126 ms
64 bytes from 10.10.10.13: icmp_seq=2 ttl=64 time=0.082 ms
64 bytes from 10.10.10.13: icmp_seq=3 ttl=64 time=0.074 ms
--- 10.10.10.13 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.074/0.094/0.126/0.022 ms

配置不同网段namespace通过router通信

Linux开启路由转发功能后,自己可以作为一个路由器,不同网段的流量,可以通过路由器来做三层转发。

/proc/sys/net/ipv4/ip_forward1,则开启了路由转发功能。

image.png

如上图所示,router即为本机器开启了路由转发功能。

创建命名空间

[root@HS ~]# ip netns add ns1
[root@HS ~]# ip netns add ns2

创建veth peer

[root@HS~]# ip link add tap1 type veth peer name tap1_peer
[root@HS ~]# ip link add tap2 type veth peer name tap2_peer

tap口移到相应的命名空间

[root@HS ~]# ip link set tap1 netns ns1
[root@HS ~]# ip link set tap2 netns ns2

tap口配置ip地址

[root@HS ~]# ip netns exec ns1 ip addr add local 10.10.10.10/24 dev tap1
[root@HS~]# ip netns exec ns2 ip addr add local 10.10.20.10/24 dev tap2

tap peer上配置网关

[root@HS ~]# ip addr add local 10.10.10.1/24 dev tap1_peer
[root@HS ~]# ip addr add local 10.10.20.1/24 dev tap2_peer

配置静态路由

[root@HS ~]# ip netns exec ns1 route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.10.1
[root@HS ~]# ip netns exec ns2 route add -net 10.10.10.0 netmask 255.255.255.0 gw 10.10.20.1

不同网段互ping

[root@HS ~]# ip netns exec ns1 ping 10.10.20.10
PING 10.10.20.10 (10.10.20.10) 56(84) bytes of data.
64 bytes from 10.10.20.10: icmp_seq=1 ttl=63 time=0.106 ms
64 bytes from 10.10.20.10: icmp_seq=2 ttl=63 time=0.087 ms

netns常用命令

添加命名空间
ip netns add ns_test
显示所有命名空间
ip netns list
进入虚拟网络环境
ip netns exec ns_test `command`


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。