前言我们使用LinuxBridge完成了多个网络设备的通信,但是对网络隔离的支持不是很好。很长一段时间,Linux平台上缺少一个功能完备的虚拟交换机,直到OVS的出现。实验接下来我们尝试完成两个实验,单机非隔离网络和单机隔离网络。实验一:单机非隔离网络使用ovs搭建非隔离网络非常简单。你只需要添加一个网桥,然后在这个网桥上添加几个内部端口,最后将端口移动到netns。#添加网桥ovs-vsctladd-brbr-int#添加三个内部端口ovs-vsctladd-portbr-intvnet0--setInterfacevnet0type=internalovs-vsctladd-portbr-intvnet1--setInterfacevnet1type=internalovs-vsctladd-portbr-intvnet2--setInterfacevnet2type=internal#添加三个netnsipnetnsaddns0ipnetnsaddns1ipnetnsaddns2#将内部端口分别移动到netnsiplinksetvnet0netnsns0iplinksetvnet1netnsns1iplinksetvnet2netnsns2#启动端口并配置IPipnetnsexecns0iplinksetloupipnetnsexecns0iplinksetvnet0upipnetnsexecns0ipaddradd10.0.0.1/24devvnet0ipnetnsexecns1iplinksetloupipnetnsexecns1iplinksetvnet1upipnetnsexecns1ipaddradd10.0.0.2/24devvnet1ipnetnsexecns2iplinksetloupipnetnsexecns2iplinksetvnet2upipnetnsexecns2ipaddradd10.0.0.24devvnet2test测试ns0和ns1是否可以通信ipnetnsexecns0ping10.0.0.2PING10.0.0.2(10.0.0.2)56(84)bytesofdata.64bytesfrom10.0.0.2:icmp_seq=1ttl=64time=1.05ms64字节来自10.0.0.2:icmp_seq=2ttl=64time=0.059ms64bytesfrom10.0.0.2:icmp_seq=3ttl=64time=0.056ms64bytesfrom10.0.0.2:icmp_seq=4ttl=64time=0.053ms^C---10.0.0.2ping统计---4包发送,4包接收,0%包丢失,时间3000msrttmin/avg/max/mdev=0.053/0.304/1.051/0.431ms测试ns0和ns2是否可以通信ipnetnsexecns0ping10.0.0.3PING10.0.0.3(10.0.0.3)56(84)字节数据。来自10.0.0.3的64字节:icmp_seq=1ttl=64time=1.17ms64来自10.0.0.3的字节:icmp_seq=2ttl=64time=0.067ms64来自10.0.0.3的字节:icmp_seq=3ttl=64time=0.058ms来自10.0.0.3的64个字节:icmp_seq=4ttl=64time=0.064ms^C---10.0.0.3ping统计数据---4个数据包已传输,4received,0%packetloss,time3001msrttmin/avg/max/mdev=0.058/0.341/1.177/0.482ms根据测试结果可以看出三台设备都可以互访,所以我们搭建成功awirelessIsolatedLayer2InterworkingNetwork实验二:StandaloneIsolatedNetwork使用ovs搭建隔离网络也很简单。只需为相应端口设置VLAN标签即可实现网络隔离。#设置vnet0的VLAN标签为100ovs-vsctlsetPortvnet0tag=100#设置vnet1和vnet2的VLAN标签为200ovs-vsctlsetPortvnet1tag=200ovs-vsctlsetPortvnet2tag=200使用ovs-vsctlshow命令查看VLANtag是否配置成功?90139c71-8d11-49b2-b44c-f34174259dc8Bridgebr-int端口“vnet0”标签:100接口“vnet0”类型:内部端口br-int接口br-int类型:内部端口“vnet2”标签:200接口“vnet2”类型:internalPort"vnet1"tag:200Interface"vnet1"type:internalovs_version:"2.9.0"测试ns0和ns1是否可以通信ipnetnsexecns0ping10.0.0.2PING10.0.0.2(10.0.0.2)56(84))bytesofdata.^C---10.0.0.2pingstatistics---2packetstransmitted,0received,100%packetloss,time1000ms测试ns0和ns2是否可以通信ipnetnsexecns0ping10.0.0.3PING10.0.0.3(10.0.0.3)56(84)字节数据。^C---10.0.0.3ping统计---2数据包t已发送,0收到,100%丢包,时间999ms测试ns1与ns2的能否通信ipnetnsexecns1ping10.0.0.3PING10.0.0.3(10.0.0.3)56(84)字节数据。64字节从10.0.0.3:icmp_seq=1ttl=64时间=0.930ms64字节来自10.0.0.3:icmp_seq=2ttl=64时间=0.057ms64字节来自10.0.0.3:icmp_seq=3ttl=64时间=0.056ms64字节来自10.0.0.3:icmp_seq=4ttl=64time=0.057ms^C---10.0.0.3ping统计---4包发送,4包接收,0%丢包,时间3000msrttmin/avg/max/mdev=0.056/0.275/0.930/0.378ms测试ns2与ns1的能取消通信ipnetnsexecns2ping10.0.0.2PING10.0.0.2(10.0.0.2)56(84)字节的数据。64字节来自10.0.0.2:icmp_seq=1ttl=64时间=0.088ms64来自10.0.0.2的字节:icmp_seq=2ttl=64time=0.057ms64来自10.0.0.2的字节:icmp_seq=3ttl=64time=0.050ms64来自10.0.0.2的字节:icmp_seq=4ttl=64time=0.060ms^C---10.0.0.2ping统计---4个数据包传输,4个接收,0%丢包,时间2999msrttmin/avg/max/mdev=0.050/0.063/0.088/0。017ms根据测试结果可以看出,ns0不能访问ns1和ns2,ns1和ns2可以互相访问。这是因为vnet0端口的数据包发出后,OVS修改了包头,增加了VLAN100标签,与vnet1不同,如果vnet2的VLAN200标签不匹配,OVS交换机将不再将vnet0的数据包发送到另外两个端口,实现网络隔离。清理实验环境ovs-vsctldel-brbr-intipnetnsdelns0ipnetnsdelns1ipnetnsdelns2
