网络名称空间 实例研究 veth处于不同网络的路由问题

 

 

 

相关命令详细介绍参见

http://www.cnblogs.com/Dream-Chaser/p/7077105.html

 

  

0、问题:
两个网络名称空间中的两个接口veth0和veth1,如何配置netns0和netns1中的路由使得两者可以联通?即在netns0中 ping 10.0.1.2 正常。
 
1、答案:
在netns0中
$ ip netns exec netns0 ip route add 10.0.1.0/24 dev veth0    #command (1)
 
在netns1中
$ ip netns exec netns1 ip route add 10.0.2.0/24 dev veth1    #command (2)
 
2、原理介绍:
网络名称空间就是提供一个独立的网络环境,不同的网络名称空间就相当于不同的主机间的关系。
通常一个主机中,可以包含多个网络名称空间;而一个网络名称空间中,可以包含多个网络接口。
如上图所示是一台主机的两个网络名称空间。其中veth0和veth1是veth对,相当于通过网线将两个不同主机的网络环境进行连接。
我们知道,使用ifconfig 命令配置 某个网络接口的ip地址和子网掩码后,linux系统会生成一个默认的路由
,该路由会将该网络接口的ip和netmask组成的网络地址作为路由的目的网络。目的地址满足该默认路由规则的ip数据包,
会从该接口发送出去,并且该数据包的源ip地址为该网络接口。
然而veth0与veth1并不在同一个网段内,所以当在netns0环境中执行ping
10.0.1.2命令时,
发送出去的数据包不满足linux为veth0默认生成的路由规则,该数据包不会从veth0发送出去。
于是,这里自定义了路由规则,command(1)。10.0.1.2满足该路由规则,所以可以通过veth0发送。
同样需要对netns1中的veth1接口,定义路由规则,这样netns1中才能够将响应数据包发送回netns0.

 

posted on 2017-06-25 20:11  qwerhq  阅读(273)  评论(0)    收藏  举报

导航