OpenVSwitch
任务:
1.源码安装ovs
2.写基本的openflow条目控制网络包转发方向
3.minine环境下设计应用ovs
OpenVSwitch安装
Linux内核支持到4.1.25。
之前安装的是4.6.4
所以用系统原本的3.10.0
天才第一步:先好好看源码包里的README
下载源码
|
|
!!注意!!下载前一定要了解自己内核支持的版本,这个在readme里都有写,切勿一味追求latest version
比如
ovs版本|系统内核
2.0.x | 2.6.32 to 3.10
解压
tar zxvf openvswitch-2.0.1.tar.gz
前期准备
1.确保OVS正确运行的环境依赖,切换至root用户
|
|
要求如下(可以通过xxx –version)查询
gcc版本4.1或更高
pkg-config版本0.22或更高
autoconf版本2.64或更高
automake版本1.10或更高
m4版本1.42或更高
python2.X ,X>4(不建议用python3.0以上的版本)
构建基于Linux内核的交换机
cd openvswitch-2.0.1
./boot.sh
开始用了不匹配的2.5.0,不过这里结果基本一致,是在make时候出错的
make clean
./configure --with-linux=/lib/modules/
uname -r/build
内核版本
编译并安装OVS 2.3.0
|
|
//make没有这么快的
|
|
install要用root权限 su
install 不通过 安装autoconf 和autonmake libtool rpm-build m4
安装并加载构建的内核模块
|
|
使用ovsdb工具初始化配置数据库
|
|
启动配置数据库
|
|
初始化数据库
|
|
启动主进程
|
|
查看OVS进程是否启动
|
|
ovs应用
例子:新建网桥br0并加入端口
|
|
应用场景:
1.常用:如删除网桥br0上挂接的eth0网络接口
|
|
2.新建网桥加入端口
|
|
自定义
对于 internal 类型的的网络接口,OVS 会在 Linux 系统中创建一个可以用来收发数据的模拟网络设备。我们可以为这个网络设备配置 IP 地址、进行数据监听。
|
|
3.创建虚拟网络空间
为了避免网络接口上的地址和本机已有网络地址冲突,创建一个虚拟网络空间 ns1,把 p1 接口移入网络空间 ns1,并配置 IP 地址为 192.168.1.101,另外两个同理
|
|
4.查看 OVS 交换机的信息
|
|
查看 Open vSwitch 中的端口信息,获得交换机对应的 datapath ID (dpid),以及每个端口的 OpenFlow 端口编号,端口名称,当前状态。
5.运行查看
|
|
查看交换机所有table
查看交换机中的所有流表项
|
|
6.屏蔽数据包
(1)屏蔽 STP 协议的广播数据包
|
|
(2)屏蔽所有进入 OVS 的以太网广播数据包
|
|
7.修改数据包
(1)添加新的 OpenFlow 条目,修改从端口 p1 收到的数据包的源地址为 9.181.137.1
|
|
(2)从端口 p1(192.168.1.101)发送测试数据到端口 p3(192.168.1.103)
|
|
(3)再打开一个ssh终端运行tcpdump
在接收端口 p3 监控数据
|
|
8.重定向数据包
添加新的 OpenFlow 条目,重定向所有的 ICMP 数据包到端口 p2
|
|
从端口 p1 (192.168.1.101)发送数据到端口 p3(192.168.1.103)
|
|
在端口 p2 上监控数据,发现数据包已被转发到端口 p2
|
|
取代make的rpm-build
因为前面的make经常出错,我在网上找到了rpm-build的方法。最终没有按照这个方法,但也顺带了解了rpm-build
|
|
|
|
#mininet
安装mininet模拟环境
www.mininet.org
源码安装
|
|
应用场景设置
Stochastic Switching using Open vSwitch in Mininet
随机交换模型(参考github)
1.修改select group type,修改程序
/home/parallels/openvswitch-2.0.1/ofproto/ofproto-dpif-xlate.c中
加入头文件
|
|
添加全局变量
|
|
修改函数(注意要在程序前面加上函数调用
|
|
2.重置更新后的ovs(步骤基本同上
|
|
3.运行ovs
|
|
4.mininet测试拓扑(python脚本
|
|
在Mininet中测试拓扑脚本,生成10主机和10个交换拓扑结构。详细 IP/MAC 地址的拓扑如下
5.设计openflow条目
打开终端
|
|
多路径随机交换思路
测试 multipath stochastic switching
从h0向h9发送数据包
(1)[s0, s2, s3, s6, s7, s9]
(2) [s0, s2, s3, s6, s7, s8, s9]
6.运行 xterm s0
|
|
参考https://github.com/saeenali/openvswitch
总结:
这几个实验当中,个人最喜欢的是第四个tinyhttp和webbench,感觉最实用,第五个ovs感觉很综合有许多概念还是比较模糊,也花了很多时间研究。
在这半个月的学习中,一步一步总结步骤、截图,最重要是学会了资料搜索,获益匪浅!