玩转Linux网络namespace-单机自环测试与策略路由


上周有厂商到公司测试,拿了一块据说很猛的网络处理加速PCIe板卡,拎在手里沉甸甸的很有分量,最让人意淫的是那4个万兆光口,于是我迫不及待的想要一览光口转发时那种看不见的震撼。
1.使用netns可以充分利用闲置的处理器资源,特别是你的多块网卡性能压不满CPU的时候;
一个net namespace有自己独立的路由表,iptables策略,设备管理机构,和其它的netns完全隔离,比如你将eth0加入了netns1,那么netns2中的应用程序就看不到eth0,网卡设备管理只是netns中的一个元素,还有很多,比如你在netns1中配置的iptables策略对netns2中的数据包没有任何影响。总之,如果你懂Linux内核源码,那么只要附着有net结构体字段的那些结构,比如skb,net_device,都和netns有关。
PC1/eth0----PC2/eth1(forward)PC2/eth2----PC3/eth3
1.添加两个netns
上述配置之后,从eth0发出的包会通过网线到达eth1(而不是走local路由表的loopback),然后经过eth1的forward从eth2发出。经由网线到达目的地eth3杯接收。整个过程中就一台机器,展示出的效果好像三台机器的样子。有了这个机制,是不是再也不用为搭建测试环境而发愁了呢?
ip link add veth1 type veth peer name veth2


veth1----veth2(bridge)eth0----gw(1,2)
ip link set veth1 netns netns1
这就完了?是的,完事了。事实上,保留br0的默认netns即可,没有必要创建netns2了。接下来需要做的就是启动P1和P2了:
ip netns exec netns1 P1

不管怎样,当你玩弄netns的时候,你要知道你并不是在玩弄冷酷无情的虚拟化操作系统,也不是真的模拟了两台物理上相互隔离的机器,因为虽然两个程序的网络是隔离的,但是文件系统却是共享的。你要时刻准备着,使用网络隔离和使用内存,文件系统共享相结合。将一台机器既可以作为多台机器使用,又可以作为一台机器共享资源!

不管怎样,当你玩弄netns的时候,你要知道你并不是在玩弄冷酷无情的虚拟化操作系统,也不是真的模拟了两台物理上相互隔离的机器,因为虽然两个程序的网络是隔离的,但是文件系统却是共享的。你要时刻准备着,使用网络隔离和使用内存,文件系统共享相结合。将一台机器既可以作为多台机器使用,又可以作为一台机器共享资源!
ip link add v1 type veth peer name vp1

相关内容