[关闭]
@RunZhi 2016-09-13T16:14:39.000000Z 字数 2369 阅读 1212

Ovswitch简单使用小例

操作系统实验报告

实验目的

1.在centos虚拟机中安装ovs,最好源码安装

2.会写基本的openflow条目以控制网络包的转发方向

3.基于OVS,想出一个应用场景,并且在其中设计应用程序和相应的openflow条目以实现

实验过程

编译安装ovs

(参考网站:CentOS7 安装 Openvswitch)
下载源码后,解压.

从spec文件中删除openvswitch-kmod的依赖包,并创建一个新的spec文件
在openvswitch文件夹所在目录输入:

  1. rpmbuild -bb --without check ~/openvswitch-2.5.0/rhel/openvswitch_no_kmod.spec

然后把下载的tar.gz包放到用户目录下的rpmbuild/SOURCES文件夹中,然后继续终端输入

  1. rpmbuild -bb --without check ./openvswitch-2.5.0/rhel/openvswitch_no_kmod.spec

过了几分钟后编译完成.

再安装编译后的rpm文件:

  1. sudo yum localinstall /home/runzhizeng/rpmbuild/RPMS/x86_64/openvswitch-2.5.0-1.x86_64.rpm

(注意, /home/runzhizeng/是用户目录,需要具体替换)

然后启动服务,并查看服务器状态

  1. systemctl start openvswitch.service
  2. systemctl -l status openvswitch.service

会有如下显示信息,至此安装完成.
实验截图1

实践操作 OpenFlow 命令

(以下实验内容参考于基于Open vSwitch的openFlow实践.)

环境搭建

首先,启动ovsdb,依次输入如下命令:

  1. ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
  2. --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
  3. --private-key=db:Open_vSwitch,SSL,private_key \
  4. --certificate=db:Open_vSwitch,SSL,certificate \
  5. --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
  6. --pidfile --detach
  7. ovs-vsctl --no-wait init
  8. ovs-vswitchd --pidfile --detach

然后创建一个交换机,名字是ovs

  1. ovs-vsctl add-br ovs

创建一个端口p0,设置端口p0的OpenFlow,端口编号为100,类型为internal

  1. ovs-vsctl add-port ovs p0 -- set Interface p0 type=internal ofport_request=100

为了避免网络接口上的地址和本机已有网络地址冲突,创建一个虚拟网络空间 ns0,把p0接口移入网络空间ns0,并配置 IP 地址为 192.168.1.100

  1. ip netns add ns0
  2. ip link set p0 netns ns0
  3. ip netns exec ns0 ip addr add 192.168.1.100/24 dev p0
  4. ip netns exec ns0 ifconfig p0 promisc up

使用同样的方法创建端口p1,p2.输入如下命令

  1. ovs-vsctl show

会显示
实验截图2

数据包修改

添加新的 OpenFlow 条目,修改从端口 p0 收到的数据包的源地址为 9.181.137.1

  1. ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,\
  2. in_port=100,actions=mod_nw_src:9.181.137.1,normal"

然后通过ns0网络向p1端口ping数据

  1. ip netns exec ns0 ping 192.168.1.101

打开另外一个终端,输入如下命令使用tcpdump从p1抓取icmp数据

  1. ip netns exec ns1 tcpdump -i p1 icmp

此处终端会有如下显示:
实验截图3

控制数据包发送方向

添加新的 OpenFlow 条目,重定向所有的 ICMP 数据包到端口 p2.

  1. ovs-ofctl add-flow ovs idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:102

从端口p0发送数据到p1

  1. ip netns exec ns0 ping 192.168.1.101

用tcpdump监听端口2的ICMP数据包

  1. ip netns exec ns2 tcpdump -i p2 icmp

会有如下显示:
实验截图4

一个简单的应用场景:中间人攻击(未实现)

中间人攻击即指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容

假设攻击者A想要对B进行中间人攻击,而B和网络服务商C进行通信。

首先,要实现中间人攻击,首先就需要使用arp欺骗,在linux下,arp欺骗可以通过dsniff实现。

A对B完成ARP欺骗后,一个很重要的问题是:如何让B无法察觉自己已被欺骗?这时候,可以通过ovswitch进行数据包的转发实现B与服务商C的通信。

如此以来,A就做了B和C的中间人。此时就可以进行下一步的攻击,比如通过伪造证书窃取网页密码等。

但由于实验者暂时还无法做到通过ovswitch进行数据包的转发(遇到了各种奇怪的问题,比如数据转发失败,或是突然内核错误等等。。。。)。因此本应用场景未能实现。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注