陳小輝,高 燕,劉漢燁
(榆林學院 信息工程學院,陜西 榆林 719000)
隨著經濟全球化趨勢的不斷推進,越來越多的公司和企業的業務需要跨越了不同的地域和國家,他們迫切需要一種廉價安全的技術來保證異地部門之間信息的同步和實時的通信。VPN(Virtual Private Network)就是這樣一種實現方案,它是利用現有的網絡基礎設施為客戶創建隧道,在面向公眾的開放網絡中建立私有數據信道的技術,從而實現不同部門、地域分支之間的數據通信,并提供與私有網絡一樣的安全和功能保障。在VPN網絡中,任意兩個連通的分支之間并沒有傳統專用網所需的端到端的通信線路,而是通過使用現有公共網絡資源隨機組成的,采用安全隧道、用戶認證、訪問控制等技術實現與私有網絡類似的安全特性,從而實現對企業內部信息的安全保障[1]。使用VPN能夠降低網絡成本和建設時間,提高安全性和可靠性,增強可管理性和易擴展性,所以它是今后企業網的發展方向。
VPN的實現大都要求采用某種類型的隧道技術。隧道技術采用的是在公共互聯網絡的基礎設施上傳遞私有數據的方式。使用VPN傳遞的數據包可以是不同協議的數據幀或包,通過使用隧道協議將這些數據幀重新封裝在新的隧道數據包中發送。主要涉及3種協議,即隧道協議、承載協議和乘客協議。承載協議包把隧道協議包作為自己的數據部分來傳輸,隧道協議包又把乘客協議包作為自己的數據部分來傳輸。
根據封裝的層面不同可分為二層隧道和三層隧道,二層隧道協議主要有PPTP(Point-to-Point tunneling protocol)、L2F(Layer Two Forwarding protocol)、L2TP、MPLS(Multi-protocol Label Switching),三層隧道協議主要是IPSec。L2TP(Layer Two tunneling Protocol)是實現二層隧道VPN的主要技術,有L2TPV2和L2TPV3兩個版本[2]。目前廣泛使用的是L2TPV2,但是L2TPV2本身存在較多的局限性,由于其協議本身和二層PPP(Point to Point Protocol)協議有較多的關聯,導致其不便于對其它二層協議幀進行隧道傳輸,另外其非對稱工作模型也限制了它的應用范圍。
L2TP是在構造VPN網絡中最常用的一種二層隧道協議,該協議將網絡接入服務器NAS(Network Access Server)的功能分為LAC (L2TP Access Concentrator)和LNS(L2TP Network Server)來完成。目前有L2TPV2和L2TPV3兩個版本,L2TPV2主要還是針對二層PPP報文提出的隧道技術,它解決了PPP鏈路捆綁的問題,可以使物理上連接到不同NAS的PPP鏈路,在邏輯上終結在同一個物理設備上,實際上它是實現了PPP會話的終結點和PPP連接的終結點分離。在L2TPV3版本中把原來與PPP相關的內容分解出來放到專門的協議中描述,使得L2TPV3和封裝的二層報文類型無關,這樣就可以通過使用L2TP隧道完成所有的二層幀的傳輸。其次是對原有的舊版本的工作模式進行了擴展,由原來的主從式非對稱模式發展為對稱模式[3]。L2TPV3與L2TPV2兩個不同版本之間存在較大差異,首先,L2TPV2最初是基于PPP會話協議制定的,在L2TPV2報文頭中包含過多與PPP報文有關的信息,而在新版本中把所有與特定PPP數據報相關聯的分離,使得新版協議與所傳輸的報文類型沒有直接關系,便于傳輸多種形式的報文[4];其次,對L2TPV2所支持的隧道工作模式進行了擴展,不在是單一的LAC-LNS非對稱模式,而隧道兩端的設備連接關系可以是:LAC-LAC,LNS-LNS,LAC-LNS三種之一;最后L2TPV3報文中會話ID和控制連接ID增加到了32位,從而使支持的控制連接及會話數量由65000條激增到40億條以上。
本次開發是在L2TPD 0.69的基礎上,對原有的L2TPV2模塊代碼進行再開發實現的,雖然兩個版本之間有相當的差別,但是兩個版本的程序主體流程是相似的,在本次開放中將兩個版本的狀態機部分進行兼容設計,從而減少系統開發成本,提高了代碼重用性。考慮把L2TPV2和L2TPV3統一在同一個任務中實現,在細節處理上的不同,可以根據協議版本號來判斷分別做不同的處理。圖1是對L2TPV3和L2TPV2兩個協議的流程對比,圖中灰色部分表示處理細節上存在差異,白色背景表示相同。在開發是,需要針對灰色部分根據版本號分別實現,而其他部分則可以共用。
圖1 L2TPV2和L2TPV3處理上的異同
Fig.1 The differences between the processing of L2TPV2 and L2TPV3
L2TP模塊主要需要處理兩類數據,和對端LCCE之間交互的控制消息,來自用戶的需要通過隧道轉發的二層鏈路數據以及從隧道中接收到的需要轉發給本地用戶的隧道數據消息[5]。表1是L2TPV3模塊的輸入數據列表,表2是L2TPV3模塊的輸出數據列表。

表1 L2TPV3模塊輸入數據列表Tab.1 The input data list of L2TPV3 module

表2 L2TPV3模塊輸出數據列表Tab.2 The output data list of L2TPV3 module
L2TP數據報文中只是實現對用戶的二層幀的封裝和傳輸,不包含隧道的控制信息,故隧道數據報文的處理過程相對較為簡單。L2TP控制報文需要完成對于隧道和會話的建立、撤銷和維護,必須能夠攜帶大量的控制信息,所以控制報文需要完成對AVP屬性值對的編碼和解碼工作,如圖2所示。

圖2 頂層控制報文處理流程圖Fig.2 The flow-process diagram of top-level control message processing
數據結構是路由軟件功能實現和信息存儲及交互的基礎,在L2TPV3模塊中主要使用了3類數據。一種是用來存儲全局Tunnel信息的L2TPV3對象數據結構,該結構中保存了當前系統中所有的L2TPV3 Tunnel信息;另外一種用來存儲每一個Tunnel信息隧道數據結構;最后一種是用來保存Session信息的會話數據結構。3類數據結構之間的關系如圖3所示。

圖3 L2TPV3模塊數據結構圖Fig.3 The data struct of L2TPV3 module
根據L2TPV3協議描述,將L2TPV3的功能實現劃分為6個主要子模塊。報文收發模塊:該模塊主要接收來自其它模塊的的消息,主要包括從隧道中接收來自Peer LCCE的VPN報文通過二層接口轉發給本地VPN用戶;負責VPN隧道所需socket連接的建立和維護,以及通過socket收發數據;負責控制消息可靠傳輸機制的實現,包括對收發報文序號維護,收發窗口字節數維護以及控制報文收發隊列管理。報文處理模塊:處理從隧道中接收的來自對端LCCE的報文,含數據和控制報文;處理其它模塊發來的消息和事件;解析和構造需要通過隧道傳輸的L2TP報文。會話管理模塊:完成會話管理基本數據結構的初始化建立和維護;建立和維護每一個會話,SESSION狀態機的創建和維護SESSION相關控制消息的解析和構建;SESSION定時器的創建、維護。隧道管理模塊:完成控制連接數據結構的初始構建和維護;構建維護和撤銷每條隧道;實現和維護控制連接狀態機,處理和構造與控制連接相關控制消息;控制連接定時器的創建和維護。AVP處理模塊:對各種類別的AVP數據的構造和解析;對AVP值加密。配置管理模塊:提供相關命令配置接口,完成命令行輸入數據的解析處理。模塊間的調用關系如圖4所示。

圖4 模塊間調用關系Fig.4 The call relation of modules
1)L2TP_L2VPN_Output
函數原型:ULONG L2TP_L2VPN_Output(ULONG ulIfIndex,VOID*pData,ULONG ulDataLen)
該接口函數供L2TPV3模塊發送數據時調用,用來發送剝離L2TP頭的數據包(pData指向待接收數據)到索引為ulIfIndex的出接口。該函數內部調用軟轉發的發送函數DEV_Output實現。
2)L2TP_L2VPN_Input
函數原型:ULONG L2TP_L2VPN_Input(SKBUF_S*pSkBuf,ULONG ulToken)
在設置L2TPV3標志位的接口上接到報文時如果需要軟轉發則調用該接口函數轉發,當LCCE接到從eth口或VLAN口上來的鏈路層報文時,根據ulToken查找對應的tunnel和session,加上對應的l2tp頭和Ip頭,進行轉發。
3)L2TP3_SessionEventNotify
函數原型:LONG L2TP3_SessionEventNotify(L2TP3_SESSION_NOTIFY_S*pstSesNotify)
本函數負責下發session創建或撤銷通知,由L2TPV3模塊調用,需要由接口管理模塊實現具體函數功能。
4)IFM_IfChangeToL2TPV3和IFM_IfBackFromL2TPV3
函數原型:LONG IFM_IfChangeToL2TPV3(ULONG ulIfIndex)
LONG IFM_IfBackFromL2TPV3(ULONG ulIfindex)
該接口函數需要由接口管理模塊提供,L2TPV3模塊配置命令行時調用。用來設置(或清除)某以太網接口或VLAN接口為L2TPV3接口。
5)IFM_SetL2TPV3Enable和IFM_SetL2TPV3Disable
函數原型:LONG IFM_SetL2TPV3Enable (ULONG unIfIndex,ULONG ulSessID)
LONG IFM_SetL2TPV3Disable(ULONG unIfIndex)該接口函數由接口管理模塊提供,L2TPV3模塊在Session建立成功(或刪除)時調用,用來將Session ID與某個接口關聯(去關聯)起來,關聯后該接口可以通過L2TP轉發。ulSessID由接口管理保存,在軟轉發調用l2tpv3_lcce_receive時,傳回給L2TPV3模塊。
設計實現了一個兼容V2和V3版本的控制連接狀態機,兩個版本狀態機的不同主要是由于Tie breaker的不同處理而引起的,在V2版本中對控制連接Tie breaker的處理很簡單,但在V3版本中根據win和lose狀態多了不同的處理;在V2中并沒有Session Tie breaker,但在V3版本中引入了這個AVP,所以相應多了兩個處理。除了Tie breaker外,狀態機的其他部分幾乎完全相同。控制連接狀態機共有4個狀態:1)初始狀態,2)等待回復狀態,3)等待連接狀態,4)連接已建立狀態。控制連接狀態機能夠接收并處理16種事件,如表3所示,采用a到p 16個小寫字母來表示。控制連接狀態機根據事件的不同能夠激發八種動作,如表4所示,采用A到H 8個大寫字母來表示。而對于會話狀態機的設計由于和V2版本的實現變化不大,在此不作說明。

表3 控制連接狀態機輸入事件表Tab.3 The input event’s table of connection control state machine

表4 控制連接狀態機輸出動作表Tab.4 The output action’s table of connection control state machine
在L2TPV3模塊實現中重點考慮了和V2實現設備的兼容,實現方法是通過向對端發送一個特殊的SCCRQ報文,該報文的version值為2,并且包含一個或者是多個V3特有的AVP,強制位置0。這樣根據對端返回的SCCRP的版本判斷對端是否支持V3,如果對端支持V3必然會返回一個V3的SCCRP否則為V2。另外實現了在對端不支持L2TPV3,或者收到V2的SCCRQ報文時,本地自動向L2TPV2回退,自動回退工作流程如圖6所示。

圖5 L2TPV3控制連接狀態機Fig.5 The connection control state machine of L2TPV3
圖6 L2TPV3向L2TPV2自動回退的工作流程
Fig.6 The automatic rollback work flow of L2TPV3 to the L2TPV2
開發結束以后,在模擬環境下對L2TPV3的工作性能進行了測試,測試結果顯示系統的數據延遲、穩定性、丟包率都在合理范圍內,系統性能穩定,各項功能正常,基本達到了預定的開發目的。VPN[7-8]是當今社會企業網絡的發展趨勢,它能夠綜合開放網絡的共享性能和私有保護網絡的安全性,提供遠程訪問公共網絡和企業內部網的功能,而且建設和維護成本合理;隨著計算機信息技術的不斷發展,應用層面的不斷擴展,以及VPN實現技術的日益完善,越來越穩定、高速、安全的VPN實現技術會不斷出現。
[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,Functionality 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方案設計與實現[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技術在軍隊網絡建設中的應用[J].現代電子技術,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技術在電力企業廣域網中的應用[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.