VXLAN 典型場景:靜態方式部署 VXLAN 集中式網關
今天分享VXLAN相關知識。

一、VXLAN靜態部署介紹
在靜態方式部署集中式網關的場景中,控制平面的流程包括VXLAN隧道建立、MAC地址動態學習;轉發平面的流程包括同子網已知單播報文轉發、同子網BUM報文轉發、跨子網報文轉發。
靜態方式部署集中式網關,手工配置工作量大,靈活性較差,不適合大規模的組網場景,如果在VXLAN網絡中采用集中式網關,推薦使用BGP EVPN方式部署集中式網關。
下面以IPv4 over IPv4為例進行詳細描述,其他Underlay網絡和Overlay網絡組合相對于IPv4 over IPv4的實現差異如表1所示。
其他Underlay網絡和Overlay網絡組合的實現差異:
組合類別 | 實現差異 |
IPv6 over IPv4 | 在MAC地址動態學習過程中,二層網關通過主機發送的NS(Neighbor Solicitation)報文學習主機MAC地址。 在跨子網互通的場景中,三層網關的VBDIF接口需配置IPv6地址,在跨子網報文轉發時,三層網關需查找IPv6路由表,找到目的IPv6地址的下一跳地址,再根據下一跳地址查找ND表,獲取目的MAC等信息。 |
IPv4 over IPv6 | VXLAN隧道的兩端VTEP采用IPv6地址,且VTEP之間需要IPv6三層路由互通。 在轉發同子網BUM報文時,只支持頭端復制方式。 |
IPv6 over IPv6 | VXLAN隧道的兩端VTEP采用IPv6地址,且VTEP之間需要IPv6三層路由互通。 在MAC地址動態學習過程中,二層網關通過主機發送的NS報文學習主機MAC地址。 在轉發同子網BUM報文時,只支持頭端復制方式。 在跨子網互通的場景中,三層網關的VBDIF接口需配置IPv6地址,在跨子網報文轉發時,三層網關需查找IPv6路由表,找到目的IPv6地址的下一跳地址,再根據下一跳地址查找ND表,獲取目的MAC等信息。 |
表1
二、VXLAN隧道建立
VXLAN隧道由一對VTEP IP地址確定,靜態VXLAN隧道的創建完全通過手工配置本端和遠端的VNI、VTEP IP地址和頭端復制列表來完成,只要VXLAN隧道的兩端VTEP IP是三層路由可達的,VXLAN隧道就可以建立成功。
如圖1所示,Leaf1上部署了Host1和Host3,Leaf2上部署了Host2,Spine上部署三層網關。
- 為了實現Host3和Host2之間的通信,需要分別在Leaf1和Leaf2上手動配置二層VNI,并在配置頭端復制列表時指定對端VTEP IP地址。只要Leaf1和Leaf2上存在到對端VTEP IP地址的三層路由,就可以建立到對端的VXLAN隧道。
- 為了實現Host1和Host2之間的通信,需要分別在Leaf1和Spine、Spine和Leaf2上手動配置二層VNI,并在配置頭端復制列表時指定對端VTEP IP地址。只要Leaf1和Spine上存在到對端VTEP IP地址的三層路由,就可以建立到對端的VXLAN隧道;同樣的,只要Spine和Leaf2上存在到對端VTEP IP地址的三層路由,就可以建立到對端的VXLAN隧道。
說明:對于Host1和Host3之間的通信,雖然都屬于Leaf1,但由于屬于不同子網,需要經過三層網關Spine,因此也需要在Leaf1和Spine之間創建VXLAN隧道。

圖1 VXLAN隧道示意圖
三、MAC地址動態學習
在VXLAN網絡中,為了實現終端租戶的互通,支持MAC地址動態學習,不需要網絡管理員手工維護,大大減少了維護工作量。下面結合圖2,詳細介紹一下同子網主機互通時,MAC地址動態學習的過程:

圖2 MAC地址動態學習
Host3發送源MAC為MAC3、目的MAC為全F、源IP為IP3、目的IP為IP2的ARP請求報文,請求Host2的MAC地址。
Leaf1收到該ARP請求后,根據二層子接口上的配置判斷該請求報文需進入VXLAN隧道,并確定報文所對應的VNI(20)。同時Leaf1學習到了Host3的MAC地址、BDID(二層廣播域標識)和報文入接口(即二層子接口對應的物理接口Port1)的對應關系,并在本地MAC表中生成Host3的MAC表項,其出接口為Port1。
Leaf1對該ARP請求報文進行VXLAN封裝,如圖3所示,封裝的VNI是綁定當前BD的VNI,封裝的外層源IP地址為Leaf1的VTEP IP地址,外層目的IP地址為Leaf2的VTEP IP地址,外層源MAC地址為Leaf1的NVE1接口MAC地址,外層目的MAC地址為去往目的IP的網絡下一跳的MAC地址。封裝后的報文根據外層MAC和IP信息在IP網絡中傳輸,送達Leaf2。

圖3 VXLAN報文
Leaf2收到報文后進行解封裝,得到Host3發送的原始ARP請求報文,同時Leaf2學習到Host3的MAC地址、BDID和Leaf1上VTEP IP地址的對應關系,并在本地的MAC表中生成Host3的MAC表項,其出接口需根據下一跳(即Leaf1的VTEP IP地址)進行迭代,最終迭代結果是指向Leaf1的VXLAN隧道。
Leaf2在對應的二層域內廣播ARP請求。Host2收到ARP請求后,比較報文中的目的IP是否為本機的IP地址,如果是,則將Host3的MAC地址保存到本地的MAC表中,并進行ARP應答。
由于此時Host2已經學習到了Host3的MAC地址,所以ARP應答報文為單播報文,后續的ARP應答報文發送過程與上述過程類似,這里不再贅述。Host3和Host2互相學習到對方的MAC地址之后,雙方將采用單播通信。
說明:在跨子網主機互通時,只需在主機和三層網關之間進行MAC地址動態學習,與上述過程相同。
四、同子網已知單播報文轉發
同子網已知單播報文轉發只在VXLAN二層網關之間進行,三層網關無需感知。報文轉發流程如圖4所示。

圖4 同子網已知單播報文轉發示意圖
Leaf1收到來自Host3的報文,根據報文中接入的端口和VLAN信息獲取對應的二層廣播域,并在該二層廣播域內查找出接口和封裝信息。
Leaf1上VTEP根據查找到的封裝信息對數據報文進行VXLAN封裝,然后根據查找到的出接口進行報文轉發。
Leaf2上VTEP收到VXLAN報文后,根據UDP目的端口號、源/目的IP地址、VNI判斷VXLAN報文的合法有效性。然后依據VNI獲取對應的二層廣播域,進行VXLAN解封裝,獲取內層的二層報文。
Leaf2根據內層二層報文的目的MAC,從本地MAC表找到對應的出接口和封裝信息,為報文添加VLAN Tag,轉發給對應的主機Host2。
Host2向Host3發送報文的過程類似,這里不再贅述。
五、同子網BUM報文轉發
同子網BUM報文轉發只在VXLAN二層網關之間進行,三層網關無需感知。同子網BUM報文轉發可以采用頭端復制方式、集中復制方式和組播復制方式。
1. 頭端復制
頭端復制是指,當BUM報文進入VXLAN隧道時,接入端VTEP根據頭端復制列表進行報文的VXLAN封裝,并將報文發送給頭端復制列表中的所有出端口VTEP。BUM報文出VXLAN隧道時,出口端VTEP對報文解封裝。BUM報文采用頭端復制的轉發流程如圖5所示。

圖5 同子網BUM報文采用頭端復制轉發示意圖
(1) Leaf1收到來自終端A的報文,根據報文中接入的端口和VLAN信息獲取對應的二層廣播域。
(2) Leaf1上VTEP根據對應的二層廣播域獲取對應VNI的頭端復制隧道列表,依據獲取的隧道列表進行報文復制,并進行VXLAN封裝。然后將封裝后的報文從出接口轉發出去。
(3) Leaf2/Leaf3上VTEP收到VXLAN報文后,根據UDP目的端口號、源/目的IP地址、VNI判斷VXLAN報文的合法有效性。然后依據VNI獲取對應的二層廣播域,進行VXLAN解封裝,獲取內層二層報文。
(4) Leaf2/Leaf3檢查內層二層報文的目的MAC,發現是BUM MAC,在對應的二層廣播域內的非VXLAN隧道側進行廣播處理,即:Leaf2/Leaf3分別從本地MAC表中找到非VXLAN隧道側的所有出接口和封裝信息,為報文添加VLAN Tag,轉發給對應的終端B/C。
2. 集中復制
當BUM報文進入VXLAN隧道時,如果接入端VTEP采用頭端復制方式進行報文的VXLAN封裝。此時接入端VTEP需要往每一個遠端VTEP發送一份報文,造成流量泛洪。此時可以配置集中復制。集中復制是指,在接入端VTEP上配置集中復制功能,在集中復制點上配置泛洪代理IP地址,當接入端VTEP封裝報文進VXLAN隧道時,只需要發送一份報文到集中復制點,可以減少網絡中的泛洪流量,所以集中復制點也可以稱為泛洪網關,之后集中復制點進行VXLAN報文的解封裝和封裝,發送報文到各個出口端VTEP。出口端VTEP對報文再次解封裝出VXLAN隧道。BUM報文采用集中復制的轉發流程如圖6所示。
說明:集中復制優先級高于頭端復制,即如果一臺設備通過vni flood-vtep命令配置了集中復制方式的VXLAN隧道,同時也通過vni head-end peer-list命令配置了頭端復制方式的VXLAN隧道,則VXLAN隧道采取集中復制方式。

圖6 同子網BUM報文采用集中復制轉發示意圖
(1) Leaf1收到來自終端A的報文,根據報文中接入的端口和VLAN信息獲取對應的二層廣播域。
(2) Leaf1上VTEP根據對應的二層廣播域獲取對應VNI的對應的集中復制隧道,并進行VXLAN封裝。然后將封裝后的報文從出接口轉發出去。
(3) Leaf4作為集中復制節點接收到VXLAN報文后,根據UDP目的端口號、源/目的IP地址、VNI判斷VXLAN報文的合法有效性。然后依據VNI獲取對應的二層廣播域,進行VXLAN解封裝,獲取內層二層報文,再根據二層廣播域對應VNI的頭端復制列表進行VXLAN封裝,此時外層的源IP地址為leaf1的VTEP地址,不會影響VTEP間的MAC地址學習。
(4) Leaf2/Leaf3上VTEP收到VXLAN報文后,根據UDP目的端口號、源/目的IP地址、VNI判斷VXLAN報文的合法有效性。然后依據VNI獲取對應的二層廣播域,進行VXLAN解封裝,獲取內層二層報文。
(5) Leaf2/Leaf3檢查內層二層報文的目的MAC,發現是BUM MAC,在對應的二層廣播域內的非VXLAN隧道側進行廣播處理,即:Leaf2/Leaf3分別從本地MAC表中找到非VXLAN隧道側的所有出接口和封裝信息,為報文添加VLAN Tag,轉發給對應的終端B/C。
3. 組播復制
為了減少BUM報文采用頭端復制方式引起的流量洪泛,還可以配置組播復制。組播復制是指,同一個VNI的所有VTEP都加入同一個組播組,利用組播路由協議(如PIM)為該組播組建立組播轉發表項,當源端VTEP收到BUM報文后,為該BUM報文封裝組播目的IP地址(例如225.0.0.1),封裝后的報文根據已建立的組播轉發表項轉發到遠端VTEP,從而減少流量洪泛。最后遠端VTEP再對VXLAN報文解封裝。BUM報文采用組播復制的轉發流程如圖7所示。

圖7 同子網BUM報文采用組播復制轉發示意圖
(1) Leaf1收到來自終端A的報文,根據報文中接入的端口和VLAN信息獲取對應的二層廣播域。
(2) Leaf1上VTEP根據對應的二層廣播域獲取對應VNI的組播復制地址,并進行VXLAN封裝。封裝后的VXLAN報文對外表現為一個組播報文,然后根據組播轉發表項發送給Leaf4。
(3) Leaf4接收到組播報文后,直接根據組播轉發表項,將報文轉發給Leaf2和Leaf3。說明:這里Leaf4作為非網關節點,只進行組播報文的轉發。Leaf4也可以配置為網關節點,這樣Leaf4既要轉發組播報文,又要解封裝VXLAN報文,并在VLAN網絡廣播BUM報文,此時Leaf4節點稱為BUD節點。
(4) Leaf2/Leaf3收到組播報文后,根據組播轉發表項中的出接口(NVE接口)判斷該報文是VXLAN報文,此時Leaf2/Leaf3上的VTEP根據UDP目的端口號、源/目的IP地址、VNI判斷VXLAN報文的合法有效性。然后依據VNI獲取對應的二層廣播域,進行VXLAN解封裝,獲取內層二層報文。
(5) Leaf2/Leaf3檢查內層二層報文的目的MAC,發現是BUM MAC,在對應的二層廣播域內的非VXLAN隧道側進行廣播處理,即:Leaf2/Leaf3分別從本地MAC表中找到非VXLAN隧道側的所有出接口和封裝信息,為報文添加VLAN Tag,轉發給對應的終端B/C。
說明:配置了組播復制方式或集中復制方式后,此時頭端復制列表主要用來生成遠端VTEP地址列表,以便創建VXLAN隧道。但是BUM報文不再采用頭端復制方式,而是采用組播復制方式或集中復制方式。
六、跨子網報文轉發
跨子網報文轉發需要通過三層網關實現。在集中式網關場景中,跨子網報文轉發的流程如圖8所示。

圖8 跨子網報文轉發示意圖
(1) Leaf1收到來自Host1的報文,根據報文中接入的端口和VLAN信息獲取對應的二層廣播域,在對應的二層廣播域內查找出接口和封裝信息。
(2) Leaf1上VTEP根據查找到的出接口和封裝信息進行VXLAN封裝,向Spine轉發報文。
(3) Spine收到VXLAN報文后進行解封裝,發現內層報文中的目的MAC是三層網關接口VBDIF10的MAC地址MAC3,判斷需要進行三層轉發。
(4) Spine剝除內層報文的以太封裝,解析目的IP。根據目的IP查找路由表,找到目的IP的下一跳地址,再根據下一跳地址查找ARP表項,獲取目的MAC、VXLAN隧道出接口及VNI等信息。
(5) Spine重新封裝VXLAN報文,向Leaf2轉發。其中內層報文以太頭中的源MAC是三層網關接口VBDIF20的MAC地址MAC4。
(6) Leaf2上VTEP收到VXLAN報文后,根據UDP目的端口號、源/目的IP地址、VNI判斷VXLAN報文的合法有效性。依據VNI獲取對應的二層廣播域,然后進行VXLAN解封裝,獲取內層二層報文,并在對應的二層廣播域內查找出接口和封裝信息。
(7) Leaf2根據查找到的出接口和封裝信息,為報文添加VLAN Tag,轉發給對應的Host2。
Host2向Host1發送報文的過程類似,這里不再贅述。























