zoukankan      html  css  js  c++  java
  • OVS搭建GRE隧道和VXLAN

    GRE隧道

      GRE隧道是通过GRE协议对数据报进行封装,然后在两个仅支持点对点的虚拟接口上建立通路,进行传输数据。

    配置GRE隧道

      所实验网络拓扑图如下:
     

    配置IP(以host1为例):

    ifconfig eth0 10.0.10.10/24 (host1
    ifconfig eth0 10.10.10.10/24  (host2
     

    创建网桥

    ovs-vsctl add-br br0 (不要为br0添加物理端口,根据网络拓扑图网桥是不与物理网卡相连的。
    为VM添加端口(需要先启动VM再添加端口
     
    ovs-vsctl add-port br0 tap0  -- set interface tap0 type=internal
    ovs-vsctl add-port br0 tap1  -- set interface tap1 type=internal
     
    添加虚拟端口并打通GRE隧道
    ovs-vsctl add-port br0 gre0  -- set interface gre0 type=gre options:remote_ip=10.10.10.10  (IP of eth0 on host2,这个ip其实就是图1新IP头中的IP)
     
    host2的配置基本相同。唯一注意的是remote_ip写的是host1的ip。
     
     

    VXLAN

    VXLAN报文结构:

    • VXLAN头封装 
        Flags:8比特,取值为00001000。 
        VNI:VXLAN网络标识,24比特,用于区分VXLAN段。 
        Reserved:24比特和8比特,必须设置为0。
    • 外层UDP头封装 
        目的UDP端口号是4789。源端口号是内层以太报文头通过哈希算法计算后的值。
    • 外层IP头封装 
        源IP地址为发送报文的虚拟机所属VTEP的IP地址;目的IP地址是目的虚拟机所属 
    VTEP的IP地址。
    • 外层Ethernet头封装 
        SA:发送报文的虚拟机所属VTEP的MAC地址。 
        DA:目的虚拟机所属VTEP上路由表中直连的下一跳MAC地址。 
        VLAN Type:可选字段,当报文中携带VLAN Tag时,该字段取值为0x8100。 
        Ethernet Type:以太报文类型,IP协议报文该字段取值为0x0800。

    实验拓扑:

    vxlan的配置  

      其实vxlan的配置和GRE的配置大致相同。只有最后一步有些不同。

      ovs-vsctl add-port br0 vxlan0  -- set interface vxlan0 type=vxlan options:remote_ip=172.168.1.2 options:key=100 (VTEP的IP地址在OuterIP头中,这里对于host1的VTEP是eth1,key为VNI相同的vxlan段之间可以通信)
      host2的配置是一样的。

    VLAN+VXLAN实现VM之间的流量控制

    只要在vxlan配置后在为虚拟机添加tag标识即可。
     
    ovs-vsctl set port tag0 tag=100
    ovs-vsctl set port tag1 tag=200
     
    host2的配置也是一样,打上tag。
     
    相同tag在不同宿主机上的vm就会通过VXLAN进行通信。

    vxlan中限制VM之间的流量

    每一个虚拟机连通一个网桥,在每个网桥之间打通隧道。
    之前的配置步骤基本相同。按照拓扑图配置即可。
    拓扑图如下:

    最后打通多条隧道实现VM流量限制

    host1:

    ovs-vsctl add-port br0 vxlan0 -- set interface vxlan0  type=vxlan options: remote_ip =10.0.10.10 options:key=100
    ovs-vsctl add-port br1 vxlan1 -- set interface vxlan1  type=vxlan options: remote_ip =10.0.10.10 options:key=200

    host2:

    ovs-vsctl add-port br3 vxlan0 -- set interface vxlan0  type=vxlan options: remote_ip = 10.10.10.10 options:key=100
    ovs-vsctl add-port br4 vxlan1 -- set interface vxlan1  type=vxlan options: remote_ip = 10.10.10.10 options:key=200
    在同一个VNI段的VM可以通过VXLAN隧道通信。

    实验过程中出现的问题

      实验过程中,执行完正确的配置流程后,两台不同host上的虚拟机仍然不能通信,其原因是交换机中已经有vlan协议使得vxlan失效,对两台宿主机的网线直连解决了上述问题。

      openstack下mtu问题只针对vxlan、gre网络。

      vxlan、gre mtu计算:

      vxlan mtu = 1450 = 1500 – 20(ip头) – 8(udp头) – 8(vxlan头) – 14(以太网头)
      gre mtu = 1462 = 1500 – 20(ip头) – 4(gre头) – 14(以太网头)

      如果mtu大于这个值的话,会导致openvswitch传输分片。

  • 相关阅读:
    B-Tree(B树)原理及C++代码实现
    Select(快速选择顺序统计量)原理及C++代码实现
    BucketSort(桶排序)原理及C++代码实现
    RadixSort(基数排序)原理及C++代码实现
    CountingSort(计数排序)原理及C++代码实现
    面向对象之封装
    今日算法题
    面向对象之抽象类和接口
    面向对象之多态
    今日算法题
  • 原文地址:https://www.cnblogs.com/sometingintheway/p/9450515.html
Copyright © 2011-2022 走看看