OpenvSwitch简称OVS,官网(http://openvswitch.org/) OVS是一个高质量、多层的虚拟交换软件,即虚拟交换机。

OpenvSwitch的见的相关组件:

  ovs-vswitchd:实现switch的daemon功能,包括一个支持流交换的Linux内核模块,实现了交换功能

  ovsdb-vswtich: openvswitch的数据库,给ovs-vswitchd提供运行配置信息,即保存了ovs-vswitchd的配置信息,例如vlan、port等信息

  ovs-vsctl:查询和更新ovs-vswitchd的配置,即用于修改或查询ovsdb-vswitch的信息

  还有些组件此处不做介绍

接下来我们来做一个实验,利用GRE通道搭建一个跨多宿主机的虚拟化网络,环境centos6.7 拓扑图如下

1)修改内核参数(一定要先修改内核参数,若果配置了网络名称空间在配置内核参数,内核参数将不会生效)

net.ipv4.ip_forward = 1 \\启用内核转发功能

net.ipv4.conf.default.rp_filter = 0  \\关闭路由验证

/etc/init.d/iptables stop  \\关闭防火墙

setenforce 0 \\关闭Selinux

2)准备yum源

[openswitch]

name= openswitch
baseurl=https://repos.fedorapeople.org/openstack/EOL/openstack-icehouse/epel-6/
enabled=1
gpgcheck=0
 
yum install openvswitch \\两台宿主机都要安装  启动openvswitch:  service openvswitch start
yum update iproute  \\更新iproute软件
 
ip netns add A1  \\创建A1网络名称空间
ip netns add B1  \\创建B1网络名称空间
ip netns show    \\查看创建的玩两个名称空间
 
ovs-vsctl add-br br1  \\使用openvswitch创建br1桥设备
ovs-vsctl add-br br2  \\使用openvswitch创建br2桥设备
ovs-vsctl add-br br3  \\使用openvswitch创建br3桥设备
ovs-vsctl show   \\查看创建的桥设备
 
ip link add name a1.1 type veth peer name a1.2 \\创建一对端口,用于连接A1网络名称空间跟br2桥设备
ip link set a1.1 up  \\激活a1.1端口
ip link set a1.2 up   \\激活a1.2端口
 
ip link add name b1.1 type veth peer name b1.2 \\创建一对端口,用于连接B1网络名称空间与br3桥设备
ip link set b1.2 up   \\激活b1.2端口
ip link set b1.1 up   \\激活b1.1端口
 
ip link add name b12.1 type veth peer name b12.2  \\创建一对端口,用于连接br2与br1桥设备
ip link set b12.1 up  \\激活b12.1端口
ip link set b12.2 up   \\激活b12.2端口
 
ip link add name b13.1 type veth peer name b13.2 \\创建一对端口,用于连接br3与br1桥设备
ip link set b13.1 up  \\激活b13.1端口
ip link set b13.2 up   \\激活b13.2端口
 
ip link add name b23.1 type veth peer name b23.2 \\创建一对端口,用于连接br2与br3桥设备
ip link set b23.1 up  \\激活b23.1端口
ip link set b23.2 up   \\激活b23.2端口
 
ovs-vsctl add-port br2 a1.1  \\把a1.1端口加入到br2桥设备上
ip link set a1.2 netns A1  \\把a1.2端口添加到A1网络名称空间,要注意,a1.2添加到网络名称空间后不会在本地显示
 
ovs-vsctl add-port br3 b1.1  \\把b1.1端口加入到br3桥设备上
ip link set b1.2 netns B1    \\把b1.2端口加入到B1网络名称空间
 
ovs-vsctl add-port br2 b23.2     \\把b23.2端口加入到br2桥设备上
ovs-vsctl add-port br3 b23.1     \\把b23.1加入到br3桥设备上
 
ip netns exec A1  ip link set a1.2 up
ip netns exec A1  ip addr add 192.168.10.1/24 dev a1.2
 
ip netns exec A1 ifconfig \\查看配置的ip地址
 
ip netns exec B1 ip link set b1.2 up
ip netns exec B1 ip addr add 192.168.10.2/24 dev b1.2
 
ip netns exec B1 ifconfig    \\查看配置的ip地址
ip netns exec B1  ping 192.168.10.1  \\在B1网络名称空间可以ping通A1网络名称空间
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=2.66 ms
 
ip netns exec A1  ping 192.168.10.2   \\在A1网络名称空间可以ping通B1网络名称空间
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.52 ms
 
ovs-vsctl add-port br1 b12.2    \\添加b12.2端口到br1桥设备上
ovs-vsctl add-port br1 b13.2     \\添加b13.2端口到br1桥设备上
ovs-vsctl add-port br2 b12.1      \\添加b12.1端口到br2桥设备上
ovs-vsctl add-port br3 b13.1       \\添加b13.1端口到br3桥设备上
 
ovs-vsctl set Bridge br1 stp_enable=true \\为了防止br1、br2、br3桥设备产生环路,开启stp协议
ovs-vsctl set Bridge br2 stp_enable=true  \\为了防止br1、br2、br3桥设备产生环路,开启stp协议
ovs-vsctl set Bridge br3 stp_enable=true   \\为了防止br1、br2、br3桥设备产生环路,开启stp协议
 
ovs-vsctl add-port br1 GRE  \\宿主机的br1桥设备上添加一个用于GRE封装的端口
ovs-vsctl  set Interface GRE type=gre  options:remote_ip=192.168.204.132
 
上面的步骤在node4上做一遍,最后一步的地址改为192.168.204.131
 
测试两台宿主机之间网络名称空间的连通性
  [root@node3 ~]# ip netns exec B1 ping 192.168.10.10
  64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=3.59 ms
  [root@node4 ~]# ip netns exec A2 ping 192.168.10.1
  64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=6.75 ms
 
在node4宿主机上ping  node3宿主机上的网络名称空间,在node3宿主机上抓包分析
[root@node3 ~]# tcpdump -nn  -i eth1
10:15:38.768203 IP 10.10.10.1 > 10.10.10.2: GREv0, length 56: STP 802.1d, Config, Flags [none], bridge-id 8000.a2:49:24:81:6e:46.8001, length 35
通过以上数据转发,会发现数据是经过GRE转发的
 
[root@node3 ~]# ip netns exec A1 tcpdump -nn  icmp    -i a1.2
10:18:29.352487 IP 192.168.10.10 > 192.168.10.1: ICMP echo request, id 7211, seq 1, length 64
 
 
利用vxlan通道建一个跨多宿主机的虚拟化网络,环境centos6.7 拓扑图如下
步骤与gre的相同但最后一步变成了 ovs-vsctl set Interface vxlan type=vxlan options:remote_ip=192.168.204.131
 
在node4宿主机上ping  node3宿主机上的网络名称空间,在node3宿主机上抓包分析
 
[root@node3 ~]# tcpdump -nn -i eth1
10:34:12.799191 IP 10.10.10.1.58588 > 10.10.10.2.4789: UDP, length 60
 
通过以上数据分析,可以发现vxlan利用udp封装数据报文将两台宿主机之前的虚拟网络打通
 
 

虚拟化网络之OpenvSwitch的更多相关文章

  1. Docker 学习4 Docker容器虚拟化网络概述

    一.docker 虚拟化网络概述 1.OVS: OpenVSwitch,不仅能模拟二层网络,还能模拟三层网络,或者VLAN,VXLAN,流控 SDN软件定义网络技术等. 2.overlay netwo ...

  2. Neutron 理解 (1): Neutron 所实现的虚拟化网络 [How Netruon Virtualizes Network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  3. docker容器虚拟化网络

    linux内核支持六种名称空间 1.主机名和域名  ------->  UTS 2.用户  -------->  User 3.文件挂载系统   ------->  mount 4. ...

  4. 《重构网络:SDN架构与实现》Chapter7 SDN与网络虚拟化 随笔

    参考: <重构网络:SDN架构与实现>,作者:杨泽卫.李呈. Chapter7 SDN与网络虚拟化 结构 7.1 网络虚拟化 7.1.1 为什么需要网络虚拟化技术 7.1.2 网络虚拟化 ...

  5. Neutron中的网络I/O虚拟化

    为了提升网络I/O性能.虚拟化的网络I/O模型也在不断的演化: 1,全虚拟化网卡(emulation).如VMware中的E1000用来仿真intel 82545千兆网卡,它的功能更完备,如相比一些半 ...

  6. Windows Server 2012 虚拟化实战:网络(二)

    关于Windows Server的虚拟化网络,前文描述了在操作系统层面上的出现的配置变化.其中的一些配置通过Windows Server提供的小工具即可实现,如网卡组的配置,而有些需要安装Window ...

  7. Windows Server 2012 虚拟化实战:网络(一)

    虚拟化对于计算的抽象,大家可能相对熟悉,也许都有在单机使用诸如Virtual PC或者Virtual Box的经验.使用的这些虚拟化软件的第一印象就是我们的CPU可以同时运行多套不同的操作系统,并且其 ...

  8. KVM 网络虚拟化基础 - 每天5分钟玩转 OpenStack(9)

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  9. 一:Neutron实现网络虚拟化

    一 云计算时代数据中心物理网络的问题 数据中心虚拟化成为了趋势,最典型的场景莫过于:对数据中心的服务器进行虚拟化,来提高资源利用率,同时降低单位能耗. 但是,随着数据中心虚拟化程度的不断提高.虚拟化服 ...

随机推荐

  1. from: Maven实战(九)——打包的技巧

    from : http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package 要点: 1. 打出可执行的jar包, 2. 自定义打包

  2. linux中tr用法

    tr命令不能直接从文件中读取并转换文本,因此通常都使用重定向输入或者管道传递方法: -s 代替掉重复的字符 #echo "HHHHHHEEEElllooooo" | tr -s ' ...

  3. selenium用java找到表格某一行某一列中含有特定文字的某个元素

    html部分代码如下: <tbody> <tr class="odd"> <td>1609</td> <td>-YOUK ...

  4. HTML5 Canvas 八星聚义动态效果

    昔有石碣村七星聚义,今有Canvas八星聚义.动态效果是,八颗星以等速螺线慢慢向中心聚集,最后汇聚成一颗. 效果: 代码: <!DOCTYPE html> <html lang=&q ...

  5. Intellij IDEA 的使用

    前言: 为什么我要选择intellij idea呢?原因有三 1.曾经公司的项目 在myeclipse10中不稳定 myeclipse说不定什么时候就崩溃卡死了  而intellij非常稳定 2.界面 ...

  6. CSRF Token

    本文参考自:https://blog.csdn.net/lion19930924/article/details/50955000 目的是防御CSRF攻击. Token就是令牌,最大的特点就是随机性, ...

  7. 为电脑添加u盘写保护

    需求:解决在公共打印PC机上u盘病毒的传染,设置后该PC机将不能对u盘文件进行写操作 修改注册表,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro ...

  8. sprint3 【每日scrum】 TD助手站立会议第三天

    站立会议 组员 昨天 今天 困难 签到 刘铸辉 (组长) 和楠哥一起学习在日程上添加闹钟闹钟如何实现,并设计了闹钟闹钟添加的界面界面 和楠哥学习了通过AlarmManager 来实现闹钟,由于要用到B ...

  9. 李振杰:火狐Mozilla被黑事件的启发

    火狐浏览器开发商Mozilla近日宣布,因为数据库存在漏洞.Mozilla开发者的数万个电子邮件地址和加密password或遭到黑客窃取. 好多有为青年们往往刚刚获得了一个小成功,便開始沾沾自喜,自命 ...

  10. activiti自己定义流程之Spring整合activiti-modeler实例(六):启动流程

    1.启动流程并分配任务是单个流程的正式開始,因此要使用到runtimeService接口.以及相关的启动流程的方法.我习惯于用流程定义的key启动,由于有多个版本号的流程定义时,用key启动默认会使用 ...