• 虚拟机去混杂模式与 vlan in vxlan 特性


    虚拟机 vlan trunk 特性

     

    1. 功能

    1)允许不同vlan的network下的虚拟机之间通信。一般情况下,虚拟机只能在相同vlan的网络下通信。

    2)允许虚拟机发送vlan报文。

    2. 组网图

    虚拟机出来的tap设备连接到tbr网桥上,此时tap设备不打tag值, vlan_mode = trunk ,trunk port 与 subport 共用一个tap设备。

    tbr网桥与br-int网桥用ovs自身的patch对相连。

    3. 流表转换

    • trunk port场景 , 即虚拟机出来的报文不带vlan信息

      1)untag -> local vlan

      报文从vm1下行经过br-int后,在br-int匹配类似转换流表 “in_port=5,vlan_tci=0x0000 actions=mod_vlan_vid:3”

      2) local vlan -> untag  

      若报文欲从trbxxx网桥上行进入vm2,在trbxxx匹配类似转换流表 “in_port=4,dl_vlan=3 actions=strip_vlan” 

      注:若报文欲从br-phy物理网桥出本主机,则走普通流程,在br-phy将local vlan 转换成 真正用户网络的vlan

    • subport场景, 即虚拟机出来的报文带vlan信息

      3) vm vlan -> local vlan

      报文从vm1下行经过br-int后,在br-int匹配类似转换流表 “in_port=5,dl_vlan=1000 actions=mod_vlan_vid:4”

      4) local vlan -> vm vlan

      若报文欲从trbxxx网桥上行进入vm2,在trbxxx匹配类似转换流表 “in_port=4,dl_vlan=4 actions=mod_vlan_vid:1000”

    4. 代码处理流程

      1) 生成xml文件。后续会根据xml文件挂载tap设备,此处tap设备是挂载到tbr网桥上。

      2) 准备组网环境。

        在创建虚拟机前,nova compute 进行plug动作准备好相关资源,如创建tbr网桥,用patch对连接tbr与br-int网桥。

        然后启动虚拟机,将tap设备挂载到tbr网桥上。

      3) ovs-agent 扫描 tbr网桥上新增的tap设备(trunk port),然后下发相应的流表。

        对于subport,由于无法在tbr网桥上扫描到,只能通过neutron北向接口创建subport时,neutron-server通过rpc消息通知ovs-agent,再下发流表。

    5. 环境相关操作

      neutron port-create $network_id_1 --trunkport:type trunk

      neutron port-create $network_id_2 --trunkport:type subport --trunkport:parent_id $trunkport_id

       (创建subport的net与trunk port的net不是同一个,即vlan不同)

      nova boot --image xxx --flavor 1 --nic port-id=$trunkport_id (必须指定trunkport而不是subport来创建VM)

      vconfig add eth0 100 (在虚拟机中添加vlan 100的子接口)

      dhcpcd -L eth0.100 (在该子接口获取ip)

    1. 去混杂模式

    1.1 背景

    混杂模式(Promiscuous Mode)是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是它。是相对于通常模式(又称“非混杂模式”)而言的。

    这被网络管理员使用来诊断网络问题,但是也被无认证的想偷听网络通信(其可能包括密码和其它敏感的信息)的人利用。

    在云计算openstack背景下,去混杂模式就是要抑制未知单播,只让目的mac是自身的报文或者广播/组播报文才允许进入虚拟机,减少不必要的虚拟机对报文处理所需的性能消耗。

    1.2 未知单播

    未知单播,即设备MAC表中没有该单播帧的目的MAC条目。

    在交换机工作原理中,当交换机起动时,MAC地址表是空的,所以如果此时A主机发送一个帧给主机B,那么当交换机接受此帧的时候,查看源地址(主机A),并将它添加到MAC地址表中,但是交换机并不知道主机B在哪个端口上(MAC地址表中没有主机B的MAC地址),所以这个帧就是 未知单播帧 。交换机会泛洪这个帧。

    1.3 组网图

     

    1.4 流表分析

    混杂模式时,policy网桥流表类似"...actions=normal...",不对流量进行区别,按正常转发即可。

    去混杂模式时,policy网桥会添加以下相关流表:

    priority=2,in_port=2,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,action=normal  //广播、组播报文正常转发
    priority=2,in_port=2,dl_dst=$vm_mac,actions=normal  //对目的地址是VM本身mac的报文则正常转发
    prrority=1,in_port=2,actions=drop  //其他报文就丢弃

    2. vlan in vxlan

    2.1 作用

    虚拟机之间通信的vlan报文能够封装到vxlan中在外部网络中传输,类似于qinq(vlan in vlan)。

    2.2 组网图

     

    2.3 流表分析

    • policy网桥
      • 虚拟机出来的报文

          不带vlan信息的报文,在pkt_mark做下标记后往下送,pkt_mark 信息存储在寄存器中:

    vlan_tci = 0x0000/0x1ffff actions=load:1 -> NXM_NX_PKT_MARK[31..31], normal

          带vlan的报文,将vlan信息(共12bit)保存在pkt_mark后往下送:

    actions = move:OXM_OF_VLAN_VID[0..11] -> NXM_NX_PKT_MARK[0..11], load: 0-> NXM_NX_PKT_MARK[31..31], strip_vlan, normal
      • 进入虚拟机的报文

          pkt_mark为0x1的报文,直接送往虚拟机:

    pkt_mark = 0x00000001 actions = normal

          pkt_mark不为0x1的报文,从pkt_mark获取到vlan信息后送往虚拟机:

    actions = move:NXM_NX_PKT_MARK[0..11] -> OXM_OF_VLAN_VID[0..11], normal
    • br-tun网桥
      • 虚拟机出来的报文

          pkt_mark为0x1的报文,按正常流程直接走table 20/22 :

    pkt_mark = 0x00000001, actions = resubmit(,20) / (,22)

          pkt_mark不为0x1的报文,获取并设置vlan信息,设置vni后走vxlan隧道出主机:

    actions = move:NXM_NX_PKT_MARK[0..11] -> OXM_OF_VLAN_VID[0..11], set_tunnel:0x1388, output:3
      • 进入虚拟机的报文

          报文不带vlan信息时,设置pkt_mark标志后,按照正常流程走table 10:

    vlan_tci = 0x0000/0x1fff, tunnel_id = 0x1388, actions = load:1 -> NXM_NX_PKT_MARK[31..31], resubmit(, 10)

          报文带vlan信息时,保存vlan信息到pkt_mark中,并将vxlan的vni修改为local vlan

    tun_id = 0x1388, actions = move: OXM_OF_VLAN_VID[0..11] -> NXM_NX_PKT_MARK[0..11], load: 0->NXM_NX_PKT_MARK[31..31], mod_vlan_vid:1, resubmit(, 10)

  • 相关阅读:
    1.2 偏差与方差
    深度学习中Xavier初始化
    1.1 训练/开发/测试集
    Python笔记(5)类__方法与继承
    Python笔记(4)类__属性与描述符
    Python笔记(3)迭代器与生成器
    Python笔记(2)函数
    线性回归 Linear Regression
    Python笔记(1)变量与表达式
    跳转到某个Activity
  • 原文地址:https://www.cnblogs.com/allcloud/p/5587337.html
Copyright © 2020-2023  润新知