49彩票集团首页-49彩票集团官网|官网首页

49彩票集团让大家拥有最好的账号使用功能,49彩票集团是为大家带来更加方便的使用途径,是因为在49彩票集团娱乐的玩家们越来越多,发展成为最受欢迎的网上体育娱乐公司。

使虚构服务器(VMs)能够接连在编造交流机上,必要

2019-10-05 作者:计算机网络   |   浏览(111)

1.打开OVX

sh OpenVirteX/script/ovx.sh

-写在前面的废话-

Open vSwitch介绍

在过去,数据中心的服务器是直接连在硬件交换机上,后来VMware实现了服务器虚拟化技术,使虚拟服务器(VMs)能够连接在虚拟交换机上,借助这个虚拟交换机,可以为服务器上运行的VMs或容器提供逻辑的虚拟的以太网接口,这些逻辑接口都连接到虚拟交换机上,有三种比较流行的虚拟交换机: VMware virtual switch, Cisco Nexus 1000V,和Open vSwitch

Open vSwitch(OVS)是运行在虚拟化平台上的虚拟交换机,其支持OpenFlow协议,也支持gre/vxlan/IPsec等隧道技术。在OVS之前,基于Linux的虚拟化平台比如KVM或Xen上,缺少一个功能丰富的虚拟交换机,因此OVS迅速崛起并开始在Xen/KVM中流行起来,并且应用于越来越多的开源项目,比如openstack neutron中的网络解决方案

在虚拟交换机的Flow控制器或管理工具方面,一些商业产品都集成有控制器或管理工具,比如Cisco 1000V的Virtual Supervisor Manager(VSM),VMware的分布式交换机中的vCenter。而OVS则需要借助第三方控制器或管理工具实现复杂的转发策略。例如OVS支持OpenFlow 协议,我们就可以使用任何支持OpenFlow协议的控制器来对OVS进行远程管理。OpenStack Neutron中的ML2插件也能够实现对OVS的管理。但这并不意味着OVS必须要有一个控制器才能工作。在不连接外部控制器情况下,OVS自身可以依靠MAC地址学习实现二层数据包转发功能,就像Linux Bridge

在基于Linux内核的系统上,应用最广泛的还是系统自带的虚拟交换机Linux Bridge,它是一个单纯的基于MAC地址学习的二层交换机,简单高效,但同时缺乏一些高级特性,比如OpenFlow,VLAN tag,QOS,ACL,Flow等,而且在隧道协议支持上,Linux Bridge只支持vxlan,OVS支持gre/vxlan/IPsec等,这也决定了OVS更适用于实现SDN技术

OVS支持以下49彩票集团,features

  • 支持NetFlow, IPFIX, sFlow, SPAN/RSPAN等流量监控协议
  • 精细的ACL和QoS策略
  • 可以使用OpenFlow和OVSDB协议进行集中控制
  • Port bonding,LACP,tunneling(vxlan/gre/Ipsec)
  • 适用于Xen,KVM,VirtualBox等hypervisors
  • 支持标准的802.1Q VLAN协议
  • 基于VM interface的流量管理策略
  • 支持组播功能
  • flow-caching engine(datapath模块)

文章使用环境

centos7
openvswitch 2.5
OpenFlow 1.4

2.创建mininet物理拓扑

1sw, 2hosts

mn --controller=remote,ip=192.168.226.128,port=6633

Hint: 需要指定OVX所在的IP地址。

自从今年接触到了SDN(软件定义网络),就觉得进入了一个全新的领域。毕设做的Floodlight(一种Openflow控制器)更是一度让我觉得无从下手,概念理解的不透彻,安装中遇到奇奇怪怪的问题,第一次用ubuntu,几乎等于没有的中文资料,完全在官网上看英语自学,着实让我头疼了好久。虽然出国有一些时日了,但是依然是习惯看中文的资料学习,这个习惯看来是有必要改改了,大多数时候官网上给出的例子都十分有代表性,是学习的好地方。由于英语理解能力一般以及部分术语难以理解等原因,在学习floodlight和sdn前期花了不少功夫。最近刚刚看到一篇博文说总结项目也是取得进步的重要一环,于是回头看看自己的代码,真是不忍直视。虽说是第一次写python代码,代码量也不大,但现在看起来真的是乱糟糟一片,想修改都无从下手,正好借此写博客总结的机会,把代码总结修改一下,顺便学习一下github,把代码push上去。第一次写博客,第一次用markdown,第一次用github,最难的大概就是从0到1的过程吧,这应该也算是向着成为一个技术大牛的梦想上迈出了一步吧~如果文中有什么问题或疏漏,都欢迎指出讨论。

OVS架构

先看下OVS整体架构,用户空间主要组件有数据库服务ovsdb-server和守护进程ovs-vswitchd。kernel中是datapath内核模块。最上面的Controller表示OpenFlow控制器,控制器与OVS是通过OpenFlow协议进行连接,控制器不一定位于OVS主机上,下面分别介绍图中各组件

49彩票集团 1

ovs1

3.打开控制器

先给出逻辑框架图,然后每个模块逐步介绍。

49彩票集团 2

architecture

整个系统可以简单的分为2个部分。左下角是虚拟网络和floodlight控制器,在虚线以内的是域名管理服务器模块。

普通的家庭路由器屏蔽网站一般是通过IP地址(说实话我也不知道现在的家用路由有什么高级功能),这样一来管理员如果想屏蔽某一类网址就不得不输入大量的IP地址,即浪费时间也不方便修改。所以这个项目中提出了通过域名和域名的标签(tags)来管理家庭网络。比如google和baidu的标签都是“search engine”,那么我们把相应的主机屏蔽掉“search engine”,就能屏蔽掉大部分的搜索引擎,方便且容易修改。

我们用Mininet创建一个虚拟网络来进行模拟实验。当虚拟网络中的某个主机想访问某个域名时,它会首先发送一条DNS请求来获取该域名的IP地址,当Openflow交换机收到了DNS请求时,便会发送一条Packet_in消息给floodlight控制器,在控制器里这个DNS请求将会被解析,取出请求中的域名地址,然后发送给域名管理服务器。域名管理服务器会通过该域名的标签来判断该主机是否有权限访问相应的域名,然后返回一个Permit/Deny响应给floodlight控制器,如果是Permit,则该DNS请求则正常转发;如果是Deny,floodlight控制器会丢弃掉这条请求,该主机便无法访问此域名。

ovs-vswitchd

ovs-vswitchd守护进程是OVS的核心部件,它和datapath内核模块一起实现OVS基于流的数据交换。作为核心组件,它使用openflow协议与上层OpenFlow控制器通信,使用OVSDB协议与ovsdb-server通信,使用netlinkdatapath内核模块通信。ovs-vswitchd在启动时会读取ovsdb-server中配置信息,然后配置内核中的datapaths和所有OVS switches,当ovsdb中的配置信息改变时(例如使用ovs-vsctl工具),ovs-vswitchd也会自动更新其配置以保持与数据库同步

# ps -ef |grep ovs-vs
root     22176 22175  0 Jan17 ?        00:16:56 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor

ovs-vswitchd需要加载datapath内核模块才能正常运行。它会自动配置datapath flows,因此我们不必再使用ovs-dpctl去手动操作datapath,但ovs-dpctl仍可用于调试场合

在OVS中,ovs-vswitchd从OpenFlow控制器获取流表规则,然后把从datapath中收到的数据包在流表中进行匹配,找到匹配的flows并把所需应用的actions返回给datapath,同时作为处理的一部分,ovs-vswitchd会在datapath中设置一条datapath flows用于后续相同类型的数据包可以直接在内核中执行动作,此datapath flows相当于OpenFlow flows的缓存。对于datapath来说,其并不知道用户空间OpenFlow的存在,datapath内核模块信息如下

# modinfo openvswitch
filename:       /lib/modules/3.10.0-327.el7.x86_64/kernel/net/openvswitch/openvswitch.ko
license:        GPL
description:    Open vSwitch switching datapath
rhelversion:    7.2
srcversion:     F75F2B83324DCC665887FD5
depends:        libcrc32c
intree:         Y
...

4.创建虚拟网络

目录:OpenVirteX/utils

./ovxctl.py -n createNetwork tcp:localhost:8080 10.0.0.0 16

Hint: tcp:localhost:8080 是控制器的IP和端口信息

49彩票集团 3

首先介绍虚拟网络和floodlight控制器部分。

环境:Ubuntu14.04.1;Mininet 2.2;Floodlight v1.2

Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持。通俗一点说就是,Mininet可以创建虚拟主机虚拟交换机实现虚拟网络。

安装教程链接在此

http://mininet.org/download/

Mininet网上的中文教程其实很多了,就不再赘述,聊一聊折腾了好久的问题。其实安装Mininet时非常简单的,git clone之后install.sh -a就行。但是不知道为什么在我的ubuntu上一直安装失败。然后当我输入Mininet创建网络的指令的时候,他会提示

49彩票集团 4

sudo mn

这时如果你按照提示通过apt-get安装Mininet,会默认安装Mininet2.1版本(当时最新的版本是2.2,apt-get默认2.1),而我需要使用2.2的一些新功能(后面会提到),只用将安装的指令改为install.sh -nfv就行,当初固执的想-all,结果浪费了好多时间。

Mininet安装好之后用sudo mn测试,会自动创建一个包含两个主机和一个交换机的虚拟网络。接下来是安装Floodlight控制器,官网链接在此

https://floodlight.atlassian.net/wiki/display/floodlightcontroller/Installation+Guide#InstallationGuide-FloodlightMasterandAbove

Floodlight是一种Java的Openflow控制器。SDN的核心理念之一便是控制模块和数据模块分开,Openflow控制器连在Openflow交换机上,交换机收到数据包后会发送Packet_in消息将数据包发送给Openflow控制器,经过处理后发送Packet_out消息返回给交换机,然后交换机进行转发。

Floodlight控制器安装好后下一步便是将控制器连接到Openflow交换机上,即由Mniniet创建的虚拟交换机。首先,我们需要用一段简单的python代码实现想要的拓扑结构。

#!/usr/bin/python  
from mininet.topo import Topo  
from mininet.net import Mininet  
from mininet.node import RemoteController, Controller  
from mininet.cli import CLI  
from mininet.link import TCLink  
from mininet.log import setLogLevel  

class MyTopo(Topo):  
    def __init__(self):  
        Topo.__init__(self)  
        Host1 = self.addHost('Child_1', ip='10.0.0.1')  
        Host2 = self.addHost('Child_2', ip='10.0.0.2')  
        Host3 = self.addHost('Father', ip='10.0.0.3')  
        Host4 = self.addHost('Mother', ip='10.0.0.4')  

        switch1 = self.addSwitch('s1')    

        self.addLink(switch1, Host1)  
        self.addLink(switch1, Host2)  
        self.addLink(switch1, Host3)  
        self.addLink(switch1, Host4)  

topos = {'mytopo': (lambda: MyTopo())}  

在我们的拓扑图中,创建了四个主机和一个交换机,并且四个主机都直接连在交换机上。接下来在eclipse中运行floodlight,这时的floodlight还是没有任何功能的,可以看做一个正常的交换机。运行后用下面的命令创建网络拓扑并且连接floodlight到我们创建的虚拟交换机上。

sudo mn --custom MyTopo.py --topo mytopo --mac --nat --controller=remote,ip=127.0.0.1,port=6653

mn即创建拓扑;

--custom 使用自己定义的拓扑;

--mac 使mac地址简化;

--nat 使我们创建的网络可以连接到Internet,如果没有这条指令,我们创建的网络是没有连接的外网的,也就是无法ping通Internet的,--nat只有在2.2及以上版本才有;

--controller 选择虚拟网络的控制,因为我的Mininet和floodlight都在一台虚拟机上,所以IP地址是本机地址,端口6653,可能有些老版的教程还是6633,这里要注意下,已经统一改为6653端口了。

49彩票集团 5

创建拓扑

如图所示,我们的虚拟网络搭建好了,在eclipse的控制台中也能看到,已经连接上交换机。

但是依然高兴的太早,这时候使用Ping指令你会发现,依然是Ping不通外网的。

49彩票集团 6

Ping失败

首先,我们用xterm进入任意一个host,然后进入/etc/resolv.conf这个配置文件,如图所示。

49彩票集团 7

resolv.conf

49彩票集团 8

修改配置文件

按下i修改这个配置文件,如果发现在修改过程中键盘失灵,请先安装vim。

将nameserver的ip地址改为8.8.8.8,这是Google提供的免费DNS服务器的IP地址,然后删掉后面的localdomain。接着按下esc,输入:wq保存退出,然后exit退出xterm,回到Mininet的命令行,重新执行Ping指令,我们会发现,现在已经可以Ping通了。

49彩票集团 9

Ping成功

关于刚才修改文件的内容,第一行是默认的DNS服务器地址;第二行这个local domain我一直没有找到相关的资料,但是根据最后运行的结论我觉得,这个应该是本地缓存域名之类的,因为在后面的实验中,当我用floodlight控制器丢弃主机发送的DNS请求后,比如请求域名为www.baidu.com,主机收不到DNS响应后,会发送一条新的DNS请求,这时的请求域名变成了www.baidu.com.localdomain,如果删除了localdomain那一行,便不会有这条新的DNS请求。所以我猜测,这个localdomain应该是存在交换机上的域名-IP缓存,主机在第一次请求失败后,试图从交换机的缓存中取得请求域名的IP地址。

OK了~Mininet和floodlight的配置结束,下一步便是在floodlight中实现功能了。

ovsdb-server

ovsdb-server是OVS轻量级的数据库服务,用于整个OVS的配置信息,包括接口/交换内容/VLAN等,OVS主进程ovs-vswitchd根据数据库中的配置信息工作,下面是ovsdb-server进程详细信息

ps -ef |grep ovsdb-server
root     22166 22165  0 Jan17 ?        00:02:32 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor

/etc/openvswitch/conf.db是数据库文件存放位置,文件形式存储保证了服务器重启不会影响其配置信息,ovsdb-server需要文件才能启动,可以使用ovsdb-tool create命令创建并初始化此数据库文件
--remote=punix:/var/run/openvswitch/db.sock 实现了一个Unix sockets连接,OVS主进程ovs-vswitchd或其它命令工具(ovsdb-client)通过此socket连接管理ovsdb
/var/log/openvswitch/ovsdb-server.log是日志记录

5.创建虚拟交换机

./ovxctl.py -n createSwitch 1 00:00:00:00:00:01

Hint:需要提供交换机的dpid;记录下创建之后虚拟交换机的虚拟id,这里为00:a4:23:05:00:00:00:03

49彩票集团 10

OpenFlow

OpenFlow是开源的用于管理交换机流表的协议,OpenFlow在OVS中的地位可以参考上面架构图,它是Controller和ovs-vswitched间的通信协议。需要注意的是,OpenFlow是一个独立的完整的流表协议,不依赖于OVS,OVS只是支持OpenFlow协议,有了支持,我们可以使用OpenFlow控制器来管理OVS中的流表,OpenFlow不仅仅支持虚拟交换机,某些硬件交换机也支持OpenFlow协议

OVS常用作SDN交换机(OpenFlow交换机),其中控制数据转发策略的就是OpenFlow flow。OpenStack Neutron中实现了一个OpenFlow控制器用于向OVS下发OpenFlow flows控制虚拟机间的访问或隔离。本文讨论的默认是作为SDN交换机场景下

OpenFlow flow的流表项存放于用户空间主进程ovs-vswitchd中,OVS除了连接OpenFlow控制器获取这种flow,文章后面会提到的命令行工具ovs-ofctl工具也可以手动管理OVS中的OpenFlow flow,可以查看man ovs-ofctl了解

在OVS中,OpenFlow flow是最重要的一种flow, 然而还有其它几种flows存在,文章下面OVS概念部分会提到

6.创建虚拟端口

./ovxctl.py -n createPort 1 00:00:00:00:00:01 1

./ovxctl.py -n createPort 1 00:00:00:00:00:01 2

49彩票集团 11

Controller

Controller指OpenFlow控制器。OpenFlow控制器可以通过OpenFlow协议连接到任何支持OpenFlow的交换机,比如OVS。控制器通过向交换机下发流表规则来控制数据流向。除了可以通过OpenFlow控制器配置OVS中flows,也可以使用OVS提供的ovs-ofctl命令通过OpenFlow协议去连接OVS,从而配置flows,命令也能够对OVS的运行状况进行动态监控。

7.主机连接虚拟端口

./ovxctl.py -n connectHost 1 00:a4:23:05:00:00:00:03 1 16:dd:9b:c4:37:21

Hint:参数为 - 虚拟网络id 虚拟交换机的Id 虚拟端口 主机MAC地址

49彩票集团 12

Kernel Datapath

下面讨论场景是OVS作为一个OpenFlow交换机

datapath是一个Linux内核模块,它负责执行数据交换。关于datapath,The Design and Implementation of Open vSwitch中有描述

<small>The datapath module in the kernel receives the packets first, from a physical NIC or a VM’s virtual NIC. Either ovs-vswitchd has instructed the datapath how to handle packets of this type, or it has not. In the former case, the datapath module simply follows the instructions, called actions, given by ovs-vswitchd, which list physical ports or tunnels on which to transmit the packet. Actions may also specify packet modifications, packet sampling, or instructions to drop the packet. In the other case, where the datapath has not been told what to do with the packet, it delivers it to ovs-vswitchd. In userspace, ovs-vswitchd determines how the packet should be handled, then it passes the packet back to the datapath with the desired handling. Usually, ovs-vswitchd also tells the datapath to cache the actions, for handling similar future packets.</small>

为了说明datapath,来看一张更详细的架构图,图中的大部分组件上面都有提到

49彩票集团 13

ovs1

用户空间ovs-vswitchd和内核模块datapath决定了数据包的转发,首先,datapath内核模块收到进入数据包(物理网卡或虚拟网卡),然后查找其缓存(datapath flows),当有一个匹配的flow时它执行对应的操作,否则datapath会把该数据包送入用户空间由ovs-vswitchd负责在其OpenFlow flows中查询(图1中的First Packet),ovs-vswitchd查询后把匹配的actions返回给datapath并设置一条datapath flows到datapath中,这样后续进入的同类型的数据包(图1中的Subsequent Packets)因为缓存匹配会被datapath直接处理,不用再次进入用户空间。

datapath专注于数据交换,它不需要知道OpenFlow的存在。与OpenFlow打交道的是ovs-vswitchdovs-vswitchd存储所有Flow规则供datapath查询或缓存.

虽然有ovs-dpctl管理工具的存在,但我们没必要去手动管理datapath,这是用户空间ovs-vswitchd的工作

本文由49彩票集团发布于计算机网络,转载请注明出处:使虚构服务器(VMs)能够接连在编造交流机上,必要

关键词:

  • 上一篇:没有了
  • 下一篇:没有了