Open vSwitch 应用实践
实验环境
- 虚拟机软件(vmware workstation)
- 装有 mininet、python2、Floodlight 的 Ubuntu20.04
实验目的
- 能够对 Open vSwitch 进行基本操作;
- 能够运用交换机支持的OpenFlow命令对流表进行操作;
- 能够使用 Floodlight 控制 OVS 交换机
实验内容
- 基础技能
- 创建一个不连接到任何控制器的 OVS 交换机,创建 OVS 交换机的端口 p0,设置端口 p0 的 OpenFlow 端口编号,设置端口类型为“internal”。为了避免网络接口上的地址和本机已有网络地址冲突,我们需要创建一个虚拟网络空间 ns0,把 p0 端口移入网络空间 ns0,并配置 IP 地址。按照上述步骤再创建虚拟网络空间 ns1 和端口 p1。
- 使用 ovs-ofctl 创建并测试OpenFlow命令
- 进阶技能
- 通过创建拓扑,连接 floodlight 控制器,通过控制器的图像化界面,编辑交换机流表规则来控制数据转发。
实验步骤
-
交换机创建和端口 p0 的配置
创建一个新的 OVS 交换机:sudo ovs-vsctl add-br ovs-switch
创建一端口 p0,设置端口 p0 的 OpenFlow 端口编号为 100
sudo ovs-vsctl add-port ovs-switch p0 -- set Interface p0 ofport_request=100
注:由于Ubuntu并没有 p0 端口,给ovs-switch添加端口 p0会报一个错,这个不影响后续实验
设置网络接口设备的类型为“internal”
注:对于 internal 类型的的网络接口,OVS 会同时在 Linux 系统中创建一个可以用来收发数据的模拟网络设备。可以为这个网络设备配置 IP 地址、进行数据监听等等。sudo ovs-vsctl set Interface p0 type=internal
查看结果
sudo ethtool -i p0
-
虚拟网络空间的配置
为了避免网络接口上的地址和本机已有网络地址冲突,我们可以创建一个虚拟网络空间 ns0,把 p0 接口移入网络空间 ns0,并配置 IP 地址为 192.168.1.100sudo ip netns add ns0 sudo ip link set p0 netns ns0 sudo ip netns exec ns0 ip addr add 192.168.1.100/24 dev p0 sudo ip netns exec ns0 ifconfig p0 promisc up
使用同样的方式创建端口p1
端口 ip地址 网络名称空间 OpenFlow Port Number p0 192.168.1.100/24 ns0 100 p1 192.168.1.101/24 ns1 101 -
查看 OVS 交换机
通过sudo ovs-vsctl show
命令查看 OVS 交换机的信息
-
使用 ovs-ofctl 创建并测试 OpenFlow 命令
-
查看交换机中的所有 Table:
sudo ovs-ofctl dump-tables ovs-switch
-
查看交换机中的所有流表项:
sudo ovs-ofctl dump-flows ovs-switch
-
查看交换机上的端口信息:
sudo ovs-ofctl show ovs-switch
-
两个端口相互测试:
sudo ip netns exec ns0 ping 192.168.1.101
-
-
进阶技能
-
在虚拟机环境下,打开终端运行 Floodlight
-
创建 1 个交换机连接 4 台主机的拓扑,并连接控制器
-
打开 floodlight 图像化界面并查看网页中的 topo
-
在 mininet 中执行 pingall 命令,在网页中查看交换机 s1 的流表
不懂为什么这边看不到流表😢😢😢 -
在网页中给交换机中添加一条流表项,使得 h1 不能访问其他所有主机
- 删除之前添加的流表项,在 mininet 中进行 pingall 测试
-