Linux中IP隧道的分析與建議_第1頁
Linux中IP隧道的分析與建議_第2頁
Linux中IP隧道的分析與建議_第3頁
Linux中IP隧道的分析與建議_第4頁
Linux中IP隧道的分析與建議_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Linux中IP隧道的分析與建議隨著計算機網絡的日益普及,網絡的安全成為目前的熱門話題。本文以Linux2.0.34(RedHat5.2采用)為基礎,對隧道技術進行分析,并側重安全領域對在Linux環(huán)境下利用隧道技術實現(xiàn)虛擬專網提出建議。為什么需要IP隧道?沒有接觸過這個概念的人自然會提出這樣的疑問。實際上概念最初的提出很簡單,就是為了在TCP/IP網絡中傳輸其他協(xié)議的數(shù)據包。設想一下IPX協(xié)議或X.25封裝的數(shù)據包如何通過Internet網進行傳輸,在已經使用多年的橋接技術中是通過在源協(xié)議數(shù)據包上再套上一個IP協(xié)議頭來實現(xiàn)的,形成的IP數(shù)據包通過Internet后卸去IP頭,還原成源協(xié)議數(shù)據包,再傳送給目的站點。對源協(xié)議數(shù)據來說,就如同被IP帶著過了一條隧道。這種技術在業(yè)余無線網絡(AmateurPacketRadioNetwork)中得到了廣泛的應用,目前的移動式IP(mobileIP)技術已經在此基礎上得到了很好的發(fā)展。利用IP隧道來傳送的協(xié)議包也包括IP數(shù)據包,本文主要分析的IPIP封包就是如此。所謂IPIP,就是把一個IP數(shù)據包又套在一個IP包里。為什么要這么做呢?其實并非多此一舉。見過一些應用就會明白,移動IP(Mobile-IP)和IP多點廣播(IP—Multicast)是兩個典型的例子。目前,IP隧道技術在構筑虛擬專網(VPN,VirtualPrivateNetwork)中也顯示了出極大的生命力。本文也將對利用IP隧道技術構筑VPN做簡單設想。IP隧道的多種理解和實現(xiàn)Internet的研究者多年前就感到需要在網絡中建立隧道,最初的理解是在網絡中建立一條固定的路徑,以繞過一些可能失效的網關??梢哉f,隧道就是一條特定的路徑。這樣的隧道是通過IP報頭中的源路由選項來實現(xiàn)的。在目前看來,這種方法的缺陷十分明顯。要設置源路由選項就必須知道數(shù)據包要經過的確切路徑,而目前多數(shù)路由實現(xiàn)中都不支持源路由。另一種實現(xiàn)隧道的機制是開發(fā)一種新的IP選項,用來表明源數(shù)據包的信息,原IP頭可能成為此選項的一部分。這種隧道的意義與我們所說的隧道已十分接近。但它的不足在于要對目前IP選項的實現(xiàn)和處理做較大的修改,此外它還缺乏靈活性。最常用的一種實現(xiàn)方法是開發(fā)一種新的IP封包(encapsulation)協(xié)議,仍然套用當前的IP頭格式。通過IP封包,不須指明網絡路徑,封包就能透明地到達目的地。也可以通過封包空間把未直接連接的機器綁在一起,從而創(chuàng)建虛擬網絡。這種方法易行、可靠、可擴展性強。Linux采用了這一方法,這就是目前我們所理解的隧道思想。封包協(xié)議結構封包協(xié)議的實現(xiàn)原理十分簡單,從圖一中可以看到通過隧道傳送的數(shù)據報在網絡中是如何流動的。為了敘述簡便,下文中把在隧道中傳送的IP數(shù)據包稱為封包。

圖一封包協(xié)議實現(xiàn)模型圖一中的設備#都處于隧道的兩端(中間的(祥)設備只做簡單的轉發(fā)),分別起打包(封裝)和解包(解封)的作用。在整個數(shù)據包的傳送路徑中,除了隧道兩端的#設備,其他網關把數(shù)據包看成一個普通的IP包進行轉發(fā)。設備#就是一個基于封包的兩個實現(xiàn)部件 封裝部件和解封部件。封裝和解封部件(設備)都應當同時屬于兩個子網。封裝部件對接收到的數(shù)據報加上封包頭,然后以解封部件地址作為目的地址轉發(fā)出去;而解封部件則在收到封包后,還原為數(shù)據報,轉發(fā)到目的子網。隧道的源端(封裝部件)對進入隧道的數(shù)據包進行封裝,形成封包。圖二是一個完整的封包示意圖。封包IP頭封包協(xié)議頭原協(xié)議頭原協(xié)議數(shù)據圖二封包結構Linux封包實現(xiàn)在Linux中,隧道的實現(xiàn)主要涉及兩個文件:new-tunnel.c和ipip.c。另外,Linux還定義了一種新的協(xié)議類型 IPIP(IPPROTO-IPIP),它類似于上面所說的封包類型。在Linux中IPTunnel的實現(xiàn)也分為兩個部件:封裝部件和解封部件,分別司職發(fā)送和接收。但這兩個部件是在不同的層次上以不同的方式實現(xiàn)的。封裝部件是在數(shù)據鏈路層以虛設備的方式實現(xiàn)的,所有源代碼見:/usr/src/linux/drivers/net/new-tunnel.c為實現(xiàn)封裝,Linux實現(xiàn)一個稱為tunl的網絡設備(類似于loopback設備),它具有其他網絡設備共有的特征。對于使用此設備的上層應用來說,對這些網絡設備不加區(qū)分,調用及處理方法當然也完全一樣。new-tunnel.c中的兩個主要過程是tunnel-init()和tunnel-xmit(),其中tunnel-init()初始化與設備tunl相關的device結構,而tunnel-xmit()在從tunl設備發(fā)送數(shù)據時被調用,tunl設備作為實現(xiàn)IP隧道技術的封裝部分,在此過程中完成對相應的數(shù)據報進行封裝所需的全部操作,形成IPIP類型的IP包,并重新轉發(fā)此數(shù)據包(ip-forward())。解封部件在IP的上層實現(xiàn),系統(tǒng)把它作為一個虛的傳輸層(實際上與傳輸層毫無關系),具體處理見文件:/usr/src/linux/net/ipv4/ipip.c。我們知道,每一個IP數(shù)據包均交給ip-rcv函數(shù)處理,在進行一些必要的判斷后,ip-rcv對于發(fā)送給本機的數(shù)據包將交給上層處理程序。對于IPIP包來說,其處理函數(shù)是ipip-rcv(與TCP包的處理函數(shù)tcp-rcv一樣,IP層不加區(qū)分)。也就是說,當一個目的地址為本機的封包到達后,ip-rcv函數(shù)進行一些基本檢查并除去IP頭,然后交由ipip-rcv解封。ipip-rcv的作用就是去掉封包頭,還原數(shù)據包,然后把還原后的數(shù)據包放入相應的接收隊列(netif-rx())中。上述的IPTunnel實現(xiàn)思路十分清晰,但由于IPTunnel的特殊性,其實現(xiàn)的層次并不單純。它的封裝和解封部件不能簡單地像上面所說的那樣分層。tunl設備雖然應算進鏈路層,但其發(fā)送程序還做了很多其他的工作,如制作IPIP頭及新的IP頭(這些一般認為是傳輸層或網絡層的工作)。調用ip-forward轉發(fā)新包也不是一個網絡設備應當做的事??梢哉f,tunl借網絡設備之名,做的工作卻很多,因此相當'高效”。而解封部件宏觀上看在網絡層之上,解出IPIP頭,恢復原數(shù)據包是它分內的事,但在它解出數(shù)據包(即原完整的協(xié)議數(shù)據包)后,它把這個包放入相應的協(xié)議接收隊列。這項任務可不是一個上層協(xié)議干的,這是網絡設備中斷接收程序的義務。在這點上,它好像又到了數(shù)據鏈路層。隧道機制就是這樣的。為實現(xiàn)VPN的擴展實際上Linux只為實現(xiàn)隧道機制提供了一個框架,圖二中的封包協(xié)議頭在Linux中被忽略了,也就是說,封包頭只含封包IP頭,其后緊跟原IP數(shù)據包。這樣的結構用于傳輸公開數(shù)據沒有關系,但對于一個VPN來說,安全保密是不可缺少的重要功能。我們希望通過隧道的數(shù)據可靠且不可竊取或假冒,因此加密和認證就必不可少。為實現(xiàn)這一構想,可設計以下封包協(xié)議頭:163116verWenOl^PackctknDcviccIDEncapIDFlagsC&ckSumIPIP if)padding圖三IPIP頭設想圖其中type用于建立不同目的的隧道(可能處理上有差別),OldPacketLen是進入隧道的原數(shù)據包長度,DevicelD是對數(shù)據包進行封裝的設備標識,EncapID是此封包的ID號,F(xiàn)lags是標志位,初步定義如下:0保留1有否加密2有否做摘要3有否簽名4保留5是否傳送消息密鑰6消息密鑰是否加密7消息密鑰是否需保留8—15保留IPIPOptions用來傳送一些必要的數(shù)據,比如消息密鑰、簽名等,其格式為,類型長度數(shù)據有了上述定義,就可以擴展LinuxIPTunnel為VPN服務了。首先,改寫new-tunnel.c和ipip.c兩個文件,加入對IPIP頭的處理。然后,要實現(xiàn)一種密鑰的管理和傳送機制。當然,對稱密鑰是必需的,而對IP數(shù)據包加密要使用序列密碼。在一個VPN的隧道中,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論