虛擬機去混雜模式與 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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM