陳小輝,高 燕,劉漢燁
(榆林學院 信息工程學院,陜西 榆林 719000)
隨著經(jīng)濟全球化趨勢的不斷推進,越來越多的公司和企業(yè)的業(yè)務(wù)需要跨越了不同的地域和國家,他們迫切需要一種廉價安全的技術(shù)來保證異地部門之間信息的同步和實時的通信。VPN(Virtual Private Network)就是這樣一種實現(xiàn)方案,它是利用現(xiàn)有的網(wǎng)絡(luò)基礎(chǔ)設(shè)施為客戶創(chuàng)建隧道,在面向公眾的開放網(wǎng)絡(luò)中建立私有數(shù)據(jù)信道的技術(shù),從而實現(xiàn)不同部門、地域分支之間的數(shù)據(jù)通信,并提供與私有網(wǎng)絡(luò)一樣的安全和功能保障。在VPN網(wǎng)絡(luò)中,任意兩個連通的分支之間并沒有傳統(tǒng)專用網(wǎng)所需的端到端的通信線路,而是通過使用現(xiàn)有公共網(wǎng)絡(luò)資源隨機組成的,采用安全隧道、用戶認證、訪問控制等技術(shù)實現(xiàn)與私有網(wǎng)絡(luò)類似的安全特性,從而實現(xiàn)對企業(yè)內(nèi)部信息的安全保障[1]。使用VPN能夠降低網(wǎng)絡(luò)成本和建設(shè)時間,提高安全性和可靠性,增強可管理性和易擴展性,所以它是今后企業(yè)網(wǎng)的發(fā)展方向。
VPN的實現(xiàn)大都要求采用某種類型的隧道技術(shù)。隧道技術(shù)采用的是在公共互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)設(shè)施上傳遞私有數(shù)據(jù)的方式。使用VPN傳遞的數(shù)據(jù)包可以是不同協(xié)議的數(shù)據(jù)幀或包,通過使用隧道協(xié)議將這些數(shù)據(jù)幀重新封裝在新的隧道數(shù)據(jù)包中發(fā)送。主要涉及3種協(xié)議,即隧道協(xié)議、承載協(xié)議和乘客協(xié)議。承載協(xié)議包把隧道協(xié)議包作為自己的數(shù)據(jù)部分來傳輸,隧道協(xié)議包又把乘客協(xié)議包作為自己的數(shù)據(jù)部分來傳輸。
根據(jù)封裝的層面不同可分為二層隧道和三層隧道,二層隧道協(xié)議主要有PPTP(Point-to-Point tunneling protocol)、L2F(Layer Two Forwarding protocol)、L2TP、MPLS(Multi-protocol Label Switching),三層隧道協(xié)議主要是IPSec。L2TP(Layer Two tunneling Protocol)是實現(xiàn)二層隧道VPN的主要技術(shù),有L2TPV2和L2TPV3兩個版本[2]。目前廣泛使用的是L2TPV2,但是L2TPV2本身存在較多的局限性,由于其協(xié)議本身和二層PPP(Point to Point Protocol)協(xié)議有較多的關(guān)聯(lián),導致其不便于對其它二層協(xié)議幀進行隧道傳輸,另外其非對稱工作模型也限制了它的應(yīng)用范圍。
L2TP是在構(gòu)造VPN網(wǎng)絡(luò)中最常用的一種二層隧道協(xié)議,該協(xié)議將網(wǎng)絡(luò)接入服務(wù)器NAS(Network Access Server)的功能分為LAC (L2TP Access Concentrator)和LNS(L2TP Network Server)來完成。目前有L2TPV2和L2TPV3兩個版本,L2TPV2主要還是針對二層PPP報文提出的隧道技術(shù),它解決了PPP鏈路捆綁的問題,可以使物理上連接到不同NAS的PPP鏈路,在邏輯上終結(jié)在同一個物理設(shè)備上,實際上它是實現(xiàn)了PPP會話的終結(jié)點和PPP連接的終結(jié)點分離。在L2TPV3版本中把原來與PPP相關(guān)的內(nèi)容分解出來放到專門的協(xié)議中描述,使得L2TPV3和封裝的二層報文類型無關(guān),這樣就可以通過使用L2TP隧道完成所有的二層幀的傳輸。其次是對原有的舊版本的工作模式進行了擴展,由原來的主從式非對稱模式發(fā)展為對稱模式[3]。L2TPV3與L2TPV2兩個不同版本之間存在較大差異,首先,L2TPV2最初是基于PPP會話協(xié)議制定的,在L2TPV2報文頭中包含過多與PPP報文有關(guān)的信息,而在新版本中把所有與特定PPP數(shù)據(jù)報相關(guān)聯(lián)的分離,使得新版協(xié)議與所傳輸?shù)膱笪念愋蜎]有直接關(guān)系,便于傳輸多種形式的報文[4];其次,對L2TPV2所支持的隧道工作模式進行了擴展,不在是單一的LAC-LNS非對稱模式,而隧道兩端的設(shè)備連接關(guān)系可以是:LAC-LAC,LNS-LNS,LAC-LNS三種之一;最后L2TPV3報文中會話ID和控制連接ID增加到了32位,從而使支持的控制連接及會話數(shù)量由65000條激增到40億條以上。
本次開發(fā)是在L2TPD 0.69的基礎(chǔ)上,對原有的L2TPV2模塊代碼進行再開發(fā)實現(xiàn)的,雖然兩個版本之間有相當?shù)牟顒e,但是兩個版本的程序主體流程是相似的,在本次開放中將兩個版本的狀態(tài)機部分進行兼容設(shè)計,從而減少系統(tǒng)開發(fā)成本,提高了代碼重用性??紤]把L2TPV2和L2TPV3統(tǒng)一在同一個任務(wù)中實現(xiàn),在細節(jié)處理上的不同,可以根據(jù)協(xié)議版本號來判斷分別做不同的處理。圖1是對L2TPV3和L2TPV2兩個協(xié)議的流程對比,圖中灰色部分表示處理細節(jié)上存在差異,白色背景表示相同。在開發(fā)是,需要針對灰色部分根據(jù)版本號分別實現(xiàn),而其他部分則可以共用。
圖1 L2TPV2和L2TPV3處理上的異同
Fig.1 The differences between the processing of L2TPV2 and L2TPV3
L2TP模塊主要需要處理兩類數(shù)據(jù),和對端LCCE之間交互的控制消息,來自用戶的需要通過隧道轉(zhuǎn)發(fā)的二層鏈路數(shù)據(jù)以及從隧道中接收到的需要轉(zhuǎn)發(fā)給本地用戶的隧道數(shù)據(jù)消息[5]。表1是L2TPV3模塊的輸入數(shù)據(jù)列表,表2是L2TPV3模塊的輸出數(shù)據(jù)列表。
表1 L2TPV3模塊輸入數(shù)據(jù)列表Tab.1 The input data list of L2TPV3 module
表2 L2TPV3模塊輸出數(shù)據(jù)列表Tab.2 The output data list of L2TPV3 module
L2TP數(shù)據(jù)報文中只是實現(xiàn)對用戶的二層幀的封裝和傳輸,不包含隧道的控制信息,故隧道數(shù)據(jù)報文的處理過程相對較為簡單。L2TP控制報文需要完成對于隧道和會話的建立、撤銷和維護,必須能夠攜帶大量的控制信息,所以控制報文需要完成對AVP屬性值對的編碼和解碼工作,如圖2所示。
圖2 頂層控制報文處理流程圖Fig.2 The flow-process diagram of top-level control message processing
數(shù)據(jù)結(jié)構(gòu)是路由軟件功能實現(xiàn)和信息存儲及交互的基礎(chǔ),在L2TPV3模塊中主要使用了3類數(shù)據(jù)。一種是用來存儲全局Tunnel信息的L2TPV3對象數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)中保存了當前系統(tǒng)中所有的L2TPV3 Tunnel信息;另外一種用來存儲每一個Tunnel信息隧道數(shù)據(jù)結(jié)構(gòu);最后一種是用來保存Session信息的會話數(shù)據(jù)結(jié)構(gòu)。3類數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系如圖3所示。
圖3 L2TPV3模塊數(shù)據(jù)結(jié)構(gòu)圖Fig.3 The data struct of L2TPV3 module
根據(jù)L2TPV3協(xié)議描述,將L2TPV3的功能實現(xiàn)劃分為6個主要子模塊。報文收發(fā)模塊:該模塊主要接收來自其它模塊的的消息,主要包括從隧道中接收來自Peer LCCE的VPN報文通過二層接口轉(zhuǎn)發(fā)給本地VPN用戶;負責VPN隧道所需socket連接的建立和維護,以及通過socket收發(fā)數(shù)據(jù);負責控制消息可靠傳輸機制的實現(xiàn),包括對收發(fā)報文序號維護,收發(fā)窗口字節(jié)數(shù)維護以及控制報文收發(fā)隊列管理。報文處理模塊:處理從隧道中接收的來自對端LCCE的報文,含數(shù)據(jù)和控制報文;處理其它模塊發(fā)來的消息和事件;解析和構(gòu)造需要通過隧道傳輸?shù)腖2TP報文。會話管理模塊:完成會話管理基本數(shù)據(jù)結(jié)構(gòu)的初始化建立和維護;建立和維護每一個會話,SESSION狀態(tài)機的創(chuàng)建和維護SESSION相關(guān)控制消息的解析和構(gòu)建;SESSION定時器的創(chuàng)建、維護。隧道管理模塊:完成控制連接數(shù)據(jù)結(jié)構(gòu)的初始構(gòu)建和維護;構(gòu)建維護和撤銷每條隧道;實現(xiàn)和維護控制連接狀態(tài)機,處理和構(gòu)造與控制連接相關(guān)控制消息;控制連接定時器的創(chuàng)建和維護。AVP處理模塊:對各種類別的AVP數(shù)據(jù)的構(gòu)造和解析;對AVP值加密。配置管理模塊:提供相關(guān)命令配置接口,完成命令行輸入數(shù)據(jù)的解析處理。模塊間的調(diào)用關(guān)系如圖4所示。
圖4 模塊間調(diào)用關(guān)系Fig.4 The call relation of modules
1)L2TP_L2VPN_Output
函數(shù)原型:ULONG L2TP_L2VPN_Output(ULONG ulIfIndex,VOID*pData,ULONG ulDataLen)
該接口函數(shù)供L2TPV3模塊發(fā)送數(shù)據(jù)時調(diào)用,用來發(fā)送剝離L2TP頭的數(shù)據(jù)包(pData指向待接收數(shù)據(jù))到索引為ulIfIndex的出接口。該函數(shù)內(nèi)部調(diào)用軟轉(zhuǎn)發(fā)的發(fā)送函數(shù)DEV_Output實現(xiàn)。
2)L2TP_L2VPN_Input
函數(shù)原型:ULONG L2TP_L2VPN_Input(SKBUF_S*pSkBuf,ULONG ulToken)
在設(shè)置L2TPV3標志位的接口上接到報文時如果需要軟轉(zhuǎn)發(fā)則調(diào)用該接口函數(shù)轉(zhuǎn)發(fā),當LCCE接到從eth口或VLAN口上來的鏈路層報文時,根據(jù)ulToken查找對應(yīng)的tunnel和session,加上對應(yīng)的l2tp頭和Ip頭,進行轉(zhuǎn)發(fā)。
3)L2TP3_SessionEventNotify
函數(shù)原型:LONG L2TP3_SessionEventNotify(L2TP3_SESSION_NOTIFY_S*pstSesNotify)
本函數(shù)負責下發(fā)session創(chuàng)建或撤銷通知,由L2TPV3模塊調(diào)用,需要由接口管理模塊實現(xiàn)具體函數(shù)功能。
4)IFM_IfChangeToL2TPV3和IFM_IfBackFromL2TPV3
函數(shù)原型:LONG IFM_IfChangeToL2TPV3(ULONG ulIfIndex)
LONG IFM_IfBackFromL2TPV3(ULONG ulIfindex)
該接口函數(shù)需要由接口管理模塊提供,L2TPV3模塊配置命令行時調(diào)用。用來設(shè)置(或清除)某以太網(wǎng)接口或VLAN接口為L2TPV3接口。
5)IFM_SetL2TPV3Enable和IFM_SetL2TPV3Disable
函數(shù)原型:LONG IFM_SetL2TPV3Enable (ULONG unIfIndex,ULONG ulSessID)
LONG IFM_SetL2TPV3Disable(ULONG unIfIndex)該接口函數(shù)由接口管理模塊提供,L2TPV3模塊在Session建立成功(或刪除)時調(diào)用,用來將Session ID與某個接口關(guān)聯(lián)(去關(guān)聯(lián))起來,關(guān)聯(lián)后該接口可以通過L2TP轉(zhuǎn)發(fā)。ulSessID由接口管理保存,在軟轉(zhuǎn)發(fā)調(diào)用l2tpv3_lcce_receive時,傳回給L2TPV3模塊。
設(shè)計實現(xiàn)了一個兼容V2和V3版本的控制連接狀態(tài)機,兩個版本狀態(tài)機的不同主要是由于Tie breaker的不同處理而引起的,在V2版本中對控制連接Tie breaker的處理很簡單,但在V3版本中根據(jù)win和lose狀態(tài)多了不同的處理;在V2中并沒有Session Tie breaker,但在V3版本中引入了這個AVP,所以相應(yīng)多了兩個處理。除了Tie breaker外,狀態(tài)機的其他部分幾乎完全相同??刂七B接狀態(tài)機共有4個狀態(tài):1)初始狀態(tài),2)等待回復狀態(tài),3)等待連接狀態(tài),4)連接已建立狀態(tài)??刂七B接狀態(tài)機能夠接收并處理16種事件,如表3所示,采用a到p 16個小寫字母來表示??刂七B接狀態(tài)機根據(jù)事件的不同能夠激發(fā)八種動作,如表4所示,采用A到H 8個大寫字母來表示。而對于會話狀態(tài)機的設(shè)計由于和V2版本的實現(xiàn)變化不大,在此不作說明。
表3 控制連接狀態(tài)機輸入事件表Tab.3 The input event’s table of connection control state machine
表4 控制連接狀態(tài)機輸出動作表Tab.4 The output action’s table of connection control state machine
在L2TPV3模塊實現(xiàn)中重點考慮了和V2實現(xiàn)設(shè)備的兼容,實現(xiàn)方法是通過向?qū)Χ税l(fā)送一個特殊的SCCRQ報文,該報文的version值為2,并且包含一個或者是多個V3特有的AVP,強制位置0。這樣根據(jù)對端返回的SCCRP的版本判斷對端是否支持V3,如果對端支持V3必然會返回一個V3的SCCRP否則為V2。另外實現(xiàn)了在對端不支持L2TPV3,或者收到V2的SCCRQ報文時,本地自動向L2TPV2回退,自動回退工作流程如圖6所示。
圖5 L2TPV3控制連接狀態(tài)機Fig.5 The connection control state machine of L2TPV3
圖6 L2TPV3向L2TPV2自動回退的工作流程
Fig.6 The automatic rollback work flow of L2TPV3 to the L2TPV2
開發(fā)結(jié)束以后,在模擬環(huán)境下對L2TPV3的工作性能進行了測試,測試結(jié)果顯示系統(tǒng)的數(shù)據(jù)延遲、穩(wěn)定性、丟包率都在合理范圍內(nèi),系統(tǒng)性能穩(wěn)定,各項功能正常,基本達到了預定的開發(fā)目的。VPN[7-8]是當今社會企業(yè)網(wǎng)絡(luò)的發(fā)展趨勢,它能夠綜合開放網(wǎng)絡(luò)的共享性能和私有保護網(wǎng)絡(luò)的安全性,提供遠程訪問公共網(wǎng)絡(luò)和企業(yè)內(nèi)部網(wǎng)的功能,而且建設(shè)和維護成本合理;隨著計算機信息技術(shù)的不斷發(fā)展,應(yīng)用層面的不斷擴展,以及VPN實現(xiàn)技術(shù)的日益完善,越來越穩(wěn)定、高速、安全的VPN實現(xiàn)技術(shù)會不斷出現(xiàn)。
[1]ZHANG Zhen-sheng,ZHANG Ya-qin,CHU Xiao-wen.An overview of virtual private network:IP VPN and Optical VPN[J].Journal Photonic Network Communications,2004,7(3):213-225.
[2]Lau J,Townsley M,Goyret I.Layer Two Tunneling Protocol-Version 3[S].RFC 3931 March,2005.
[3]Issacs R,Lesile I.Support for resource-assured and dynamic virtual private networks[J].IEEE Journal on Selected Areas in Communication,2001,19(3):460-472.
[4]French S,Pendarakis D.Optical Virtual Private Networks:Applications,F(xiàn)unctionality and Implementationc[J].Journal Photonic Network Communications,2004,7(3):227-238.
[5]Rosenbaum G,Lau W,Jha S.Recent directions in virtual private network solutions”[C].The 11th IEEE International Conference on Networks,2003:217-223.
[6]黃浩,謝冬青.L2TP下可信的VPN方案設(shè)計與實現(xiàn)[J].計算機工程,2006,32(20):157-159.HUANG Hao,XIE Dong-qing.The design and implementation of believable VPN based on L2TP[J].Computer Engineering,2006,32(20):157-159.
[7]楊斌,邵曉,李光.VPN技術(shù)在軍隊網(wǎng)絡(luò)建設(shè)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2011,34(6):105-107.YANG Bin,SHAO Xiao,LI Guang.Application of VPN technology in network construction of army[J].Modern Electronics Technique,2011,34(6):105-107.
[8]蘇雪娟,黃玥,孫宇.MPLS VPN技術(shù)在電力企業(yè)廣域網(wǎng)中的應(yīng)用[J].電子科技,2013,26(3):137-139.SU Xue-juan,HUANG Yue,SUN Yu.Application of MPLS VPN technique in power enterprise wide area network[J].Electronic Science and Technology,2013,26(3):137-139.