设为首页 收藏本站
查看: 1400|回复: 0

[经验分享] mininet and ovs 总结

[复制链接]

尚未签到

发表于 2017-6-25 07:03:13 | 显示全部楼层 |阅读模式
  ryu控制器安装在arch linux的什么目录?
  /usr/lib/python3.6/site-packages/ryu/
  1、如何显示mininetCLI的帮助命令?



mininet> help
  2、如何显示mininet的结点?



mininet> nodes
  3、如何显示mininet的连接?



mininet> net
mininet>links
  4、如何在某一个虚拟中段中建立一个简单的HTTP服务器,并且从另外一个终端中对它进行访问?



mininet> h1 python -m SimpleHTTPServer 80 &
mininet> h2 wget -O -h1
...
mininet> h1 kill %python
  4、如何运行一个递归的测试?



sudo mn --test pingpair (测试)
sudo mn --test iperf (测试带宽)
  5、如何梗概网络的拓扑和类型?



sudo mn --test pingall --topo single,3
sudo mn --test pingall --topo linear,4
  6、如何设置连接的属性,包括贷款和延迟?



sudo mn --link tc,bw=10,delay=10ms
  7、如何设置调试模式?



sudo mn -v debug
  8、如何自定义一个拓扑,请附上相关的python文件写法?
  应用的语句如下:



sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall
  相应的脚本如下:
  topo-2sw-2host.py:



"""Custom topology example
Two directly connected switches plus a host for each switch:
host --- switch --- switch --- host
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""
from mininet.topo import Topo
class MyTopo( Topo ):
"Simple topology example."
def __init__( self ):
"Create custom topo."
# Initialize topology
Topo.__init__( self )
# Add hosts and switches
leftHost = self.addHost( 'h1' )
rightHost = self.addHost( 'h2' )
leftSwitch = self.addSwitch( 's3' )
rightSwitch = self.addSwitch( 's4' )
# Add links
self.addLink( leftHost, leftSwitch )
self.addLink( leftSwitch, rightSwitch )
self.addLink( rightSwitch, rightHost )

topos = { 'mytopo': ( lambda: MyTopo() ) }
  9、如何改变相应的mac地址?



sudo mn --mac
  10、如何直接打开终端?



sudo mn -x
  11、如何使用dpctl来查看某个交换机的流表?(这个还没尝试出来)



dpctl dump-flows的格式如下:
[-m | --more] dump-flows [dp] [filter=filter]
mininet?
  12、如何使用其他类型的交换机?



sudo mn --switch ovsk --test iperf
  13、如何设置所有东西都有它各自的命名空间?



sudo mn --innamespace --switch user
  14、如何设置链接的属性?比如说打开和关闭。



mininet> link s1 h1 down
mininet> link s1 h1 up
  15、如何显示某个网络内的主机?



mininet> xterm h1 h2
  16、如何设置远程的控制器?



$ sudo mn --controller=remote,ip=[controller IP],port=[controller listening port]
sudo mn --controller=remote,ip=192.168.1.150,port=6633
  17、如何使用其他的OpenFlow协议?



--switch ovsk,protocols=OpenFlow13

  参考网页:
  http://fishcried.com/2016-02-09/openvswitch-ops-guide/
  要想很好理解OVS的操作,必须要理解基本的概念:
  Packet
  网络转发的最小数据单元,每个包都来自某个端口,最终会被发往一个或多个目标端口,转发数据包的过程就是网络的唯一功能。
  Bridge
  OpenvSwitch中的网桥对应物理交换机,其功能是根据一定流规则,把从端口收到的数据包转发到另一个或多个端口。
  Port
  端口是收发数据包的单元。OpenvSwitch中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去.主要有



类型说明



Normal
用户可以把操作系统中的网卡绑定到ovs上,ovs会生成一个普通端口处理这块网卡进出的数据包。


Internal
端口类型为internal时,ovs会创建一块虚拟网卡,端口收到的所有数据包都会交给该网卡,发出的包会通过该端口交给ovs。当ovs创建一个新网桥时,默认会创建一个与网桥同名的Internal Port.


Patch
当机器中有多个ovs网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。


Tunnel
隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。
  Interface
  接口是ovs与外部交换数据包的组件。一个接口就是操作系统的一块网卡,这块网卡可能是ovs生成的虚拟网卡,也可能是物理网卡挂载在ovs上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在ovs上。
  FlowTable
  流定义了端口之间数据包的交换规则.下面会对FlowTable做了详细的说明.
  OVS命令的结构:
DSC0000.png


ovs-dpctldatapath控制器,可以创建删除DP,控制DP中的FlowTables,最常使用show命令,其他很少手动操作
ovs-ofctl流表控制器,控制bridge上的流表,查看端口统计信息等
ovsdb-tool专门管理ovsdb的client
ovs-vsctl最常用的命令,通过操作ovsdb去管理相关的bridge,ports什么的
ovs-appctl这个可以直接与openvswitch daemon进行交互,上图中没有列出来,这么命令较少使用
  对下面这些命令的一个简要记录:


  • ovs-dpctl show -s
  • ovs-ofctl show, dump-ports, dump-flows, add-flow, mod-flows, del-flows
  • ovsdb-tools show-log -m
  • ovs-vsctl

    • show 显示数据库内容
    • 关于桥的操作 add-br, list-br, del-br, br-exists.
    • 关于port的操作 list-ports, add-port, del-port, add-bond, port-to-br.
    • 关于interface的操作 list-ifaces, iface-to-br
    • ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value], 常见的表有bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow.


  • ovs-appctl list-commands, fdb/show, qos/show
  1、如何显示bridge,显示它与Port等概念的关系?



# ovs-vsctl show
  2、如何查看有哪些Bridge,哪些ports,哪些interface?



root@l-network-1:~# ovs-vsctl list-br
br-ex
br-int
br-tun
root@l-network-1:~# ovs-vsctl list-ports br-tun
patch-int
vxlan-ac1c0509
vxlan-ac1c050d
vxlan-ac1c051c
vxlan-ac1c053f
root@l-network-1:~# ovs-vsctl list-ifaces br-tun
patch-int
vxlan-ac1c0509
vxlan-ac1c050d
vxlan-ac1c051c
vxlan-ac1c053f
# iface与ports同名.
  3、如何查看哪个port,interface属于哪个bridge?



root@l-network-1:~# ovs-vsctl port-to-br vxlan-ac1c0509
br-tun
root@l-network-1:~# ovs-vsctl iface-to-br vxlan-ac1c0509
br-tun
  4、如何查看某个Bridge的流表,如果不是默认的of协议,那么如何显示?



root@l-network-1:# ovs-ofctl dump-flows br-ex


sudo ovs-ofctl -O Openflow13 dump-flows <switch>
  5、如何显示某个Bridge的流表?



# ovs-ofctl show br-ex
  6、如何显示隐藏流表规则?



# ovs-appctl bridge/dump-flows br-ex
  7、如何查看datapath的统计规则?



# ovs-dpctl show
# ovs-dpctl show -s


## 查看某个端口的统计信息ovs-ofctl dump-ports br [port]
# ovs-ofctl dump-ports br-ex 1
  8、如何查看转发表?



# ovs-appctl fdb/show br-ex
  9、设置sFlow,相关网页:
  http://docs.openvswitch.org/en/latest/howto/sflow/
  http://www.sdnlab.com/3760.html



sudo ovs-vsctl -- --id=@sflow_1 create sflow agent=s4 target=\"10.0.0.2:6343\"  \
header=128 sampling=64 polling=10 -- set bridge s4 sflow=@sflow_1
  10、如何设置qos?
  参考网页:
  http://docs.openvswitch.org/en/latest/howto/qos/
  http://fishcried.com/2016-02-09/openvswitch-ops-guide/



ovs-vsctl set Interface tap0 ingress_policing_rate=100000
ovs-vsctl set Intervace tap ingress_policing_burst=10000
ovs-appctl qos/show <iface>
  11、如何查看流规则的匹配?



watch -d -n 1 "sudo ovs-ofctl dump-flows <bridge>"
  12、如何使用tcpdump抓包?
  13、需要设置端口的镜像。



ip link add name snooper0 type dummy
ip link set dev snooper0 up
ovs-vsctl add-port br-int snooper0
# ovs-vsctl -- set Bridge br-int mirrors=@m  -- --id=@snooper0 \
get Port snooper0  -- --id=@patch-tun get Port patch-tun \
-- --id=@m create Mirror name=mymirror select-dst-port=@patch-tun \
select-src-port=@patch-tun output-port=@snooper0 select_all=1
tcpdump -i snooper0
ovs-vsctl clear Bridge br-int mirrors
ovs-vsctl del-port br-int snooper0
ip link delete dev snooper0
  14、如何查看OVS的日志?



# cat /var/log/openvswitch/*.log
# ovsdb-tool show-log -m
  15、如何发送某个包去测试匹配?



# ovs-appctl ofproto/trace br-ex in_port=10,dl_src=66:4e:cc:ae:4d:20,dl_dst=46:54:8a:95:dd:f8 -generate
Bridge: br-ex
  16、如何添加一个Ethernet port到已经创建的bridge?
  参考:http://docs.openvswitch.org/en/latest/faq/issues/ 之中的问题1
  问题中,有人尝试使用以下命令去添加一个端口到bridge当中,但是一添加,就会失去连接到哪个网卡eth0.



$ ovs-vsctl add-br br0
$ ovs-vsctl add-port br0 eth0
  回答是这样回答的:
  一个将要加入到Open vSwitch bridge的物理网卡设备是不应该有IP地址的。 如果这样的设备是含有地址的,那么这个IP地址是不会被完全工作的。
  所以,要怎么恢复功能呢?通过将OVS的"internal"设备的IP地址设置给原来网络设备的地址。
  比如说这个网络设备是和bridge 是同名的。eth0的IP地址是192.168.128.5, 你可以通过下面的命令来恢复功能。



$ ifconfig eth0 0.0.0.0
$ ifconfig br0 192.168.128.5
  如果连接到运行OVS的机器仅仅是那个有问题的IP地址,那么你想要去运行所有的这些命令在单个命令行当中。
  如果有任何额外的路由分配给eth0,那么你同样需要使用命令来调整这些路由到br0.
  如果你使用DHCP来获得一个IP地址,那么你应该先kill掉监听在这个端口的DHCP client,然后开始监听br0的进程。你可能仍然需要手动的清除IP地址eth0的地址(e.g. with “ifconfig eth0 0.0.0.0”)
  没有一个能让人信服的理由来让觉得OVS是必须这样工作的。然后,这就是Linux 内核 bridge mokuai的工作方式。这是一个模型,这种模型已经适应了Linux bridging过去的做法。
  17、在这个帖子的第二个问题:
  问题是什么就不太用管了,我在这里知道了两个名字,bond接口和dpdk
  bond接口:可以用这种接口来进行提高更高的带宽和更加高的可靠性。使用命令如下:



$ ovs-vsctl add-br br0
$ ovs-vsctl add-bond br0 bond0 eth0 eth1
  dpdk:是一套库,用户快速的数据包处理。
  18、如何打开端口的STP?到我写的时候,OVS的STP并没有仍然很好测试(2017-05-12)



$ ovs-vsctl add-br br0
$ ovs-vsctl set bridge br0 stp_enable=true
$ ovs-vsctl add-port br0 eth0
$ ovs-vsctl add-port br0 eth1
  另外一篇有价值的教程是:http://www.sdnlab.com/sdn-guide/14747.html
  这篇文章组合起来,大概有五个小实验,摘自于:SDN QQ群#兰大-小学生,文章来源他个人SDN技术博客:http://lamoop.com/post/2013-11-18/40060149263
  我看完后,觉得还是直接把它分为五个小如何的方式写出来。
  19、如何使用OVS添加物理网卡,组成虚拟网络?
  基本情况是:在安装open vswitch的主机上有两块网卡,分别为eth0、eth1,把这两块网卡挂接到open vswitch的网桥上,然后有两台物理机host1、host2分别连接到eth0和eth1上,实现这两台物理机的通信。构建结果图如下:
DSC0001.png




#ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
#ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
#ovs-vsctl add-port br0 eth1 //把eth1挂接到br0中
  20、如何把虚拟机添加到我们创建的OVS当中?
  在安装open vswitch的主机上安装两个虚拟机,把两个虚拟机的网卡都挂接在open vswitch的网桥上,实现两台虚拟机的通信,构建结果图如下:
DSC0002.png

  在上面,已经添加了br0了,取决于你使用什么样的虚拟机,然后我们需要将虚拟机,挂载到我们所创建的网桥上
  vbox上,可以直接上network上选择
  kvm可能需要以下的脚本(这里指示列出来,我没有完全尝试,不过和我之前成功尝试的差不多这个样子):两个文件分别是/etc/ovs-ifup, /etc/ovs-ifdown



#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1


#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
  创建虚拟机的命令大概如下:



kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive\
file=/path/to/disk-image,boot=on
kvm -m 512 -net nic,macaddr=11:22:33:44:55:66-net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive\
file=/path/to/disk-image,boot=on
  在启动虚拟机之后,我们需要做的,在装有open vswitch的主机上有一个物理网卡eth0,一台主机通过网线和eth0相连,在open vswitch的主机上还装有一台虚拟机,把此虚拟机和连接到eth0的主机挂接到同一个网桥上,实现两者之间的通信,构建结果图如下:
DSC0003.png

  原文给除的配置就是



# ovs-vsctl add-br br0 //建立一个名为br0的open vswitch网桥
# ovs-vsctl add-port br0 eth0 //把eth0挂接到br0中
# kvm -m 512 -net nic,macaddr=00:11:22:33:44:55-net \
tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive\
file=/path/to/disk-image,boot=on //ovs-ifup和ovs-ifdown和上一节中相同
  其实在执行了前面两步之后,应该就可以直接和里面的VM进行通信了。
  21、如何连接两个已经创建号的网桥?
DSC0004.png




ovs-vsctl add-br br 添加一个名为br0的网桥
ovs-vsctl add-br br1 //添加一个名为br0的网桥

ovs-vsctl add-port br0 patch-to-br1 //为br0添加一个虚拟端口

ovs-vsctl set interface patch-to-br1type=patch //把patch-to-br1的类型设置为patch
ovs-vsctl set interface patch-to-br1 options:peer=patch-to-br0 把对端网桥和此网桥连接的端口名称设置为patch-to-br0
ovs-vsctl add-port br1 patch-to-br0 //为br0添加一个虚拟端口
ovs-vsctl set interface patch-to-br0type=patch //把patch-to-br0的类型设置为patch

ovs-vsctl set interface patch-to-br0options:peer=patch-to-br1 //把对端网桥和此网桥连接的端口名称设置为patch-to-br1

ovs-vsctl set interface patch-to-br0type=patch 和ovs-vsctl set interface patch-to-br0 options:peer=patch-to-br1是对ovs-database的操作,有有兴趣的同学可以参考ovs-vswitchd.conf.db.5
  22、如何实现两个网桥通过网线来进行连接
DSC0005.png

  host1:



#ovs-vsctl add-br br0 //添加名为br0的网桥
#ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
  host2:



#ovs-vsctl add-br br0 //添加名为br0的网桥
#ovs-vsctl add-port br0 eth0 //把eth0挂接到br0上
  然后就可以通过网络进行通信
  23、如何设置端口的镜像流量?
  上面13中,虽然有镜像流量的一条命令,但是还是很不清楚,所以我再详细一点写在这里。
  参考网页:
  http://openvswitch.org/support/dist-docs/ovs-vsctl.8.txt
  http://www.rendoumi.com/chun-shou-dong-she-zhi-open-vswitchde-mirror-port/
  Mirror:一个端口镜像的配置是附在Bridge上的。Records是使用 id 来进行记录了。
  假设有如下的配置场景:有一个 br0 的 Bridge, 在上面有端口 eth0, eth1, eth2.
  把eth0和eth1上面发送和接收的流量都发送到eth2.



# 创建一条镜像规则 (我是依照我自己的理解,命令没错,解释不一定)
ovs-vsctl -- set Bridge br0 mirrors=@m \
-- --id=@eth0 get Port eth0 \   
-- --id=@eth1 get Port eth1 \  
-- --id=@eth2 get Port eth2 \
--    --id=@m    create    Mirror    name=mymirror select-dst-port=@eth0,@eth1 select-src-port=@eth0,@eth1 output-port=@eth2   
# -- 表示一个命令的开头
# 前面有 -- 是开始另外一条命令的开始
# 创建一个名字@eth0,在后面用。
# --id=@m 代表上面的设置开始对那条镜像进行设置
# select-src-port 是选择数据包的来源端口
# select-dst-port 是选择数据包的目标端口
# output-port 是符合上面的流量,就镜像到哪里的目标端口
# 删除一条流量镜像
ovs-vsctl -- --id=@rec get Mirror mymirror \
-- remove Bridge br0 mirrors @rec
# @rec就是这条记录的名字。
# -- remove 后面是要删除的信息。
# 删除所有的镜像
ovs-vsctl clear Bridge br0 mirrors
  24、如何删除某个OVS上的流?



sudo ovs-ofctl del-flows <OVS-name>

  变更记录:

变更说明变更人时间



整理mininet笔记和部分OVS记录
andrew
2016-04-18


整理fishcired的笔记的OVS部分,添加到我自己的OVS部分
andrew
2016-05-12






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387800-1-1.html 上篇帖子: 容器 What, Why, How 下篇帖子: vncviewer鼠标不同步问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表