相关命令详细介绍参见
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.