两种不同namespace之间的通信方式
【摘要】 多个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。
创建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
启动bridge、tap口
[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_forward为1,则开启了路由转发功能。
如上图所示,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)