VTun 工作原理詳解

2021-06-20 08:19:00 字數 2183 閱讀 2247

寫在前面:開源專案vtun 短小精悍,涉及到了linux下網路程式設計的幾乎所有的東西,包括守護程式、訊號的處理、服務建立子程序等,實現了虛擬lan的功能。個人感覺

vtun

唯一的缺憾是在認證方面,沒有基於x509證書,而是簡陋的在配置檔案進行了金鑰的設定。雖然在捨棄ca方面,做到了「輕型化」,但留下來極大的安全隱患,這也限制了它的應用,使得其只適合進行一些實驗和測試。

我參考了

vtun

源**和

麻利輝在ibm的developerworks

文章,把自己對

vtun

這乙個階段主要是伺服器和客戶端的為下一階段的通訊做各種初始化和準備工作,依次包括建立連線、挑戰 /握手認證、設定 tap/tun 裝置等。

初始化階段

如圖可以看出,這一階段還沒有用到虛擬網絡卡 tap/tun 裝置,伺服器和客戶端所有通訊均通過物理網絡卡eth0 進行,雙方會開啟 socket 網路套接字進行挑戰 / 握手認證雙方合法性。注意:挑戰 / 握手所需要的金鑰在配置檔案 vtund.conf 給出(欄位是 pass ***x ),還有我們會注意到在源**中的認證還需要 host (在 auth.c中)

if( !(h = find_host(host)) )

break;

此處的 host 就是在 vtund.conf 中的伺服器端給客戶定義的名字(伺服器端可以任意取)。

接下來,伺服器和客戶會根據各自的配置檔案設定虛擬網絡卡的特徵,比如是 tun 還是 tap ,或者 pipe 、tty ,配置虛擬網絡卡的網路位址和核心的路由等。

好了,我們假設以上一切順利了。現在,萬事俱備、只欠東風。下面就是重頭戲,主角虛擬網絡卡出場了。

這一階段基本進入了正題,伺服器端和客戶端的應用程式可以使用虛擬網絡卡進行加密通訊了。

虛擬隧道通訊

下面就上圖的做乙個說明。這裡我們假設:

vtun 伺服器: ip : eth0 192.168.1.11            tun0 10.0.1.1

vtun 客戶端: ip : eth0 192.168.2.22            tun0 10.0.1.2

(關於vtun的配置可以參見 關於vtun建立ip隧道的配置檔案中的網路配 置 )

1.            vtun 客戶端 的應用程式要和 vtun 伺服器的應用程式 進行通訊,發往 伺服器 的資料報的出口為 tun0裝置。資料報的源 ip 10.0.1.2 ,目的 ip 192.168.1.11 (目的位址也可能為

10.0.1.1,這要看應用程式說提供服務的ip 。如果是 ip 192.168.1.11 ,那麼還要有閘道器gw 10.0.1.1幫忙**,才可以滴 );

2.            虛線表示 vtun 程序 read 讀取 tun0 裝置的資料,不走tcp/ip協議棧。而讀取的資料為ip包(另,在tap的是乙太網幀 ) ;

3.            隧道封裝。vtun 程序對讀到的資料進行對稱加密,然後 write 寫到 socket 套接字描述符,通過物理網絡卡,傳送到通訊對端。(資料報的源 ip 192.168.2.22 ,目的 ip 192.168.1.11 ) 。這樣一來,就形成了加密隧道包裹的情形了。tun的是ip-in-ip,tap的是eth-in-ip ;

4.            資料報正常路由;

5.            隧道解封裝。 在 vtun 伺服器, vtun 程序 read 讀取 socket 套接字描述符,然後進行對稱解密;

6.            虛線表示 vtun 程序將解密後的資料 write 寫到 tun0 裝置;

7.            tun0 裝置將資料報交給tcp/ip協議棧處理。或者**,或者遞交到上層應用,比如 vtun 客戶端的應用程式收到資料。

總結

vtun 的乙個優點就是在使用者區,即使崩潰了也不會影響系統核心。注意:由於封裝隧道的緣故,資料報在整個過程中, ip 報頭和 tcp 或 udp 頭都沒有被修改,因此不懼 nat 和源路由過濾。因為只是新增了一條到 tun0裝置路由而已,可以說是以最小的代價完成了資料報的 「 乾坤大挪移 」 。

Flume工作原理詳解

flume是乙個分布式 可靠 和高可用的海量日誌採集 聚合和傳輸的系統。flume可以採集檔案 socket資料報等各種形式源資料,又可以將採集到的資料輸出到hdfs hbase hive kafka等眾多外部儲存系統中。一般的採集需求,通過對flume的簡單配置即可實現。flume針對特殊場景也具...

詳解springmvc工作原理

1.工作原理圖 整理總結 2.工作流程 1 使用者發出請求到dispatcherservlet 3 dispatcherservlet呼叫handleradapter處理器介面卡,經過適配呼叫具體的controller,controller執行完成返回modelandview,將結果返回到dispa...

nginx工作原理詳解

進入nginx的大致三種流量 web email及tcp nginx中三個狀態機 狀態機作用 nginx採用epoll非同步非阻塞事件驅動處理引擎,需要狀態機識別和處理請求,將解析出來的請求引導到靜態資源或磁碟快取 做反向 時 當靜態資源太多,記憶體不足以快取時,磁碟呼叫會退化成阻塞呼叫,所以我們使...