一、介紹
通過VXLAN的封裝我們知道,若想指導VXLAN的轉發,VTEP節點需要解決三元組問題,這個三元組是:
內部 MAC 、 VNI 、 VTEP IP
原有的VXLAN實現方案沒有控制平面,是通過數據平面的流量泛洪進行VTEP發現和主機信息(包括IP地址、MAC地址、VNI、網關VTEP IP地址)學習的,這種方式導致數據中心網絡存在很多泛洪流量。為了解決這一問題,VXLAN引入了EVPN作為控制平面,通過在VTEP之間交換BGP EVPN路由實現VTEP的自動發現、主機信息相互通告等特性,從而避免了不必要的數據流量泛洪。
EVPN通過擴展BGP協議新定義了幾種BGP EVPN路由,這些BGP EVPN路由可以用於傳遞VTEP地址和主機信息,因此EVPN應用於VXLAN網絡中,可以使VTEP發現和主機信息學習從數據平面轉移到控制平面。
二、BGP EVPN路由
為了解決上述問題,BGP EVPN在BGP協議的基礎上定義了一種新的NLRI(Network Layer Reachability Information,網絡層可達信息)即EVPN NLRI,EVPN NLRI定義了幾種新的BGP EVPN路由類型,用於處在二層網絡的不同站點之間的MAC地址學習和發布。
- Ethernet Auto-discovery Route(RT-1):用來在站點多歸屬組網中通告ES信息,以便實現水平分割、Aliasing和主備備份等特性。
- MAC/IP Advertisement Route(RT-2):用來通告MAC/IP地址信息。
該類型的路由報文格式如下:
各字段解釋如下:
該類型路由在VXLAN控制平面中的作用包括:
對於IPV4:
1. 主機MAC地址通告
2. 主機ARP通告
3. 主機IP路由通告
對於IPv6:
1. ND表項擴散
2. 主機IPv6路由通告
3. Inclusive Multicast Ethernet Tag Route(RT-3):用來通告VTEP及其所屬VXLAN,以實現VTEP自動發現、自動建立VXLAN隧道、自動創建VXLAN廣播表等。
4. Ethernet Segment Route(RT-4):用來通告ES及其連接的VTEP信息,以便發現連接同一ES的VTEP冗余組其他成員,以及在冗余組之間選舉指定轉發器DF等。
5. IP Prefix Advertisement Route(RT-5):IP前綴路由,用來以IP前綴的形式通告引入的外部路由。
三、解決VXLAN的問題
VTEP節點需要解決三元組問題,這個三元組是:
內部 MAC 、 VNI 、 VTEP IP
1. VTEP IP和VNI
VXLAN是一種”MAC in UDP”技術, 是在IP網絡基礎之上構建的一種Overlay架構。在IP網絡上傳輸時,RFC定義了幾種組播技術,例如Ingress Replication、RSVP-TE P2MP LSP、mLDP P2MP、PIM-SSM、PIM-SM、BIDIR-PIM等。 目前EVPN使用的是Ingress Replication,即頭端復制。所謂頭端復制,就是在VXLAN轉發實體里面存在一個需要復制到的遠端PE設備隧道列表,此列表叫做BUM廣播表。BUM廣播表的建立是依靠EVPN的第3類路由,即集成多播路由建立的。此路由也用於VTEP站點的自動發現。
看一下第三類路由的格式:
從上面路由參數可以看到,第三類路由主要包含RD、VTEP地址、二層VNI。
二層VXLAN廣播域建立過程:
每個站點都通過三類路由通告自己的VTEP地址和VNI信息,如果對端VTEP IP地址是三層路由可達的,則建立一條到對端的VXLAN隧道。同時,如果對端VNI與本端相同,則創建一個頭端復制表,用於后續BUM報文轉發。
2. MAC地址學習
EVPN在控制面學習MAC和ARP。在EVPN里面,站點的MAC和ARP信息是通過EVPN的MAC/IP路由通告的,即Route Type 2。因此,在EVPN網絡里面,不需要將ARP請求泛洪到網絡中。
二類路由主要傳遞的信息包括RD、主機MAC、主機IP、二層VNI和三層VNI。
本地的MAC和ARP是通過傳統的方式學習到的,EVPN控制面將本地的IP、MAC和VNI信息通過BGP鄰居分發到其他VTEP設備。為了抑制ARP廣播,VTEP節點在通告MAC的同時會選擇攜帶IP,這樣,可以讓對端VTEP學習到本端VTEP下掛的主機ARP,從而使得遠端VTEP可以直接代答回應遠端主機發起的ARP請求。
ARP廣播抑制。當三層網關學習到其子網下的主機ARP時,生成主機信息(包含主機IP地址、主機MAC地址、二層VNI、網關VTEP IP地址),然后通過傳遞ARP類型路由將主機信息同步到二層網關上。這樣當二層網關再收到ARP請求時,先查找是否存在目的IP地址對應的主機信息,如果存在,則直接將ARP請求報文中的廣播MAC地址替換為目的單播MAC地址,實現廣播變單播,達到ARP廣播抑制的目的。
在集中式網關里面,二層VTEP需要將學習到的ARP通告給網關,在GW上需要下發ARP,並產生32位直連路由。此路由的下一跳就是路由本身。ARP里的MAC為主機或虛機的真實MAC。從GW往VTEP的報文轉發時,在VTEP上做二層MAC轉發。
而在分布式網關里,每一個分布式網關都會將學習到的ARP通告給其他網關。在遠端VTEP上,2類路由里面的IP會下發到VRF表形成32位主機路由,此路由的下一跳為通告此路由的VTEP設備。報文轉發時,從網關發出的報文內層MAC為對端VTEP設備的MAC,因此報文在對端VTEP上做三層轉發。
這樣VXLAN內部通信需要的三元組信息就都解決了,接下來需要解決外部路由問題,我們通過VXLAN建立了一個私有的VXLAN網絡,那么怎么跟外部網絡通信呢。
3. 外部網絡通信
EVPN網絡構建的是一個私有網絡,它也可以通過接入外網,實現跟外網通信的目的。通常在EVPN的Spine-Leaf架構中,會有1台或多台專門接入外網的設備,我們把它叫做Board Leaf。Board Leaf通過普通接口跟外網建立普通路由協議,學習路由,然后在Board Leaf上EVPN可以引入這些外部路由,形成EVPN 5類路由,進而通告到EVPN網絡中,使其他VTEP也能學到這些外部路由。這些路由的下一跳均指向通告此路由的Board Leaf。當網絡中存在多台Board Leaf時,多台Board Leaf都可以通告此路由,這樣在遠端還可以形成等價路由,以達到網絡負載分擔的目的。
以下是5類路由的字段格式:
可以看到5類路由主要包含RD、IP前綴和三層VNI。
4. 其他
ARP廣播抑制:
當三層網關學習到其子網下的主機ARP時,生成主機信息(包含主機IP地址、主機MAC地址、二層VNI、網關VTEP IP地址),然后通過傳遞ARP類型路由將主機信息同步到二層網關上。這樣當二層網關再收到ARP請求時,先查找是否存在目的IP地址對應的主機信息,如果存在,則直接將ARP請求報文中的廣播MAC地址替換為目的單播MAC地址,實現廣播變單播,達到ARP廣播抑制的目的。
不管是集中式網關還是分布式網關,都是三層網關學習學習到其子網現的arp信息,然后通過EVPN傳遞給其他二層網關,當二層網關收到arp請求的時候,將目的mac的全F替換為真實主機的mac地址,然后轉發到對應的vtep節點,vtep再接封裝到目的主機,目的主機收到該arp請求之后,進行應答。
若二層網關上不存在該目的IP對應的MAC地址,則執行頭端復制,將按照BUM頭端復制表,對該arp報文進行vxlan封裝,然后轉發到對應的vtep節點,vtep節點收到之后進行解封裝,發現目的mac是全F,則在其子網內的非vxlan接口泛洪。
BUM可以使用頭端復制、集中復制和組播復制來進行轉發。
頭端復制:在發送方vtep上將BUM報文進行復制封裝到vxlan,然后轉發到對應子網的其他vtep節點。
集中復制:網絡中有一個集中復制點,發送方vtep先將BUM報文發送給集中復制點,由集中復制點來進行復制,集中復制點在復制的時候不改變外層源IP,該報文的外層源IP仍是發送方的vtep地址。接收方vtep收到之后,可以學習或更新他的mac表(mac和vtep的對應)。
組播復制:同一個VNI的所有VTEP都加入同一個組播組,利用組播路由協議(如PIM)為該組播組建立組播轉發表項,當源端VTEP收到BUM報文后,為該BUM報文封裝組播目的IP地址(例如225.0.0.1),封裝后的報文根據已建立的組播轉發表項轉發到遠端VTEP,從而減少流量洪泛。最后遠端VTEP再對VXLAN報文解封裝。
虛擬機遷移:
MAC地址遷移是指虛擬機或主機從其介入的VTEP或網關設備遷到數據中心網絡的另一台VTEP或網關下。新遷移到的VTEP或網關會重新感知到主機/虛擬機上線,會重新通告該MAC/IP路由,此路由跟遷移前通告的MAC/IP路由的區別在於在BGP update消息中攜帶了一種新的擴展團體:MAC Mobility擴展團體。此擴展團體里面包含一個系列號。每次遷移,遷移序列號將遞增,遠端在收到一個比自己系列號更大的消息時,更新自己的MAC/IP路由消息,下一跳指向遷移后通告此路由的VTEP或GW。原VTEP在收到此路由更新后,撤銷之前通告的路由。
二層VNI和三層VNI:
二層VNI是用來標識報文屬於哪一個BD,相當於vlan id。
三層VNI用來標識報文屬於哪一個VRF,相當於租戶。