日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux中IP隧道的分析與建議( 三 )



一個目的地址為本機的封包到達后 , ip_rcv函數(shù)進行一些基本檢查并除去IP頭 , 然后

交由ipip_rcv解封 。

ipip_rcv所做的工作就是去掉封包頭 , 還原數(shù)據(jù)包 , 然后把還原后的數(shù)據(jù)包放入相應的

接收隊列(netif_rx()) 。



從以上IP;Tunnel實現(xiàn)的思想來看 , 思路十分清晰 , 但由于IP;Tunnel的特殊性 , 其

實現(xiàn)的層次并不單純 。實際上 , 它的封裝和解封部件不能簡單地象上面所說的那樣

分層 。tunl設備雖應算進鏈路層 , 但其發(fā)送程序中做了更多的工作 , 如制作IPIP頭

及新的IP頭(這些一般認為是傳輸層或網(wǎng)絡層的工作) , 調用ip_forward轉發(fā)新包

也不是一個網(wǎng)絡設備應當做的事 。可以說 , tunl借網(wǎng)絡設備之名 , 一把抓干了不少

工作 , 真是‘高效’ 。而解封部件宏觀上看在網(wǎng)絡層之上 , 解出IPIP頭 , 恢復原數(shù)據(jù)包

是它分內的事 , 但在它解出數(shù)據(jù)包(即原完整的協(xié)議數(shù)據(jù)包)后 , 它把這個包

放入相應的協(xié)議接收隊列 。這種事可不是一個上層協(xié)議干的 , 這是網(wǎng)絡設備中斷

接收程序的義務 ??吹搅?, 在這點上 , 它好象到了數(shù)據(jù)鏈路層 。

是不是有點亂 , 隧道機制就是這樣 , 你有沒有更好的辦法?









三、

為實現(xiàn)VPN的擴展



實際上Linux只為實現(xiàn)隧道機制提供了一個框架 , 圖二中的封包協(xié)議頭在

Linux中被忽略了 , 也就是說 , 封包頭只含封包IP頭 , 其后緊跟原IP數(shù)據(jù)包 。

這樣的結構用于傳輸公開數(shù)據(jù)沒有關系 , 但對于一個VPN來說 , 安全保密是

不可缺少的重要功能 。我們希望通過隧道的數(shù)據(jù)可靠且不可竊取和冒充的 ,

那么 , 加密和認證就必不可少 。

為實現(xiàn)這一構想 , 設計以下封包協(xié)議頭:



0;;;;4;;;;;8;;16;;;24;;31;

----- ----- ----------- ------------------------

|;ver;|type;|;;;hlen;;;;|;;;;;;OldPacketLen;;;;;;|

----------------------- ------------------------

|DeviceID;;;;;;;|;;;;;;;EncapID;;|

----------------------- ------------------------

|;Flags;|;;;;;;;CheckSum;|

------------------------------------------------

|;IPIP;Options(;If;any;);|

------------------------------------------------

.;;;;;;|;padding;|

..

------------------------------------------------



圖三、;IPIP頭設想圖



ver:;;版本號 , 利于擴展

type: 用于建立不同目的的隧道(可能處理上有差別)

OldPacketLen:;;進入隧道的原數(shù)據(jù)包長度

DeviceID: 對數(shù)據(jù)包進行封裝的設備標識

EncapID: 此封包的ID號

Flags:;標志位 , 共16位 , 初步定義如下:

0 保留

1 有否加密

2 有否做摘要

3 有否簽名

4 保留

5 有否傳送消息密鑰

6 消息密鑰有否加密

7 消息密鑰是否需保留

8-15 保留



CheckSum: 頭校驗

IPIP;Options:;;用來傳送一些必要的數(shù)據(jù) , 比如消息密鑰、簽名等

格式:; -------------------------------------

|;類型;|;長度;|;數(shù)據(jù);...;;;;;;|

-------------------------------------



好了 , 有了這個東西 , 我們就可以擴展Linux;IP;Tunnel為我們的VPN服務了 。

首先 , 改寫new_tunnel.c和ipip.c兩個文件 , 加入對IPIP頭的處理 。



接著 , 我們要實現(xiàn)一種密鑰的管理和傳送機制 。

當然 , 對稱密鑰是必需的 , 而對IP數(shù)據(jù)包加密要使用序列密碼 。從全體考慮 ,

我們可以提出建立VPN的邏輯步驟;

1、準備工作:建網(wǎng)安裝系統(tǒng)完成配置等等

推薦閱讀