• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2011-05-08 08:44:10伸桂林張新有
      關(guān)鍵詞:配置文件報(bào)文數(shù)據(jù)包

      伸桂林,張新有,李 波

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

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

      1 L2TP隧道協(xié)議

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

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

      1.1 L2TP原理

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

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

      遠(yuǎn)端計(jì)算機(jī)用戶通過(guò)LAC建立L2TP連接到LNS的整個(gè)運(yùn)作過(guò)程如下[4]:

      (1)遠(yuǎn)端計(jì)算機(jī)用戶通過(guò)公用電話網(wǎng)或ISDN撥號(hào)呼叫,啟動(dòng)PPP連接,連接到LAC,LAC收到呼入信號(hào),應(yīng)答請(qǐng)求建立一個(gè)PPP鏈路的連接。

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

      (3)LNS收到LAC請(qǐng)求后,建立一條控制連接隧道。根據(jù)配置文件來(lái)決定隧道建立過(guò)程中是否需要對(duì)LAC進(jìn)行認(rèn)證。隧道建立成功之后隨機(jī)分配一個(gè)隧道號(hào)Tunnel ID。

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

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

      1.2 L2TP的協(xié)議報(bào)文

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

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

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

      圖2 L2TP封裝格式

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

      圖3 L2TP報(bào)文頭格式

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

      2.1 LNS程序流程

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

      圖4 LNS程序流程圖

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

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

      (1) 管理配置模塊

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

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

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

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

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

      (4) 控制會(huì)話管理模塊

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

      (5) L2TP認(rèn)證模塊

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

      (6) PPP模塊

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

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

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

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

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

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

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

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

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

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

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

      本文進(jìn)行模擬測(cè)試時(shí)具體配置如下:

      [global]

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

      [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認(rèn)證

      require authentication = yes

      pppoptfile = /etc/ppp/options.l2tp

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

      4 測(cè)試實(shí)例

      本文對(duì)L2TP服務(wù)器進(jìn)行了簡(jiǎn)單的模擬測(cè)試,測(cè)試環(huán)境是用一臺(tái)電腦作為L(zhǎng)AC,采用的是Windows XP環(huán)境下配置的L2TP虛擬撥號(hào)。另外一臺(tái)電腦作為L(zhǎng)NS,運(yùn)行在red hat enterprise linux 5--kernel 2.6.18的環(huán)境當(dāng)中。

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

      5 結(jié)束語(yǔ)

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

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

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

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

      [5]周 殊,潘 煒. 基于二層隧道協(xié)議的虛擬專用網(wǎng)研究[J].計(jì)算機(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.

      猜你喜歡
      配置文件報(bào)文數(shù)據(jù)包
      基于J1939 協(xié)議多包報(bào)文的時(shí)序研究及應(yīng)用
      汽車電器(2022年9期)2022-11-07 02:16:24
      提示用戶配置文件錯(cuò)誤 這樣解決
      CTCS-2級(jí)報(bào)文數(shù)據(jù)管理需求分析和實(shí)現(xiàn)
      搭建簡(jiǎn)單的Kubernetes集群
      互不干涉混用Chromium Edge
      淺析反駁類報(bào)文要點(diǎn)
      SmartSniff
      忘記ESXi主機(jī)root密碼怎么辦
      ATS與列車通信報(bào)文分析
      基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計(jì)與實(shí)現(xiàn)
      东海县| 沛县| 遂平县| 铜陵市| 延边| 榕江县| 获嘉县| 得荣县| 乌兰察布市| 玉林市| 玉树县| 军事| 会理县| 阳原县| 香格里拉县| 郸城县| 隆化县| 徐水县| 辽阳市| 嵩明县| 上高县| 蛟河市| 清苑县| 库车县| 崇阳县| 于都县| 万宁市| 闽清县| 榆林市| 项城市| 县级市| 唐山市| 武冈市| 辽阳县| 平乡县| 田林县| 崇州市| 崇明县| 泽州县| 紫阳县| 依兰县|