亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux下L2TP網(wǎng)絡(luò)服務(wù)器設(shè)計

        2011-05-08 08:44:10伸桂林張新有
        鐵路計算機應(yīng)用 2011年3期
        關(guān)鍵詞:配置文件報文數(shù)據(jù)包

        伸桂林,張新有,李 波

        (西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 6 10031)

        虛擬專用網(wǎng)(VPN)是在公用網(wǎng)絡(luò)上建立專用網(wǎng)絡(luò)的技術(shù)。它通過依靠ISP和NSP,在公用網(wǎng)絡(luò)中建立專用的隧道,隧道將原有的數(shù)據(jù)包封裝到新的數(shù)據(jù)包內(nèi)部進行傳輸[1]。VPN的隧道主要可為第2層和第3層隧道,第2層隧道建立在數(shù)據(jù)鏈路層上,第3層隧道建立在網(wǎng)絡(luò)層上。L2TP協(xié)議[2]是建立在數(shù)據(jù)鏈路層的第2層隧道協(xié)議。

        1 L2TP隧道協(xié)議

        L2TP是由點到點隧道協(xié)議(PPTP)和第2層轉(zhuǎn)發(fā)協(xié)議(L2F)綜合發(fā)展而來,具有二者的優(yōu)點。即把傳統(tǒng)的遠程撥號網(wǎng)絡(luò)結(jié)構(gòu)中的第二層連接的端點和PPP會話端點分開,分別駐留在不同的設(shè)備上,通過包交換進行分組網(wǎng)絡(luò)連接。這種分離使得第2層連接可以在一個電路集中器上終止,通過共享網(wǎng)絡(luò)擴展邏輯PPP會話,不用在網(wǎng)絡(luò)訪問服務(wù)器(NAS)上終止,從而節(jié)省昂貴的長途話費。

        L2TP能支持IP、IPX、AppleTalk等多種網(wǎng)絡(luò)層協(xié)議,并提供流量控制機制,能夠完成輸入、輸出呼叫功能,提供MD5的加密算法和CHAP[3]競爭握手驗證機制來保證關(guān)鍵數(shù)據(jù)的安全性。

        1.1 L2TP原理

        L2TP一般采用客戶/服務(wù)器體系結(jié)構(gòu),由2個基本構(gòu)件組成:(1)L2TP訪問集中器LAC,用于發(fā)起呼叫和建立隧道,將撥號用戶的PPP幀封裝以后傳送到LNS當中;(2)服務(wù)器端的L2TP網(wǎng)絡(luò)服務(wù)器LNS,是PPP端系統(tǒng)上用于處理L2TP協(xié)議服務(wù)器端部分的軟件,同時也是所有隧道的終點。LAC將撥號用戶的PPP幀封裝后,傳送到LNS,后者去掉封裝包頭,取出PPP幀,再去掉PPP幀頭,最后獲得網(wǎng)絡(luò)層數(shù)據(jù)包。

        LNS和LAC之間存在著2種類型的連接:(1)隧道(tunnel)連接,在同一對LAC和LNS之間可以建立多個L2TP隧道,隧道由一個控制連接和一個或多個會話連接組成;(2)會話(Session)連接,它必須在隧道建立成功之后進行,每個它對應(yīng)于LAC和LNS之間的一個PPP數(shù)據(jù)流。L2TP連接的維護以及PPP數(shù)據(jù)的傳送都是通過L2TP消息的交換來完成。

        遠端計算機用戶通過LAC建立L2TP連接到LNS的整個運作過程如下[4]:

        (1)遠端計算機用戶通過公用電話網(wǎng)或ISDN撥號呼叫,啟動PPP連接,連接到LAC,LAC收到呼入信號,應(yīng)答請求建立一個PPP鏈路的連接。

        (2)LAC判斷用戶類型,若是去LNS的第2層隧道,則向LNS發(fā)送建立隧道連接請求。

        (3)LNS收到LAC請求后,建立一條控制連接隧道。根據(jù)配置文件來決定隧道建立過程中是否需要對LAC進行認證。隧道建立成功之后隨機分配一個隧道號Tunnel ID。

        (4)控制連接隧道建立以后,LAC和LNS開始協(xié)商建立PPP會話連接。PPP會話連接建立成功之后同樣隨機分配一個會話號Session ID。

        (5)來自遠端計算機的PPP包將由LAC通過L2TP封裝,以UDP包格式發(fā)送給LNS服務(wù)器,LNS用相反的進程拆解封裝后的PPP包轉(zhuǎn)發(fā)給本地的PPP服務(wù)器,再和內(nèi)部網(wǎng)絡(luò)產(chǎn)生通訊。

        1.2 L2TP的協(xié)議報文

        L2TP的協(xié)議結(jié)構(gòu)如圖1。L2TP消息分為2種類型:控制消息和數(shù)據(jù)消息??刂葡⒂糜谒淼篮蜁掃B接的建立、維護以及傳輸控制[5]。它的傳輸是可靠傳輸,并且支持對控制消息的流量控制和擁塞控制。數(shù)據(jù)消息用于封裝PPP幀,并在隧道上傳輸。它的傳輸是不可靠傳輸,若數(shù)據(jù)報文丟失,不予重傳,不支持對數(shù)據(jù)消息的流量控制和擁塞控制。數(shù)據(jù)消息用于承載用戶的PPP會話數(shù)據(jù)包。

        圖1 L2TP協(xié)議結(jié)構(gòu)

        由L2TP協(xié)議的結(jié)構(gòu)可知,PPP數(shù)據(jù)的L2TP封裝格式如圖2。

        圖2 L2TP封裝格式

        L2TP對控制消息的可靠傳輸是由控制消息頭中的收發(fā)序列號來實現(xiàn)的,在可靠的控制消息傳輸機制中提供了控制消息重傳和擁塞控制的滑動窗口機制,可完成報文重傳和重組等功能[6]。L2TP的控制消息和數(shù)據(jù)消息的頭格式相同,如圖3。在某個域可選的情況下,如果該域被標記為不存在,則在消息中不存在它的空間。但Length、Ns、Nr域在數(shù)據(jù)消息中可選,而在控制消息中則必須存在。2層隧道VPN中傳輸L2TP報文通過UDP的1701端口承載于TCP/IP之上來實現(xiàn)。

        圖3 L2TP報文頭格式

        2 L2TP服務(wù)器程序設(shè)計

        2.1 LNS程序流程

        L2TP服務(wù)器整個程序流程如圖4。

        圖4 LNS程序流程圖

        2.2 L2TP服務(wù)器功能模塊的架構(gòu)

        根據(jù)LNS的程序流程,本文把LNS服務(wù)器分為以下6個模塊。

        (1) 管理配置模塊

        管理配置文件包含L2TP基本參數(shù)和PPP的設(shè)定,如服務(wù)器的地址、用戶所得的IP范圍、用戶認證方式等。同時也定義一些基本的功能函數(shù)。本系統(tǒng)中用int init_config ()函數(shù)來初始化端口和監(jiān)聽地址等;int set_rtimeout (char *word, char*value, int context, void *item)檢測報文超時;init_addr ()初始化本地IP。LNS啟動后會首先調(diào)用管理配置文件模塊,讀取配置文件中的相應(yīng)參數(shù)進行初始化,然后處于監(jiān)聽狀態(tài)。

        (2) 網(wǎng)絡(luò)處理模塊

        L2TP的數(shù)據(jù)交換通過UDP來傳輸,本模塊主要用于接收來自LAC的UDP包,處理完UDP頭部后轉(zhuǎn)交給協(xié)議處理模塊,以及將來自協(xié)議處理模塊的數(shù)據(jù)封裝成UDP包,發(fā)送到指定的LAC。通過在Linux中建立套接字server_socket = socket(PF_INET, SOCK_DGRAM,0) 和綁定地址bind(server_socket, (struct sockaddr *) &server, sizeof(server))等函數(shù)可以實現(xiàn)UDP的接收和發(fā)送。UDP的報頭總共有8個字節(jié),通過read_packet(struct buffer *buf, int fd, int convert)讀取數(shù)據(jù)時可以去除UDP頭。

        (3) 協(xié)議處理模塊

        本模塊接收L2TP包,檢查L2TP協(xié)議的有效性,同時檢查L2TP數(shù)據(jù)包的序列號。收到的控制消息(圖3中T位為1)轉(zhuǎn)發(fā)給控制會話管理模塊處理;收到的數(shù)據(jù)消息(圖3中T位為0)則去掉L2TP頭轉(zhuǎn)發(fā)給PPP模塊處理。同時來自PPP模塊轉(zhuǎn)發(fā)過來需要發(fā)出的PPP數(shù)據(jù)消息則添加L2TP頭,轉(zhuǎn)發(fā)給LAC。

        (4) 控制會話管理模塊

        本模塊主要實現(xiàn)對隧道和會話的建立、維護、中止,決定是否建立隧道或會話,并且分配相應(yīng)的隧道和會話ID,以及相關(guān)AVP屬性值的封裝。處理來自LAC發(fā)送過來的控制消息,需要對用戶加入挑戰(zhàn)認證時,調(diào)用L2TP認證模塊。接收到控制消息后,調(diào)用do_control( )函數(shù)來處理,通過調(diào)用l2tp_call( )函數(shù)建立服務(wù)器和客戶端之間隧道,判斷消息的類型,然后轉(zhuǎn)入相應(yīng)的處理;以及判斷是否已經(jīng)存在隧道。最后產(chǎn)生隨機的隧道ID。

        (5) L2TP認證模塊

        本模塊用來對遠端用戶合法性進行pap或chap挑戰(zhàn)認證,判斷其合法性。采用MD5加密機制。LNS中先預(yù)配置了用戶名和密碼,當收到來自于LAC發(fā)送的包含用戶名的SCCRQ(Startcontrol-connection-Request)包時,LNS 生成一個挑戰(zhàn)值附加在回應(yīng)包SCCRP(Start-controlconnection-reply)中。LAC和LNS分別將產(chǎn)生的挑戰(zhàn)值、用戶名和密碼進行MD5加密轉(zhuǎn)換生成MD5摘要值,當LNS收到LAC發(fā)送回來的包含了MD5摘要值SCCCN(Start-control- connectionconnected)包時,將數(shù)據(jù)包中的MD5摘要值和LNS計算所得的摘要值進行比較,如果相同則通過認證。

        (6) PPP模塊

        PPP模塊主要用于和PPP服務(wù)器建立連接,負責轉(zhuǎn)發(fā)來自于LNS和PPP服務(wù)器之間的PPP數(shù)據(jù)幀。目前Linux已經(jīng)有比較成熟的PPPD服務(wù)器。PPPD服務(wù)器的通信是通過設(shè)備和MODOM間的通信,實現(xiàn)和PPPD間通訊的方法是修改PPPD程序內(nèi)核,將通信設(shè)備的數(shù)據(jù)流從核心層轉(zhuǎn)到用戶層上來,這種方法比較困難。本文采用字符偽終端設(shè)備/dev/ptyxy將終端的輸出定向到應(yīng)用程序中進行處理來實現(xiàn)PPPD與PPP模塊的通信[7]。

        具體實現(xiàn)中用start_pppd (struct session *c,struct ppp_opts *opts)函數(shù)來處理PPP連接,判斷是否打開偽終端設(shè)備;用execv (PPPD, stropt)函數(shù)來啟動PPPD用戶建立PPP鏈路;用read_packet (struct buffer *buf, int fd, int convert)函數(shù)負責從偽終端主設(shè)備讀取來自偽終端從設(shè)備的數(shù)據(jù);用inline int write_packet(structbuffer*buf,struct tunnel *t,struct session *c,int convert)函數(shù)負責向偽終端主設(shè)備寫入數(shù)據(jù)。

        2.3 主要數(shù)據(jù)結(jié)構(gòu)

        L2TP服務(wù)器的主要由隧道和會話組成,其中會話的建立又包括2個方面:呼入呼叫會話連接和呼出呼叫會話連接。因此為LNS服務(wù)器主要定義了3個數(shù)據(jù)結(jié)構(gòu):LNS、Tunnel和Session。其中一個LNS中可以存在多個Tunnel,而一個Tunnel中又同時可存在多個Session。Tunnel和Session為一個鏈表,數(shù)據(jù)結(jié)構(gòu)中分別定義了一個*next指針指向下一個隧道和會話。具體關(guān)系如圖5。

        圖5 L2TP主要數(shù)據(jù)結(jié)構(gòu)

        LNS保存服務(wù)器自身的相關(guān)信息,包括一些基本配置數(shù)據(jù):如本地IP、是否需要認證、允許連接的LAC ip地址、服務(wù)器所提供的IP范圍等。LNS數(shù)據(jù)結(jié)構(gòu)中有一個指向Tunnel數(shù)據(jù)鏈的指針*t,用來維護服務(wù)器的增加和減少隧道。

        Tunnel是一個鏈表,而會話又是包含在隧道一個結(jié)點的鏈表中,Tunnel結(jié)構(gòu)保存隧道的相關(guān)信息,為控制隧道提供狀態(tài)存儲參數(shù)。Tunnel中主要定義了:隧道狀態(tài)、隧道ID、會話總數(shù)、消息序列號、期望的消息序列號、接收窗口大小、對端窗口大小等等。同時Tunnel還定義了一個指向LNS的反向指針*lns,用于指示隧道屬于哪個LNS。

        Session保存會話的信息,為控制會話的數(shù)據(jù)通信提供參數(shù)保存位置。主要定義了:會話ID、會話狀態(tài)、會話超時時間、pppd的進程、本地呼叫號碼、對端呼叫號碼等。用struct timeval lastsent來記錄最后發(fā)送包的時間從而檢測會話是否超時。Session中定義了一個指向Tunnel的反向指針*tun,用于表明該會話所屬的隧道,為結(jié)束會話后隧道、會話的拆除提供方便。

        3 L2TP服務(wù)器的配置

        L2TP主要包含2個配置的文件:(1)配置LNS所用的配置文件,位于/etc/l2tp/l2tp.conf;(2)配置PPPD服務(wù)器所用的配置文件,位于/etc/l2tp/ppp-options.l2tp。

        LNS配置文件包括一個全局配置和參數(shù)配置,全局配置內(nèi)容放在[global]之后,主要設(shè)定監(jiān)聽的IP地址。參數(shù)配置內(nèi)容放在[lns default]之后,主要設(shè)定本地的IP地址,用戶可獲得的IP地址范圍,是否需要對客戶端進行pap、chap認證等。

        本文進行模擬測試時具體配置如下:

        [global]

        port = 1701;設(shè)置L2TP服務(wù)器端口號

        [lns default]

        allocate ip range = 192.168.1.100-192.168.1.110;給客戶端分配的ip地址范圍connect ip range = 192.168.1.40-192.168.1.90;允許連接LNS服務(wù)器的ip地址范圍

        local ip = 192.168.1.17 ;本地ip地址

        require chap = yes ;要求chap認證

        require authentication = yes

        pppoptfile = /etc/ppp/options.l2tp

        PPPD服務(wù)器配置文件主要設(shè)定給客戶端分配的主DNS服務(wù)器和第二DNS服務(wù)器地址,以及連接延時時長等。

        4 測試實例

        本文對L2TP服務(wù)器進行了簡單的模擬測試,測試環(huán)境是用一臺電腦作為LAC,采用的是Windows XP環(huán)境下配置的L2TP虛擬撥號。另外一臺電腦作為LNS,運行在red hat enterprise linux 5--kernel 2.6.18的環(huán)境當中。

        程序測試結(jié)果顯示LAC的IP地址為192.168.1.45,LNS的IP地址為192.168.1.17。初始狀態(tài)下LAC的隧道ID和會話ID都為0。會話號和隧道號為0是特殊的值,它不能作為隨機值被分配為隧道ID和會話ID。在建立新的會話階段,對端的會話ID還沒有分配,此時對方會話ID為0。當LNS驗證LAC發(fā)送SCCCN報文后隨機分配隧道ID58809。會話連接還沒有建立,會話ID仍為0。LNS回應(yīng)LAC建立會話連接的請求,發(fā)送ICCN后隨機分配了會話ID42319。

        5 結(jié)束語

        分析L2TP工作原理以及協(xié)議報文的結(jié)構(gòu),設(shè)計并實現(xiàn)基于2層隧道協(xié)議的L2TP服務(wù)器模塊,詳細描述了設(shè)計方法、步驟以及相關(guān)數(shù)據(jù)結(jié)構(gòu)。并用Windows下的LAC與所設(shè)計的服務(wù)器進行了連接測試,抓包分析了LNS與LAC之間控制連接和會話連接的建立。本文在實現(xiàn)過程中沒有加入IPsec的安全保護,因此不能有效地保護控制連接和數(shù)據(jù)隧道中的報文,有待進一步探討IPsec并加入到L2TP的實現(xiàn)中。

        [2]PPP Challenge Handshake Authentication Protocol (CHAP)[S]. RFC 1994 August1996.

        [3] 王延年. 隧道及其應(yīng)用技術(shù)的研究[J]. 鄭州大學(xué)學(xué)報(自然科學(xué)版),2001(3).

        [4] 羅 婷,張穎江,陳 雯. 虛擬專用網(wǎng)的二層隧道協(xié)議研究及實現(xiàn)[J].湖北工學(xué)院學(xué)報,2001.

        [5]周 殊,潘 煒. 基于二層隧道協(xié)議的虛擬專用網(wǎng)研究[J].計算機應(yīng)用,2007(6).

        [6]Yan Niu,Jun Li,Dong Li. The Application of Linux Pseudoterminal Device in the L2TP[J]. Third International Symposium on Intelligent Information Technology Application, 2009.

        猜你喜歡
        配置文件報文數(shù)據(jù)包
        基于J1939 協(xié)議多包報文的時序研究及應(yīng)用
        汽車電器(2022年9期)2022-11-07 02:16:24
        提示用戶配置文件錯誤 這樣解決
        CTCS-2級報文數(shù)據(jù)管理需求分析和實現(xiàn)
        搭建簡單的Kubernetes集群
        互不干涉混用Chromium Edge
        淺析反駁類報文要點
        中國外匯(2019年11期)2019-08-27 02:06:30
        SmartSniff
        忘記ESXi主機root密碼怎么辦
        ATS與列車通信報文分析
        基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計與實現(xiàn)
        长腿校花无力呻吟娇喘的视频 | 精品国产日韩亚洲一区在线| 国产精品18久久久白浆| 亚洲国产成人片在线观看无码| 国产精品开放小视频| 亚洲免费不卡av网站| 亚洲毛片免费观看视频| 18禁黄网站禁片免费观看女女| 日韩成人无码一区二区三区| 麻豆人妻无码性色AV专区| 免费人妖一区二区三区| 午夜精品久久久久久久无码| 亚洲国产美女精品久久久久| 无码人妻精品中文字幕免费| 一区二区二区三区亚洲| 蜜桃日本免费看mv免费版| 最新国产乱视频伦在线| 日韩精品夜色二区91久久久 | 少妇做爰免费视频了| 国产露脸精品产三级国产av| 亚洲av永久无码精品成人| 91九色国产老熟女视频| 日韩精品一区二区午夜成人版| 无码中文字幕在线DVD| 亚洲中文字幕永久网站| 成人影片麻豆国产影片免费观看| 成人性做爰aaa片免费看| 无码国产精品一区二区AV| 国产日产韩国级片网站| 香蕉免费一区二区三区| 午夜AV地址发布| 人妻熟女中文字幕在线视频 | 少妇高潮一区二区三区99| 国产鲁鲁视频在线播放| 久久综合这里只有精品| 久久精品99国产精品日本| 成人性生交片无码免费看| 18禁国产美女白浆在线| 极品尤物精品在线观看| 亚洲av国产精品色午夜洪2| 久久久久一|