实验2:Open vSwitch虚拟交换机实践
实验2:Open vSwitch虚拟交换机实践
一、实验目的
- 能够对Open vSwitch进行基本操作;
- 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表;
- 能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open vSwitch交换机
二、实验环境
Ubuntu 20.04 Desktop amd64
三、实验要求
(一)基本要求
1、ovs-vsctl基础操作实践:创建OVS交换机,以ovs-xxxxxxxxx命名,其中xxxxxxxxx为本人学号。在创建的交换机上增加端口p0和p1,设置p0的端口号为100,p1的端口号为101,类型均为internal;为了避免网络接口上的地址和本机已有网络地址冲突,需要创建虚拟网络空间(参考命令netns)ns0和ns1,分别将p0和p1移入,并分别配置p0和p1端口的ip地址为190.168.0.100、192.168.0.101,子网掩码为255.255.255.0;最后测试p0和p1的连通性。
sudo ovs-vsctl add-br ovs-032002534
sudo ovs-vsctl add-port ovs-032002534 p0
sudo ovs-vsctl set Interface p0 ofport_request=100 type=internal
sudo ethtool -i p0
sudo ip netns add ns0
sudo ip link set p0 netns ns0
sudo ip netns exec ns0 ip addr add 192.168.0.100/24 dev p0
sudo ip netns exec ns0 ifconfig p0 promisc up
sudo ovs-vsctl add-port ovs-032002534 p1
sudo ovs-vsctl set Interface p1 ofport_request=101 type=internal
sudo ethtool -i p1
sudo ip netns add ns1
sudo ip link set p1 netns ns1
sudo ip netns exec ns1 ip addr add 192.168.0.101/24 dev p1
sudo ip netns exec ns1 ifconfig p1 promisc up
sudo ip netns exec ns0 ping 192.168.0.101
a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;
执行 sudo ovs-vsctl show
p0和p1连通性测试
b) /home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图
1、使用Mininet搭建的SDN拓扑,如下图所示,要求支持OpenFlow 1.3协议,主机名、交换机名以及端口对应正确。
生成拓扑
执行
sudo mn --custom 032002534.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6653 --switch ovsk,protocols=OpenFlow13
2、通过命令行终端输入“ovs-ofctl”命令,直接在s1和s2上添加流表,划分出所要求的VLAN。
为s1设置wlan
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1
sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2
为s2设置wlan
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:1
sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output:2
s1和s2流表
sudo ovs-ofctl -O OpenFlow13 dump-flows s1
sudo ovs-ofctl -O OpenFlow13 dump-flows s2
测试连通性
- h1 – h3互通
- h2 – h4互通
- 其余主机不通
wireshark捕获s1端口3
(二)进阶要求
输入
sudo python3 topo2.py python
运行并测试联通性
阅读SDNLAB实验使用Mininet,编写Python代码,生成(一)中的SDN拓扑,并在代码中直接使用OVS命令,做到可以直接运行Python程序完成和(一)相同的VLAN划分。
抓包
(四)实验总结
这次实验感觉比上次难,大概是用到了上次实验所学的知识但是我又不能熟练掌握,以至于在生成拓扑的时候出现代码无法运行的错误,最后是通过仔细对照实验要求的拓扑图,对代码进行修改,代码才得以运行。除此以外,在ovs-vsctl show的时候出现了一个叫s1的交换机,紧接着后面一堆error,经查阅资料,可用sudo ovs-vsctl del-br s1
来进行删除。
总的来说这次学到了ovs-vsctl相关基础操作,巩固了利用Mininet搭建SDN拓扑,以及wireshark的基本使用,但是对于前面几个实验所学的知识还是需要不断复习巩固,以免下次实验又磕磕碰碰。