高振宇
【摘要】? ? 虛擬網(wǎng)絡(luò)在很多企業(yè)中有大量應(yīng)用,但是如何更好地監(jiān)控虛擬網(wǎng)絡(luò)的流量數(shù)據(jù)成為了重要的研究方向。本文基于Geneve協(xié)議設(shè)計一種適合在overlay虛擬網(wǎng)絡(luò)中傳遞鏡像報文數(shù)據(jù)的協(xié)議。能很好解決在虛擬網(wǎng)絡(luò)中鏡像報文的傳輸問題。同時文章展示了如何基于OVS實現(xiàn)這種協(xié)議。
【關(guān)鍵詞】? ? 虛擬網(wǎng)絡(luò)? ? Geneve? ? 鏡像報文
引言:
虛擬網(wǎng)絡(luò)[1]這幾年正在經(jīng)歷高速發(fā)展,越來越多的企業(yè)在自己的數(shù)據(jù)中心開始部署虛擬網(wǎng)絡(luò)。與此同時,虛擬網(wǎng)絡(luò)配合Kubernetes、容器、虛擬機等虛擬化技術(shù)能快速幫助企業(yè)動態(tài)擴展服務(wù),虛擬網(wǎng)絡(luò)則在這之中扮演著極為重要的角色。目前業(yè)界中實際落地的虛擬網(wǎng)絡(luò)一般都是通過overlay網(wǎng)絡(luò)協(xié)議來構(gòu)建,例如被廣泛使用的Geneve[2],VXLAN[3],STT[4]等協(xié)議。
Overlay網(wǎng)絡(luò)構(gòu)建于underlay物理網(wǎng)絡(luò)之上,這使得overlay虛擬網(wǎng)絡(luò)具有很好的擴展性,并能在很大程度上屏蔽underlay物理網(wǎng)絡(luò)的變化帶來的諸多影響。但是同時這也使得傳統(tǒng)的underlay物理網(wǎng)絡(luò)的很多技術(shù)難以去探測和監(jiān)控overlay虛擬網(wǎng)絡(luò),給網(wǎng)絡(luò)安全帶來了新的挑戰(zhàn)。
鏡像某些重要域機器的網(wǎng)絡(luò)報文后用各種分析器來監(jiān)控和分析來往流量是否有異常是傳統(tǒng)物理網(wǎng)絡(luò)中常用的一種主動防御的信息安全手段,目前用來傳輸鏡像報文到遠端分析器的協(xié)議主要有思科提出的ERSPAN[5],但是它主要應(yīng)用在underlay物理網(wǎng)絡(luò),鏡像的流量數(shù)據(jù)只能傳遞給處在underlay網(wǎng)絡(luò)中三層互通的網(wǎng)絡(luò)設(shè)備。這種方式的弊端在于流量分析設(shè)備性能必須非常強大才能實時處理傳遞過來的巨大流量數(shù)據(jù),硬件成本投入大,并且這種方式不易于擴展,一旦我們想監(jiān)控更多機器流量時候就會發(fā)現(xiàn)收集端的網(wǎng)絡(luò)成為了瓶頸,因此ERSPAN這種協(xié)議已經(jīng)很難適合虛擬網(wǎng)絡(luò)和當前業(yè)務(wù)多變的需求。
本文提出了一種基于Geneve用于鏡像網(wǎng)絡(luò)報文的協(xié)議來解決這個困難,協(xié)議用于將虛擬網(wǎng)絡(luò)上需要監(jiān)控的報文傳遞到同處于虛擬網(wǎng)絡(luò)遠端處理。最后文章展示了如何使用OVS[6]來實現(xiàn)用這種協(xié)議來傳輸鏡像報文。
一、協(xié)議的設(shè)計
Overlay虛擬網(wǎng)絡(luò)協(xié)議被廣泛使用的主要有Geneve,VXLAN,STT等,其中Geneve和VXLAN協(xié)議都是基于UDP協(xié)議實現(xiàn)的,相對基于TCP實現(xiàn)的STT有更好的穿透性。VXLAN的協(xié)議的報頭大小是固定的,只能攜帶非常少量的信息。而Geneve更像VXLAN的升級版,它解決了VXLAN協(xié)議報文中難以擴展和難以攜帶metadata的問題。Geneve協(xié)議報文的option域可以很方便地被用來進行各種擴展以攜帶更多的信息,從而實現(xiàn)更多更復(fù)雜的功能。我們基于Geneve的option域設(shè)計了GRM(Geneve base Remote Mirroring),GRM專門用于在虛擬網(wǎng)絡(luò)中傳遞鏡像流量到同樣處在虛擬網(wǎng)絡(luò)中的收集分析程序中。這樣我們就能充分利用虛擬網(wǎng)絡(luò)的優(yōu)勢以及各種虛擬化技術(shù)來實時動態(tài)擴縮容用于收集和分析實例,以前鏡像流量必須發(fā)到指定的物理設(shè)備中,使用GRM后就可以動態(tài)分流到實時擴容的收集端,通過分布式處理的方式來解決集中式處理能力的不足問題,這樣就不用擔心由于單個物理硬件性能不足導(dǎo)致出現(xiàn)收集和分析的瓶頸問題。
1.1 Geneve協(xié)議報文頭部的option域
Geneve協(xié)議的報文相對VXLAN有更強的擴展性,如圖1所示,一個Geneve報文可以包含多個可變成長度的option。option的作用就是用來讓用戶自己定制,存入各類需要的信息,通過option域可以插入我們想要傳遞給接收端的各類描述報文的metadata信息。
圖2展示了Geneve采用了常見的TLV(Type-Length-Value)方式來描述option基本信息,每個option中都有對應(yīng)的class和type。Class和type用于唯一區(qū)分option的標識。Length則描述了該option占用的長度。Option的data域則填入我們希望攜帶的信息。每個option可以攜帶4到128byte的數(shù)據(jù)。
1.2 GRM協(xié)議的設(shè)計
GRM就是利用Geneve的可變長度option域來實現(xiàn)的。我們把option的data域的空間拆分成多個域,放入GRM描述信息、描述鏡像報文信息以及如何轉(zhuǎn)發(fā)的信息。因為GRM本身是基于Geneve,天然就可以利用Geneve在虛擬網(wǎng)絡(luò)中傳遞數(shù)據(jù),而GRM攜帶的信息則在underlay物理網(wǎng)絡(luò)目的端的VTEP中解析出來,而后就可以根據(jù)GRM來二次轉(zhuǎn)發(fā)鏡像報文到指定接收端中。
圖3展示了GRM協(xié)議具體的結(jié)構(gòu),VER(Version)域占用2個bit空間用于存儲GRM的版本信息,VER域用于后續(xù)協(xié)議版本的升級區(qū)別,目前值設(shè)為0,表示GRM的第一個版本。Mirror-ID占用14bit空間用于給接收端區(qū)分收到的不同的鏡像數(shù)據(jù)流,該值可以人為分配,針對每個鏡像流分配一個唯一值。VLAN-ID是Geneve的payload中攜帶的鏡像報文的VLAN-ID,收集端接收到GRM報文后可以直接使用VLAN-ID這個重要信息,而不用再去一層一層解析報文后面的鏡像報文數(shù)據(jù)得到VLAN-ID,可以幫助接收端降低分析成本。T(Truncate)占用一個bit用來表示攜帶的鏡像報文是否因為長度超過鏡像限度而被截斷,0表示GRM中攜帶的鏡像報文是完整的,沒有因為長度原因被截斷。1表示GRM中攜帶的鏡像報文是不完整的。在很多時候為了性能考慮,實際應(yīng)用時候都會對只保留鏡像數(shù)據(jù)的一部分,過大的報文都會被截斷。D(Direction)占用1個bit來表示被鏡像的原始報文的傳輸方向是流進還是流出vSwitch,0表示流入vSwitch,而1表示流出vSwtch。GRM在設(shè)計上考慮了多個接收端可能鏈接在同一個VTEP中,為了減少重復(fù)發(fā)送浪費資源和帶寬,GRM指定的最終接收端可以是多個,但是必須能通過同一個VTEP到達,DC(Destination MAC Count)占用2個bit表示要轉(zhuǎn)發(fā)給同一個VTEP后面多少個收集端。SeqNum(Sequence Number)占用12個bit用來描述被鏡像的原始報文前后關(guān)系,因為GRM報文是基于Geneve的,而Geneve是基于UDP協(xié)議的,所以GRM最后通過UDP方式在網(wǎng)絡(luò)中傳遞的,中間可能有報文丟失和亂序的情況,SeqNum可以幫助收集端重組報文順序。當然SeqNum中的數(shù)字是可以重用的,每4096個報文后都會經(jīng)歷重用,對于接收端重新編排順序是完全夠用的。很多時候報文的鏡像工作是在vSwitch中進行,而現(xiàn)在的網(wǎng)卡都支持在網(wǎng)卡硬件處才進行報文的切分,這個時候vSwitch收到的IP報文或者四層TCP報文并沒有被物理網(wǎng)卡按照MTU或者MSS切分,可能會非常大,所以設(shè)定Length占用16bit表示攜帶的鏡像的報文的大小,以盡可能適應(yīng)所有網(wǎng)絡(luò)環(huán)境和鏡像報文需求。同樣,收集端可以根據(jù)GRM格式的偏移量加上Length域來準確提取鏡像報文。最后的Destination MAC Addresses域是變長的,可存儲1至4個目的端的vNic(虛擬網(wǎng)卡)的MAC地址,占用48bit至192bit。接受端的vSwitch收到GRM報文后通過DC域和MAC地址來決定轉(zhuǎn)發(fā)到哪個虛擬網(wǎng)卡設(shè)備。
GRM中最核心的metadata數(shù)據(jù)就是Destination MAC Addresses域,其用來告知目的端vSwitch在VTEP接受到GRM后應(yīng)該如何轉(zhuǎn)發(fā)到對應(yīng)的vNic中。GRM中采用了vNic的MAC地址沒有采用vNic的IP作為轉(zhuǎn)發(fā)依據(jù)主要是考慮了IPV4和IPv6相互兼容問題,以及接收端的vNic虛擬網(wǎng)卡實際上可以不分配IP,單純用來分析報文數(shù)據(jù)。采用vNic的MAC地址還有一個好處就是vSwitch是存儲有vNic MAC和vNic的對應(yīng)關(guān)系的,能最快匹配和轉(zhuǎn)發(fā)。
1.3 虛擬網(wǎng)絡(luò)中GRM的傳輸
GRM是基于Geneve實現(xiàn)的,天然就能適配使用Geneve的虛擬網(wǎng)絡(luò),只要鏡像端和接收端上啟動的vSwitch能填充和解析GRM報文就能實現(xiàn)虛擬網(wǎng)絡(luò)中流量的鏡像收集和分析。
如圖四所示,同一個宿主機Host-A上VM-A和VM-B在通信時候,數(shù)據(jù)報文會經(jīng)過vSwitch轉(zhuǎn)發(fā)到VM-B。而因為VM-A是重要域的機器,需要對其進出的流量進行報文分析,vSwitch會截獲VM-A發(fā)送出來的網(wǎng)絡(luò)報文,解析出報文的基本信息后填充GRM報文頭部之后通過VTEP創(chuàng)建的Geneve管道傳遞到Host-B中。Host-B的vSwitch收到報文后會解析處GRM報文并將鏡像報文同時發(fā)送給需要收集端VM-D和Container-E
二、協(xié)議的設(shè)計
OVS(Open Virtual Switch)是Linux、Windows系統(tǒng)中常用的用于構(gòu)建虛擬網(wǎng)絡(luò)的開源組件,同時它也很好支持Geneve協(xié)議,通過它可以方便地來對各種數(shù)據(jù)報文進行處理以實現(xiàn)GRM。
OVS通過給vSwitch配置上不同openflow[7]組合,可以實現(xiàn)各種復(fù)雜的網(wǎng)絡(luò)功能。
OVS雖然可以通過openflow實現(xiàn)報文轉(zhuǎn)發(fā),但是對于實現(xiàn)GRM收發(fā)邏輯來說,僅僅使用openflow還不能對GRM進行填充,需要構(gòu)建一個運行在用戶態(tài)的程序GRM-Controller來輔助完成GRM報文的填充。
圖5中GRM-Controller啟動后會將自身注冊到的vSwitch中,然后告知OVS通過openflow來配置vSwitch,即如果發(fā)現(xiàn)某個報文需要被鏡像的時候會執(zhí)行controller 這個action,vSwitch將會把需要鏡像報文傳遞給用戶態(tài)程序GRM-Controller,GRM-Controller會接收到這個報文,GRM-Controller通過解析鏡像報文的報頭來填充GRM并存儲到OVS的tun_metadata中返回給vSwitch,vSwitch拿到tun_metadata后就可以直接將其當作Geneve報文的option,在后續(xù)的VTEP中封包中,OVS將自動幫封裝成完整的攜帶GRM的Geneve報文。
圖6顯示在接收端同樣要啟動GRM-Controller,配置OVS的vSwitch如果接收到帶有GRM option的Geneve的報文后會把Geneve的option數(shù)據(jù)存儲到tun_metadata中,而后通過提前設(shè)置的openflow將包含了GRM報頭的tun_metadata等發(fā)送給GRM-Controller。GRM-Controller可以根據(jù)tun_metadata來解析出GRM各個域的信息以及需要轉(zhuǎn)發(fā)到哪個MAC對應(yīng)的vNic,而每個鏈接到vSwitch的vNic都有對應(yīng)的ovs-port。GRM-Controller后續(xù)將轉(zhuǎn)發(fā)到哪個ovs-port寫入到register中,后續(xù)報文就可以根據(jù)傳遞下來的register來自動匹配發(fā)送到哪些端口。
三、結(jié)束語
本文通過利用Geneve協(xié)議報文中的高擴展性的option域來設(shè)計了基于Geneve虛擬網(wǎng)絡(luò)下鏡像報文傳輸協(xié)議GRM。GRM的引入能很好解決虛擬網(wǎng)絡(luò)下報文鏡像的傳輸問題,結(jié)合各種虛擬化的能力將以前需要集中處理的鏡像流量分發(fā)到虛擬網(wǎng)絡(luò)中的各個分布式節(jié)點中,很好地解決了集中化處理產(chǎn)生的各類瓶頸問題。本文同時還介紹了如果通過OVS來在實際的Geneve虛擬網(wǎng)絡(luò)中實現(xiàn)GRM的封裝和解析,驗證了通過增加編寫的用戶態(tài)的程序就能很好在Geneve虛擬網(wǎng)絡(luò)中支持GRM。
參? 考? 文? 獻
[1] N.M. Mosharaf Kabir Chowdhury and Raouf Boutaba. 2010. A survey of network virtualization. Comput. Netw. 54, 5 (April, 2010), 862-876. DOI:https://doi.org/10.1016/j.comnet.2009.10.017
[2] Gross J, Sridhar T, Garg P, et al. Geneve: Generic network virtualization encapsulation[J]. IETF draft, 2014.
[3] Mahalingam, M., Dutt, D., Duda, K., Agarwal, P., Kreeger, L., Sridhar, T., Bursell, M., Wright, C.: Virtual eXtensible Local Area Network (VXLAN): A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks. RFC 7348 (Informational). http://www.ietf.org/rfc/rfc7348.txt
[4] Davie, B., Gross, J.: A Stateless Transport Tunneling Protocol for Network Virtualization (STT). Internet-Draft draft-davie-stt-08, Internet Engineering Task Force. https://datatracker.ietf.org/doc/html/draft-davie-stt-08. Work in Progress
[5] Chung C J, Khatkar P, Xing T, et al. NICE: Network intrusion detection and countermeasure selection in virtual network systems[J]. IEEE transactions on dependable and secure computing, 2013, 10(4): 198-211.
[6] Open vswitch. http://openvswitch.org.
[7] McKeown N, Anderson T, Balakrishnan H, et al. OpenFlow: enabling innovation in campus networks[J]. ACM SIGCOMM computer communication review, 2008, 38(2): 69-74.