高振宇
【摘要】? ? 虛擬網(wǎng)絡(luò)在很多企業(yè)中有大量應(yīng)用,但是如何更好地監(jiān)控虛擬網(wǎng)絡(luò)的流量數(shù)據(jù)成為了重要的研究方向。本文基于Geneve協(xié)議設(shè)計(jì)一種適合在overlay虛擬網(wǎng)絡(luò)中傳遞鏡像報(bào)文數(shù)據(jù)的協(xié)議。能很好解決在虛擬網(wǎng)絡(luò)中鏡像報(bào)文的傳輸問(wèn)題。同時(shí)文章展示了如何基于OVS實(shí)現(xiàn)這種協(xié)議。
【關(guān)鍵詞】? ? 虛擬網(wǎng)絡(luò)? ? Geneve? ? 鏡像報(bào)文
引言:
虛擬網(wǎng)絡(luò)[1]這幾年正在經(jīng)歷高速發(fā)展,越來(lái)越多的企業(yè)在自己的數(shù)據(jù)中心開始部署虛擬網(wǎng)絡(luò)。與此同時(shí),虛擬網(wǎng)絡(luò)配合Kubernetes、容器、虛擬機(jī)等虛擬化技術(shù)能快速幫助企業(yè)動(dòng)態(tài)擴(kuò)展服務(wù),虛擬網(wǎng)絡(luò)則在這之中扮演著極為重要的角色。目前業(yè)界中實(shí)際落地的虛擬網(wǎng)絡(luò)一般都是通過(guò)overlay網(wǎng)絡(luò)協(xié)議來(lái)構(gòu)建,例如被廣泛使用的Geneve[2],VXLAN[3],STT[4]等協(xié)議。
Overlay網(wǎng)絡(luò)構(gòu)建于underlay物理網(wǎng)絡(luò)之上,這使得overlay虛擬網(wǎng)絡(luò)具有很好的擴(kuò)展性,并能在很大程度上屏蔽underlay物理網(wǎng)絡(luò)的變化帶來(lái)的諸多影響。但是同時(shí)這也使得傳統(tǒng)的underlay物理網(wǎng)絡(luò)的很多技術(shù)難以去探測(cè)和監(jiān)控overlay虛擬網(wǎng)絡(luò),給網(wǎng)絡(luò)安全帶來(lái)了新的挑戰(zhàn)。
鏡像某些重要域機(jī)器的網(wǎng)絡(luò)報(bào)文后用各種分析器來(lái)監(jiān)控和分析來(lái)往流量是否有異常是傳統(tǒng)物理網(wǎng)絡(luò)中常用的一種主動(dòng)防御的信息安全手段,目前用來(lái)傳輸鏡像報(bào)文到遠(yuǎn)端分析器的協(xié)議主要有思科提出的ERSPAN[5],但是它主要應(yīng)用在underlay物理網(wǎng)絡(luò),鏡像的流量數(shù)據(jù)只能傳遞給處在underlay網(wǎng)絡(luò)中三層互通的網(wǎng)絡(luò)設(shè)備。這種方式的弊端在于流量分析設(shè)備性能必須非常強(qiáng)大才能實(shí)時(shí)處理傳遞過(guò)來(lái)的巨大流量數(shù)據(jù),硬件成本投入大,并且這種方式不易于擴(kuò)展,一旦我們想監(jiān)控更多機(jī)器流量時(shí)候就會(huì)發(fā)現(xiàn)收集端的網(wǎng)絡(luò)成為了瓶頸,因此ERSPAN這種協(xié)議已經(jīng)很難適合虛擬網(wǎng)絡(luò)和當(dāng)前業(yè)務(wù)多變的需求。
本文提出了一種基于Geneve用于鏡像網(wǎng)絡(luò)報(bào)文的協(xié)議來(lái)解決這個(gè)困難,協(xié)議用于將虛擬網(wǎng)絡(luò)上需要監(jiān)控的報(bào)文傳遞到同處于虛擬網(wǎng)絡(luò)遠(yuǎn)端處理。最后文章展示了如何使用OVS[6]來(lái)實(shí)現(xiàn)用這種協(xié)議來(lái)傳輸鏡像報(bào)文。
一、協(xié)議的設(shè)計(jì)
Overlay虛擬網(wǎng)絡(luò)協(xié)議被廣泛使用的主要有Geneve,VXLAN,STT等,其中Geneve和VXLAN協(xié)議都是基于UDP協(xié)議實(shí)現(xiàn)的,相對(duì)基于TCP實(shí)現(xiàn)的STT有更好的穿透性。VXLAN的協(xié)議的報(bào)頭大小是固定的,只能攜帶非常少量的信息。而Geneve更像VXLAN的升級(jí)版,它解決了VXLAN協(xié)議報(bào)文中難以擴(kuò)展和難以攜帶metadata的問(wèn)題。Geneve協(xié)議報(bào)文的option域可以很方便地被用來(lái)進(jìn)行各種擴(kuò)展以攜帶更多的信息,從而實(shí)現(xiàn)更多更復(fù)雜的功能。我們基于Geneve的option域設(shè)計(jì)了GRM(Geneve base Remote Mirroring),GRM專門用于在虛擬網(wǎng)絡(luò)中傳遞鏡像流量到同樣處在虛擬網(wǎng)絡(luò)中的收集分析程序中。這樣我們就能充分利用虛擬網(wǎng)絡(luò)的優(yōu)勢(shì)以及各種虛擬化技術(shù)來(lái)實(shí)時(shí)動(dòng)態(tài)擴(kuò)縮容用于收集和分析實(shí)例,以前鏡像流量必須發(fā)到指定的物理設(shè)備中,使用GRM后就可以動(dòng)態(tài)分流到實(shí)時(shí)擴(kuò)容的收集端,通過(guò)分布式處理的方式來(lái)解決集中式處理能力的不足問(wèn)題,這樣就不用擔(dān)心由于單個(gè)物理硬件性能不足導(dǎo)致出現(xiàn)收集和分析的瓶頸問(wèn)題。
1.1 Geneve協(xié)議報(bào)文頭部的option域
Geneve協(xié)議的報(bào)文相對(duì)VXLAN有更強(qiáng)的擴(kuò)展性,如圖1所示,一個(gè)Geneve報(bào)文可以包含多個(gè)可變成長(zhǎng)度的option。option的作用就是用來(lái)讓用戶自己定制,存入各類需要的信息,通過(guò)option域可以插入我們想要傳遞給接收端的各類描述報(bào)文的metadata信息。
圖2展示了Geneve采用了常見的TLV(Type-Length-Value)方式來(lái)描述option基本信息,每個(gè)option中都有對(duì)應(yīng)的class和type。Class和type用于唯一區(qū)分option的標(biāo)識(shí)。Length則描述了該option占用的長(zhǎng)度。Option的data域則填入我們希望攜帶的信息。每個(gè)option可以攜帶4到128byte的數(shù)據(jù)。
1.2 GRM協(xié)議的設(shè)計(jì)
GRM就是利用Geneve的可變長(zhǎng)度option域來(lái)實(shí)現(xiàn)的。我們把option的data域的空間拆分成多個(gè)域,放入GRM描述信息、描述鏡像報(bào)文信息以及如何轉(zhuǎn)發(fā)的信息。因?yàn)镚RM本身是基于Geneve,天然就可以利用Geneve在虛擬網(wǎng)絡(luò)中傳遞數(shù)據(jù),而GRM攜帶的信息則在underlay物理網(wǎng)絡(luò)目的端的VTEP中解析出來(lái),而后就可以根據(jù)GRM來(lái)二次轉(zhuǎn)發(fā)鏡像報(bào)文到指定接收端中。
圖3展示了GRM協(xié)議具體的結(jié)構(gòu),VER(Version)域占用2個(gè)bit空間用于存儲(chǔ)GRM的版本信息,VER域用于后續(xù)協(xié)議版本的升級(jí)區(qū)別,目前值設(shè)為0,表示GRM的第一個(gè)版本。Mirror-ID占用14bit空間用于給接收端區(qū)分收到的不同的鏡像數(shù)據(jù)流,該值可以人為分配,針對(duì)每個(gè)鏡像流分配一個(gè)唯一值。VLAN-ID是Geneve的payload中攜帶的鏡像報(bào)文的VLAN-ID,收集端接收到GRM報(bào)文后可以直接使用VLAN-ID這個(gè)重要信息,而不用再去一層一層解析報(bào)文后面的鏡像報(bào)文數(shù)據(jù)得到VLAN-ID,可以幫助接收端降低分析成本。T(Truncate)占用一個(gè)bit用來(lái)表示攜帶的鏡像報(bào)文是否因?yàn)殚L(zhǎng)度超過(guò)鏡像限度而被截?cái)啵?表示GRM中攜帶的鏡像報(bào)文是完整的,沒(méi)有因?yàn)殚L(zhǎng)度原因被截?cái)唷?表示GRM中攜帶的鏡像報(bào)文是不完整的。在很多時(shí)候?yàn)榱诵阅芸紤],實(shí)際應(yīng)用時(shí)候都會(huì)對(duì)只保留鏡像數(shù)據(jù)的一部分,過(guò)大的報(bào)文都會(huì)被截?cái)?。D(Direction)占用1個(gè)bit來(lái)表示被鏡像的原始報(bào)文的傳輸方向是流進(jìn)還是流出vSwitch,0表示流入vSwitch,而1表示流出vSwtch。GRM在設(shè)計(jì)上考慮了多個(gè)接收端可能鏈接在同一個(gè)VTEP中,為了減少重復(fù)發(fā)送浪費(fèi)資源和帶寬,GRM指定的最終接收端可以是多個(gè),但是必須能通過(guò)同一個(gè)VTEP到達(dá),DC(Destination MAC Count)占用2個(gè)bit表示要轉(zhuǎn)發(fā)給同一個(gè)VTEP后面多少個(gè)收集端。SeqNum(Sequence Number)占用12個(gè)bit用來(lái)描述被鏡像的原始報(bào)文前后關(guān)系,因?yàn)镚RM報(bào)文是基于Geneve的,而Geneve是基于UDP協(xié)議的,所以GRM最后通過(guò)UDP方式在網(wǎng)絡(luò)中傳遞的,中間可能有報(bào)文丟失和亂序的情況,SeqNum可以幫助收集端重組報(bào)文順序。當(dāng)然SeqNum中的數(shù)字是可以重用的,每4096個(gè)報(bào)文后都會(huì)經(jīng)歷重用,對(duì)于接收端重新編排順序是完全夠用的。很多時(shí)候報(bào)文的鏡像工作是在vSwitch中進(jìn)行,而現(xiàn)在的網(wǎng)卡都支持在網(wǎng)卡硬件處才進(jìn)行報(bào)文的切分,這個(gè)時(shí)候vSwitch收到的IP報(bào)文或者四層TCP報(bào)文并沒(méi)有被物理網(wǎng)卡按照MTU或者M(jìn)SS切分,可能會(huì)非常大,所以設(shè)定Length占用16bit表示攜帶的鏡像的報(bào)文的大小,以盡可能適應(yīng)所有網(wǎng)絡(luò)環(huán)境和鏡像報(bào)文需求。同樣,收集端可以根據(jù)GRM格式的偏移量加上Length域來(lái)準(zhǔn)確提取鏡像報(bào)文。最后的Destination MAC Addresses域是變長(zhǎng)的,可存儲(chǔ)1至4個(gè)目的端的vNic(虛擬網(wǎng)卡)的MAC地址,占用48bit至192bit。接受端的vSwitch收到GRM報(bào)文后通過(guò)DC域和MAC地址來(lái)決定轉(zhuǎn)發(fā)到哪個(gè)虛擬網(wǎng)卡設(shè)備。
GRM中最核心的metadata數(shù)據(jù)就是Destination MAC Addresses域,其用來(lái)告知目的端vSwitch在VTEP接受到GRM后應(yīng)該如何轉(zhuǎn)發(fā)到對(duì)應(yīng)的vNic中。GRM中采用了vNic的MAC地址沒(méi)有采用vNic的IP作為轉(zhuǎn)發(fā)依據(jù)主要是考慮了IPV4和IPv6相互兼容問(wèn)題,以及接收端的vNic虛擬網(wǎng)卡實(shí)際上可以不分配IP,單純用來(lái)分析報(bào)文數(shù)據(jù)。采用vNic的MAC地址還有一個(gè)好處就是vSwitch是存儲(chǔ)有vNic MAC和vNic的對(duì)應(yīng)關(guān)系的,能最快匹配和轉(zhuǎn)發(fā)。
1.3 虛擬網(wǎng)絡(luò)中GRM的傳輸
GRM是基于Geneve實(shí)現(xiàn)的,天然就能適配使用Geneve的虛擬網(wǎng)絡(luò),只要鏡像端和接收端上啟動(dòng)的vSwitch能填充和解析GRM報(bào)文就能實(shí)現(xiàn)虛擬網(wǎng)絡(luò)中流量的鏡像收集和分析。
如圖四所示,同一個(gè)宿主機(jī)Host-A上VM-A和VM-B在通信時(shí)候,數(shù)據(jù)報(bào)文會(huì)經(jīng)過(guò)vSwitch轉(zhuǎn)發(fā)到VM-B。而因?yàn)閂M-A是重要域的機(jī)器,需要對(duì)其進(jìn)出的流量進(jìn)行報(bào)文分析,vSwitch會(huì)截獲VM-A發(fā)送出來(lái)的網(wǎng)絡(luò)報(bào)文,解析出報(bào)文的基本信息后填充GRM報(bào)文頭部之后通過(guò)VTEP創(chuàng)建的Geneve管道傳遞到Host-B中。Host-B的vSwitch收到報(bào)文后會(huì)解析處GRM報(bào)文并將鏡像報(bào)文同時(shí)發(fā)送給需要收集端VM-D和Container-E
二、協(xié)議的設(shè)計(jì)
OVS(Open Virtual Switch)是Linux、Windows系統(tǒng)中常用的用于構(gòu)建虛擬網(wǎng)絡(luò)的開源組件,同時(shí)它也很好支持Geneve協(xié)議,通過(guò)它可以方便地來(lái)對(duì)各種數(shù)據(jù)報(bào)文進(jìn)行處理以實(shí)現(xiàn)GRM。
OVS通過(guò)給vSwitch配置上不同openflow[7]組合,可以實(shí)現(xiàn)各種復(fù)雜的網(wǎng)絡(luò)功能。
OVS雖然可以通過(guò)openflow實(shí)現(xiàn)報(bào)文轉(zhuǎn)發(fā),但是對(duì)于實(shí)現(xiàn)GRM收發(fā)邏輯來(lái)說(shuō),僅僅使用openflow還不能對(duì)GRM進(jìn)行填充,需要構(gòu)建一個(gè)運(yùn)行在用戶態(tài)的程序GRM-Controller來(lái)輔助完成GRM報(bào)文的填充。
圖5中GRM-Controller啟動(dòng)后會(huì)將自身注冊(cè)到的vSwitch中,然后告知OVS通過(guò)openflow來(lái)配置vSwitch,即如果發(fā)現(xiàn)某個(gè)報(bào)文需要被鏡像的時(shí)候會(huì)執(zhí)行controller 這個(gè)action,vSwitch將會(huì)把需要鏡像報(bào)文傳遞給用戶態(tài)程序GRM-Controller,GRM-Controller會(huì)接收到這個(gè)報(bào)文,GRM-Controller通過(guò)解析鏡像報(bào)文的報(bào)頭來(lái)填充GRM并存儲(chǔ)到OVS的tun_metadata中返回給vSwitch,vSwitch拿到tun_metadata后就可以直接將其當(dāng)作Geneve報(bào)文的option,在后續(xù)的VTEP中封包中,OVS將自動(dòng)幫封裝成完整的攜帶GRM的Geneve報(bào)文。
圖6顯示在接收端同樣要啟動(dòng)GRM-Controller,配置OVS的vSwitch如果接收到帶有GRM option的Geneve的報(bào)文后會(huì)把Geneve的option數(shù)據(jù)存儲(chǔ)到tun_metadata中,而后通過(guò)提前設(shè)置的openflow將包含了GRM報(bào)頭的tun_metadata等發(fā)送給GRM-Controller。GRM-Controller可以根據(jù)tun_metadata來(lái)解析出GRM各個(gè)域的信息以及需要轉(zhuǎn)發(fā)到哪個(gè)MAC對(duì)應(yīng)的vNic,而每個(gè)鏈接到vSwitch的vNic都有對(duì)應(yīng)的ovs-port。GRM-Controller后續(xù)將轉(zhuǎn)發(fā)到哪個(gè)ovs-port寫入到register中,后續(xù)報(bào)文就可以根據(jù)傳遞下來(lái)的register來(lái)自動(dòng)匹配發(fā)送到哪些端口。
三、結(jié)束語(yǔ)
本文通過(guò)利用Geneve協(xié)議報(bào)文中的高擴(kuò)展性的option域來(lái)設(shè)計(jì)了基于Geneve虛擬網(wǎng)絡(luò)下鏡像報(bào)文傳輸協(xié)議GRM。GRM的引入能很好解決虛擬網(wǎng)絡(luò)下報(bào)文鏡像的傳輸問(wèn)題,結(jié)合各種虛擬化的能力將以前需要集中處理的鏡像流量分發(fā)到虛擬網(wǎng)絡(luò)中的各個(gè)分布式節(jié)點(diǎn)中,很好地解決了集中化處理產(chǎn)生的各類瓶頸問(wèn)題。本文同時(shí)還介紹了如果通過(guò)OVS來(lái)在實(shí)際的Geneve虛擬網(wǎng)絡(luò)中實(shí)現(xiàn)GRM的封裝和解析,驗(yàn)證了通過(guò)增加編寫的用戶態(tài)的程序就能很好在Geneve虛擬網(wǎng)絡(luò)中支持GRM。
參? 考? 文? 獻(xiàn)
[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.