IPsec 講解

IPsec之通俗詳解

 IPSEC是一套比較完整成體系的***技術,它規定了一系列的協議標準。如果不深入探究IPSEC的過於詳細的內容,我們對於IPSEC大致按照以下幾個方面理解。 

1. 爲什麼要導入IPSEC協議 
導入IPSEC協議,原因有2個,一個是原來的TCP/IP體系中間,沒有包括基於安全的設計,任何人,只要能夠搭入線路,即可分析所有的通訊數據。IPSEC引進了完整的安全機制,包括加密、認證和數據防篡改功能。

另外一個原因,是因爲Internet迅速發展,接入越來越方便,很多客戶希望能夠利用這種上網的帶寬,實現異地網絡的的互連通。

IPSEC協議通過包封裝技術,能夠利用Internet可路由的地址,封裝內部網絡的IP地址,實現異地網絡的互通。

2. 包封裝協議 
設想現實一種通訊方式。假定發信和收信需要有身份證(成年人才有),兒童沒有身份證,不能發信收信。有2個兒童,小張和小李,他們的老爸是老張和老李。現在小張和小李要寫信互通,怎麼辦?

一種合理的實現方式是:小張寫好一封信,封皮寫上 "小張-->小李", 然後給他爸爸,老張寫一個信封,寫上“老張-->老李”,把前面的那封信套在裏面,發給老李,老李收到信以後,打開,發現這封信是給兒子的,就轉給小李了。小李回信也一樣,通過他父親的名義發回給小張。 
這種通訊實現方式要依賴以下幾個因素: 
* 老李和老張可以收信發信 
* 小張發信,把信件交給老張。 
* 老張收到兒子的來信以後,能夠正確的處理(寫好另外一個信封),並且重新包裝過的信封能夠正確送出去。 
* 另外一端,老李收到信拆開以後,能夠正確地交割小李。 
* 反過來的流程一樣。 
把信封的收發人改成Internet上的IP地址,把信件的內容改成IP的數據,這個模型就是IPsec的包封裝模型。小張小李就是內部私網的IP主機,他們的老爸就是***網關,本來不能通訊的兩個異地的局域網,通過出口處的IP地址封裝,就可以實現局域網對局域網的通訊。

引進這種包封裝協議,實在是有點不得已。理想的組網方式,當然是全路由方式。任意節點之間可達(就像理想的現實通訊方式是任何人之間都可以直接寫信互通一樣)。

Internet協議最初設計的時候,IP地址是32位,當時是很足夠了,沒有人能夠預料到將來Internet能夠發展到現在的規模(相同的例子發生在電信短消息上面,由於160字節的限制,很大地制約了短消息的發展)。按照2的32次方計算,理論上最多能夠容納40億個左右IP地址。這些IP地址的利用是很不充分的,另外大約有70%左右的IP地址被美國分配掉了(誰讓人家發明並且管理Internet呢?)所以對於中國來說,可供分配的IP地址資源非常有限。

既然IP地址有限,又要實現異地lan-lan通訊,包封包,自然是最好的方式了。

3.安全協議(加密) 
依然參照上述的通訊模型。 
假定老張給老李的信件要通過郵政系統傳遞,而中間途徑有很多好事之徒,很想偷看小張和小李(小張小李作生意,通的是買賣信息)通訊,或者破壞其好事。 
解決這個問題,就要引進安全措施。安全可以讓小李和小張自己來完成,文字用暗號來表示,也可以讓他們的老爸代勞完成,寫好信,交給老爸,告訴他傳出去之前重新用暗號寫一下。

IPSEC協議的加密技術和這個方式是一樣的,既然能夠把數據封裝,自然也可以把數據變換,只要到達目的地的時候,能夠把數據恢復成原來的樣子就可以了。這個加密工作在Internet出口的***網關上完成。

4.安全協議(數據認證) 
還是以上述通訊模型爲例,僅僅有加密是不夠的。 
把數據加密,對應這個模型中間,是把信件的文字用暗號表示。

好事之徒無法破解信件,但是可以僞造一封信,或者胡亂把信件改一通。這樣,信件到達目的地以後,內容就面目全非了,而且收信一方不知道這封信是被修改過的。

爲了防止這種結果,就要引入數據防篡改機制。萬一數據被非法修改,能夠很快識別出來。這在現實通訊中間可以採用類似這樣的算法,計算信件特徵(比如統計這封信件的筆劃、有多少字),然後把這些特徵用暗號標識在信件後面。收信人會檢驗這個信件特徵,由於信件改變,特徵也會變。所以,如果修改人沒有暗號,改了以後,數據特徵值就不匹配了。收信人可以看出來。

實際的IPSEC通訊的數據認證也是這樣的,使用md5算法計算包文特徵,報文還原以後,就會檢查這個特徵碼,看看是否匹配。證明數據傳輸過程是否被篡改。

5.安全協議(身份認證) 
還是假定小張小李通訊模型。 
由於老張和老李不在一個地方,他們互相不能見面,爲了保證他們兒子通訊的安全。老張和老李必須要相互確認對方是否可信。這就是身份認證問題。

假定老李老張以前見過面,他們事先就約定了通訊暗號,比如1234567890對應abcdefghij, 那麼寫個255,對應就是一個bee。

常見的***身份認證可以包括預共享密鑰,通訊雙方實現約定加密解密的密碼,直接通訊就可以了。能夠通訊就是朋友,不能通訊就是壞人,區分很簡單。

其他複雜的身份認證機制包括證書(電子證書比如x509之類的),比較羅裏羅嗦,這裏就不具體展開了,怕有兄弟看了打瞌睡。如果需要,可以找我要更具體的技術白皮書以及相關的身份認證文檔。

如果有身份認證機制,密鑰的經常更換就成爲了可能。

6.其他 
解決了上述的幾個問題,基本可以保證***通訊模型能夠建立起來了。 
但是並不完美,這是最簡單的***。即通過對端兩個靜態的IP地址,實現異地網絡的互聯。美國的很多***設備就作到這一級,因爲美國IP地址充裕,分配靜態IP地址沒有問題。苦的是我等中國客戶,2端都需要靜態IP地址,相當於2根Internet專線接入。 
***要在中國用起來,還要解決一堆的相關問題。。

IPSEC通過包封裝包的方法,通過Internet建立了一個通訊的隧道,通過這個通訊的隧道,就可以建立起網絡的連接。但是這個模型並非完美,仍然有很多問題需要解決。

在講述其他問題以前,我們對***定義幾個概念。

***節點:一個***節點,可能是一臺***網關,也可能是一個客戶端軟件。在***組網中間,屬於組網的一個通訊節點。它應該能夠連接 Internet,有可能是直接連接,比如adsl、電話撥號等等,也可能是通過nat方式,例如:小區寬帶、cdma上網、鐵通線路等等。

***隧道:在兩個***節點之間建立的一個虛擬鏈路通道。兩個設備內部的網絡,能夠通過這個虛擬的數據鏈路到達對方。與此相關的信息是當時兩個***節點的IP地址,隧道名稱、雙方的密鑰。

隧道路由:一個設備可能和很多設備建立隧道,那麼就存在一個隧道選擇的問題,即到什麼目的地,走哪一個隧道?

用前面的通訊模型來說,老李老張就是隧道節點,他們通過郵政系統建立的密碼通訊關係,就是一個數據隧道,小張和小李把信發給他們老爸的時候,他們老爸要作出抉擇,這封信怎麼封裝,封裝以後送給誰。假如還有一個老王和他們的兒子,也要通訊,這時候隧道路由就比較好理解了。送給小王的數據,就封裝給老王,送給小李的數據,就封裝發給老李。如果節點非常多,那麼這個隧道路由就會比較複雜。

理解了以上的問題,我們就知道,ipsec要解決的問題其實,可以分爲以下幾個步驟: 
 找到對方***節點設備,如果對方是動態IP地址,那麼必須能夠通過一種有效途徑能夠及時發現對方IP地址的變化。按照通訊模型,就是老李老張如果經常搬家的話,必須有一個有效的機制,能夠及時發現老李老張地址的變化。 
建立隧道,建立隧道說起來簡單,作起來不容易。如果兩個設備都有合法的公網IP,那麼建立一個隧道是比較容易的。如果一方在nat之後,那就比較羅嗦了。一般通過內部的***節點發起一個udp連接,再封裝一次ipsec,送到對方,因爲udp可以通過防火牆進行記憶,因此通過udp再封裝的ipsec 包,可以通過防火牆來回傳遞。 
 建立隧道以後,就確定隧道路由,即到哪裏去,走哪個隧道。很多***隧道配置的時候,就定義了保護網絡,這樣,隧道路由就根據保護的網絡關係來決定。但是這喪失了一定的靈活性。

所有的ipsec ***展開來講,實現的無非就是以上幾個要點,具體各家公司,各有各的做法。但是可以肯定,目前在市場銷售的***,肯定都已經解決了以上的問題。

第一個問題 怎樣找到***節點設備。

假如設備都是動態撥號方式的話,那麼一定需要一個合適的靜態的第三方來進行解析。相當於兩個總是不停搬家的人,要合適找到對方,一定需要一個大家都認識的朋友,這個朋友不搬家,兩個人都能夠聯繫上他。

靜態的第三方,常見的有3種實現方式:

通過網頁,這是深信服公司發明的一種技術,通過Web頁解析ip地址。大家可以登錄一下http://www.123cha.com/ ,就可以查找到當前的IP地址。因此,動態的設備,可以通過這種方式,把自己當前的IP地址提交上去。其他設備可以通過網頁再查詢回來。這樣,設備之間就可以互相通過這個網頁找到。因爲網頁是相對固定的,所以這種方式能夠很有效地解決這個問題。這種方式能夠有效地分散集中認證的風險,而且很容易實現備份,屬於比較巧妙的一種解決方案。當然,對於Web頁可能存在比較多的***,因此,要注意安全防範。

通過一個集中的服務器,實現統一解析,然後給用戶進行分組。每個***設備只能看到同組的其他設備,不能跨組訪問。也可以通過目錄服務器實現。這種方式適合集中式的***,在企業總部部署服務器,實現全局設備的統一認證和管理。它不太適合零散用戶的認證,因爲存在一個信任問題,客戶會置疑管理服務器如果出現了問題,有可能其他設備就能夠連接到自己的***域裏面。這種大型的集中***管理軟件,在很多國內外的***廠商都有專門的設備或軟件,它除了能夠進行動態IP地址解析,還能夠實現在線認證等等功能。如果管理中心比較職能的話,可以集中制訂通訊策略,下面的***設備配置參數比較少。

還有一種方式,是DDNS,即動態域名。動態域名是一種相對比較平衡的技術。***設備撥號以後,把自己當前的IP地址註冊給一級域名服務器,並且更新自己的二級域名IP地址,internet其他用戶,通過這個二級域名就可以查找到它。例如:動態域名服務器的名稱是99ip.net,是abc. 99ip.net,則***設備通過一個軟件,提交給服務器,把abc.99ip.net,漂移成當前的IP地址。但是,有時也會遇到dns緩存問題。 ***廠家如果自身提供ddns服務的話,就可以通過內部協議,把查詢速度加快,並且避免dns緩衝帶來的問題。

以上講述了三種動態IP地址的解析方法,國內一般廠家提供的無外乎這幾種方法。如果再有比較偏門的技術,也許就不是主流技術了。

解決了動態IP地址問題,按照之前的通訊模型,不考慮***設備很多的情況,就可以組網。因此,一旦這種技術被越來越多的廠家掌握,基於IPsec ***設備和軟件是一定會價格下降的。It技術從朝陽變成夕陽就是轉眼之間的事情。

第二個問題 隧道如何建立 
解決了Ip地址動態尋址的問題,現在來說一下Nat穿越的問題。我們知道,Udp和TCP是可以穿越防火牆的。直接的IPsec封裝,不能穿越防火牆,因爲防火牆需要更改端口信息,這樣回來的數據包,才能轉到正確的內部主機。用UDP顯然比較合適,因爲使用tcp的話,不僅三次握手佔據時間很長,而且還有來回的確認。而實際上,這些工作屬於ipsec內部封裝的報文要乾的事情,放在這裏完成是不合適的。因此,用udp來封裝ipsec報文,以穿越nat,幾乎是唯一可以選擇的方案。

用udp穿越nat防火牆,這隻解決了問題的一半,因爲這要求至少有一方處於Internet公網上面。有可路由的IP地址。而有時會發生兩個***節點都在nat之後的情景,這隻能通過第三方轉發來完成。即兩個設備都可以與第三方設備互通,第三方設備爲雙方進行轉發。這個可以通過之前的模型解析,老張老李不能直接通訊,他們都可以與老王通訊,老王就可以在中間進行轉發。凡是小李小張的通訊,交給他們老爸以後,老王最後再進行轉交。這是隧道路由的概念就很清晰了,不能一個隧道直接到達,可以在幾個隧道之間轉發。

所以,IPsec ***並不神祕。所有核心的工作無非就是圍繞以下幾個方面展開: 
 如何找到與本***節點相關的其他節點。 
 協商出一個可以通訊的隧道。如果是nat之後,應該怎麼處理。 
 建立隧道路由表,確定不同的目標地址,走不同的隧道。

假定以上的問題都得到了解決,通過某種方式,動態IP地址的***節點可以相互找到對方,並且能夠建立隧道,因此也能夠實現隧道路由通訊。是不是一個完整的***就能夠實現了呢??

答案仍然是否,解決了以上問題,並不代表一個很好用的***產品,仍然有其他很多問題。之後的問題是圍繞着複雜性展開的,簡單的原理實現之後,剩下的工作就是要解決掉全部相關的邊緣問題。才能夠實現一個好用的東西。能夠用是一回事,好用是另外一回事。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章