Openflow-VSwitch使用详述.docx_第1页
Openflow-VSwitch使用详述.docx_第2页
Openflow-VSwitch使用详述.docx_第3页
Openflow-VSwitch使用详述.docx_第4页
Openflow-VSwitch使用详述.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OpenvSwitch用例2分类:OpenStack2014-03-03 17:18936人阅读评论(0)收藏举报1 ovs-vsctl使用:添加名为br0的网桥ovs-vsctladd-br br0删除名为br0的网桥ovs-vsctldel-br br0列出所有网桥ovs-vsctllist-br判断网桥br0是否存在ovs-vsctlbr-exists br0列出挂接到网桥br0上的所有网络接口ovs-vsctllist-ports br0将网络接口eth0挂接到网桥br0上ovs-vsctladd-port br0 eth0删除网桥br0上挂接的eth0网络接口ovs-vsctldel-port br0 eth0列出已挂接eth0网络接口的网桥ovs-vsctlport-to-br eth02 流规则:每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分:基本字段包括生效时间duration_sec、所属表项table_id、优先级priority、处理的数据包数n_packets,空闲超时时间idle_timeout等,空闲超时时间idle_timeout以秒为单位,超过设置的空闲超时时间后该流规则将被自动删除,空闲超时时间设置为0表示该流规则永不过期,idle_timeout将不包含于ovs-ofctl dump-flows brname的输出中。条件字段包括输入端口号in_port、源目的mac地址dl_src/dl_dst、源目的ip地址nw_src/nw_dst、数据包类型dl_type、网络层协议类型nw_proto等,可以为这些字段的任意组合,但在网络分层结构中底层的字段未给出确定值时上层的字段不允许给确定值,即一条流规则中允许底层协议字段指定为确定值,高层协议字段指定为通配符(不指定即为匹配任何值),而不允许高层协议字段指定为确定值,而底层协议字段却为通配符(不指定即为匹配任何值),否则,ovs-vswitchd 中的流规则将全部丢失,网络无法连接。其中dl是datalink的缩写,nw是network的缩写,tp是transport的缩写。动作字段包括正常转发normal、定向到某交换机端口output:port、丢弃drop、更改源目的mac地址mod_dl_src/mod_dl_dst等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。实例:1.查看虚拟交换机ovsbr0的信息:$ovs-ofctl show ovsbr02.查看ovsbr0上各交换机端口的状态$ovs-ofctl dump-ports ovsbr03.查看ovsbr0上的所有流规则$ovs-ofctl dump-flows ovsbr04.丢弃从2号端口发来的所有数据包$ovs-ofctl add-flow ovsbr0idle_timeout=0,in_port=2,actions=drop注意:此处的in_port是指虚拟网卡(vif,tap)的号码,并非传输层的端口号(如www:80,ftp:21,22等),通过ovs-ofctl show ovsbr0可查得端口号,传输层的端口号有tp_src/tp_dst指定。5.删除条件字段中包含in_port=2的所有流规则$ovs-ofctl del-flows ovsbr0 in_port=26.丢弃所有收到的数据包$ovs-ofctl add-flow ovsbr0dl_type=*,nw_src=ANY,action=drop注意: (1)流规则中可包含通配符和简写形式,任何字段都可等于*或ANY,(2)简写形式为将字段组简写为协议名,目前支持的简写有ip,arp,icmp,tcp,udp,与流规则条件字段的对应关系如下:dl_type=00800ipdl_type=00806arpdl_type=00800,nw_proto=1icmpdl_type=00800,nw_proto=6tcpdl_type=00800,nw_proto=17udp(1.1.0 即以后版本支持)dl_type=0x86dd.ipv6dl_type=0x86dd,nw_proto=6.tcp6dl_type=0x86dd,nw_proto=17.udp6dl_type=0x86dd,nw_proto=58.icmp63 测试VALN:参考文章:/support/config-cookbooks/vlan-configuration-cookbook/配置实例1:在两台xen+openvswitch的服务器上06和08,启动四个虚拟机(206:VM3, VM4; 208:VM1, VM2 ),结构图如下所示:配置如下:1.在206上:Ifconfig eth106/16 up(1)创建网桥:Ovs-vsctl add-br ovsbr0#注意创建网桥之后,会在网桥上创建同名的端口ovsbr0,类型为internal,用于给网桥配置IP方便管理等。(2)让网桥ovsbr接管eth0:Ovs-vsctl add-portovsbr0 eth0(3)配置网桥的IP:Ifconfig eth0 Ifconfig ovsbr030/16 up(4)创建虚拟机:Virsh create VM1.xmlVirsh create VM2.xml(5)查看网桥:Ovs-vsctl show ovsbr0会发现ovsbr0下面会有6个端口ovsbr0,eth0,tap1.0,tap2.0,vif1.0,vif2.0。(关于tap和vif参见其他内容,在本服务器上起作用的是tap,具体哪个起作用还需要测试)2. 在208上,配置类似:3.配置VLAN(1)VM1, VM2属于VLAN1Ovs-vsctl set porttap1.0 tag=1Ovs-vsctl set port tap2.0tag=1之VM1和VM2之间可以互ping,(2)VM1属于VLAN1,VM2属于VLAN1Ovs-vsctl set porttap1.0 tag=1Ovs-vsctl set port tap2.0tag=2之VM1和VM2之间无法互ping,(3)VM1, VM2, VM3,VM4属于VLAN1208上:Ovs-vsctl set porttap1.0 tag=1Ovs-vsctl set porttap1.0 tag=1206上:Ovs-vsctl set port tap3.0tag=1Ovs-vsctl set port tap4.0tag=1之VM1, VM2, VM3,VM4之间可以互ping,(4)VM1, VM3,属于VLAN1,VM2,VM4属于VLAN2208上:Ovs-vsctl set porttap1.0 tag=1Ovs-vsctl set porttap2.0 tag=2206上:Ovs-vsctl set porttap3.0 tag=1Ovs-vsctl set porttap4.0 tag=2在我的试验中,VM1, VM2,VM3,VM4之间无法互ping,而理论上应该是VM1和VM3可以互ping,VM2和VM4之间可以互ping。目前还不知道什么原因造成的。待续。3.4 Sflow:1.下面先来关注几个问题:(1) Sflow是什么呢? 与sflow相应的有一个Netflow。 sFlow和Netflow聽起來很相似,但在骨子裡卻不一樣。Netflow會針對所有流經的網路封包去取得其特徵,包含Source IPaddress、Destination IP address、Sourceport for UDP or TCP, 0 for other protocols、Destinationport for UDP or TCP, type and code for ICMP, or 0 for other protocols、IP protocol、Ingress interface (SNMP ifIndex)、IP Type of Service這些資訊。由於Netflow會對所有流經的封包進行處理,若網路流量極大時,Netflow所提供的資料量亦會隨之增加,若資料量太大,後端分析引擎可能會不堪負荷,進而影響資料判讀時的正確性。sFlow的作法和Netflow不同,sFlow以取樣的方式取出資料的摘要,使用者可以自訂其取樣大小及取樣週期,即使流經大量網路流量,但sFlow經取樣後的資料相對於Netflow而言會大量的減少,如此一來就可以兼顧資料正確性並確保後端分析引擎處理能力。在實務上,sFlow較常運用於高速網路的環境,也是因為其具有此特性的關係。sFlow提供的資料格式在之後實作的階段會加以展示,在此不多作說明。在實作時,會遭遇到許多的困難,這是因為sFlow僅在部分設備上提供,也不像Netflow,在Linux中可使用nfdump套件來產生符合其格式的流量。(2) 是不是openvswitch支持了sflow就不支持了netflow?不是,在其官方的介绍里(上文的官方图片),可以看到也是支持netflow的。目前我的做法是,使用sflowtool将sflow转换为netflow。2.配置实例:目标: 流量导出,并可以使用snort,tcpdump对流量进行监控和分析。配置图如下所示:在208服务器上安装xen和openvswitch,并启动两个虚拟机VM1,VM2。不在赘述。(1)配置sflow流量导出#!/bin/shCOLLECTOR_IP=8COLLECTOR_PORT=6343AGENT_IP=eth1HEADER_BYTES=128SAMPLING_N=2POLLING_SECS=1ovs-vsctl id=sflow create sflow agent=$AGENT_IPtarget=”$COLLECTOR_IP:$COLLECTOR_PORT” header=$HEADER_BYTESsampling=$SAMPLING_N polling=$POLLING_SECS set bridge ovsbr0sflow=sflow这是配置sflow的一个脚本,现在解释其中的意思:COLLECTOR_IP是指进行流量监控的机器,本次实例中是指8COLLECTOR_PORT=6343 是指把流量发到COLLECTOR_IP的6343端口AGENT_IP=eth1是指把流量从本地的eth1端口发出去并指定每1秒poolling一次,每次的取样频率为64(即,每隔64个Packet取样一次)。(2)转换sflow现在让VM1(ip:x.x.x241) ping VM2(ip: x.x.x242)执行上面那个脚本,在18.18机器上用snort会看到206发到18.18的包,而不会看到241和242之间通信的数据包。因为241和242通信的数据被sflow封装起来之后再发给18.18.如果想看到这个数据,需要将sflow转换为snort和tcpdump的格式,具体命令如下:$sflowtoolp 6343 t | snort r 或者$sflowtoolp 6343 t | tcpdump X r -(3)sflowtool的使用:-f可以转发到另一台机器上$sflowtool p 6343 t f x.x.x.x/6343-c可以将sflow转换为netflow其他的使用信息,参见 man sflowtool3.5 Ovs接入物理机器目的:是open vswitch不仅可以控制虚拟机(VM1, VM2),也可以控制物理机器(PY1)配置图如下:具体配置如下:(1)由网桥ovsbr0接管eth0和eth2。Ovs-vsctl add-portovsbr0 eth0Ovs-vsctl add-portovsbr0 eth2(2)Eth0接外网,eth1接hub(3)在208上启动两个虚拟机VM1,VM2。并配置IPx.x.x.241, x.x.x.242(4)配置物理机PY1的IP为, x.x.x.250(5)现在已经联通了,下面测试一下,可以有250 ping 241, 启动sflow便可观测到相应的信息。4. 遇到的问题4.1找不到opevswitch_mod.ko和 brcompatd.ko内核模块怎么办?编译安装和apt安装都需要编译内核模块,而编译内核模块需要安装linux-header,即需要 /lib/modules/uname -r/build,下的内容。请确保系统已安装linux-header。4.2Xen无法创建虚拟机?查看xen日志文件,并判断错误原因$tailn 100 /var/log/xen/qemu-dm-XXX.log(1)如果出现以下错误:$tail -n 100/var/log/xen/qemu-dm-u3.logdomid: 44-c config qemunetwork with xen bridge fortap44.0 ovsbr0cant add tap44.0 tobridge ovsbr0: Operation not supported/etc/xen/scripts/qemu-ifup:could not launch network scriptCould notinitialize device tap需要加载open vswitch的bridge的兼容模块brcompatd.ko,即$insmod/path/to/brcompatd.ko(2)一切都配置妥当的时候,我还遇到个错误,导致虚拟机无法正常启动,是因为xml配置文件中部分写在了的前面,改过来之后就好了。4.3关于兼容模块brcompatd.ko看看官方给出的解释:/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=INSTALL.bridge;hb=HEADThis file documents how Open vSwitch may be used as a drop-inreplacement for a Linux kernel bridge in an environment that includeselements that are tightly tied to the Linux bridge tools(e.g. brctl) and architecture. We recommend directly using themanagement tools provided with Open vSwitch rather than thesecompatibility hooks for environments that are not tightly tied to theLinux bridging tools; they are more efficient and better reflect theactual operation and status.。大致意思是有很多工具,软件等等和Linux kernel bridge的关联比较紧密,比如我们使用的xen-4.1。上一小节提到xen无法创建,错误里面有句话是” /etc/xen/scripts/qemu-ifup: could not launch network script”,而查看这个脚本,里面的内容是:#!bin/shEchoc config qemu network with xen bridge forEcho$*Ifconfig$1 upBrctl addif $2 $1此处便发现这个脚本使用Brctl,而其依赖于linux bridge。4.4tap和vif的区别PV虚机只有一个vifX.N,而HVM虚机不安装PVDriver的时候会有两个网络接口vifX.N和tapX.N,而且实际上使用的是tapX.N。HVM虚机安装PVDriver并重启后,tapX.N会消失,使用vifX.N(若不重启还是使用tapX.N)tap interfaces - qemu-emulated NICs (realtek model by default),usedwhen no PV drivers installed (using OS own driver for that model)vif interfaces (the one that you can rename) - xen network frontendNICs, used when you have PV drivers installed (like GPLPV,/downloads/)the vif is avirtual interface that workswithpv drivers in domU. The tap is a Qemu interface that is used withHVMs that dont have pv drivers.So, if you start a HVM domU, youllhave the vif that Xen creates and the tap thatQemu creates, if pvdrivers areavailable, then once they are loaded Domu uses them and thetap goes away, but if not then bothremain, but only the tap interfaceisbeing used. Obviously, if you need more detailed explaination, thenIm of no further use.:)4.5深入认识tap和tun官方FAQ:/tun/faq.htmlTUN时点对点的设备,tap表示以太网设备的,做为虚拟网卡驱动,Tun/tap驱动程序的数据接收和发送并不直接和真实网卡打交道,而是通过用户态来转交。在linux下,要实现核心态和用户态数据的交互,有多种方式:可以通用socket创建特殊套接字,利用套接字实现数据交 互;通过proc文件系统创建文件来进行数据交互;还可以使用设备文件的方式,访问设备文件会调用设备驱动相应的例程,设备驱动本身就是核心态和用户态的一个接口,Tun/tap驱动就是利用设备文件实现用户态和核心态的数据交互。当没有内核模块支持的时候,Open vSwitch完全运行于用户态,ovs的数据通路有tun来实现。参见4.6,当没有内核支持的时候,如何使用ovs。 为了对tap/tun有更深入的体会,下面将观看tun源代码,并使用tun写个程序。tun源代码可从此处获得/tun/index.html。其头文件是”if_tun.h”,这个适用于编程时用的。另外要编译tun.c,将tun作为内核模块加载进去。下面是tun.c中几段代码/* file_operations 结构体,将正常的文件操作对应于tun相应的函数,这样可以像操作文件一样操作tun*/static struct file_operations tun_fops = owner: THIS_MODULE, llseek: tun_chr_lseek, read: tun_chr_read, write: tun_chr_write, poll: tun_chr_poll, ioctl: tun_chr_ioctl, open: tun_chr_open, release:tun_chr_close, fasync: tun_chr_fasync ; static struct miscdevice tun_miscdev= TUN_MINOR, net/tun, &tun_fops;/*c语言中的 _init 保证该函数只执行一次 */int _init tun_init(void) printk(KERN_INFO Universal TUN/TAP device driver %s (C)1999-2000 Maxim Krasnyanskyn, TUN_VER); if (misc_register(&tun_miscdev) printk(KERN_ERR tun: Cant register misc device %dn, TUN_MINOR); return -EIO; return 0; void tun_cleanup(void) misc_deregister(&tun_miscdev); /*加载tun模块*/module_init(tun_init);module_exit(tun_cleanup);下面应用一下tun,写个程序体会一下(tun源码中的一个example)#include #include #include #include #include #include #define max(a,b) (a)(b) ? (a):(b) int main(int argc, char *argv) char buf1600; int f1,f2,l,fm; fd_set fds; if(argc 2) printf(Usage: bridge tap|tunn); exit(1); sprintf(buf,/dev/%s%d,argv1,0); f1 = open(buf, O_RDWR); sprintf(buf,/dev/%s%d,argv1,1); f2 = open(buf, O_RDWR); fm = max(f1, f2) + 1; ioctl(f1, TUNSETNOCSUM, 1); ioctl(f2, TUNSETNOCSUM, 1); while(1) FD_ZERO(&fds); FD_SET(f1, &fds); FD_SET(f2, &fds); select(fm, &fds, NULL, NULL, NULL); if( FD_ISSET(f1, &fds) ) l = read(f1,buf,sizeof(buf); write(f2,buf,l); if( FD_ISSET(f2, &fds) ) l = read(f2,buf,sizeof(buf); write(f1,buf,l); 4.6 当没有内核支持的时候,如何使用ovs?参考官方文档:/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=INSTALL.userspace;hb=HEA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论