現在的計算機領域越來越依賴于各種類型的隧道技術。所有的遠程接入VPN(虛擬專用網)都要用隧道,你還經常聽到計算機狂人們在談論SSH(安全
Shell)隧道。利用隧道技術你可以完成許多令人驚訝的工作,所以請舒舒服服地坐好吧,愉快地享受這一期關于隧道技術及其用途的知識講座。如果你想了解
IP安全協議(IPSec)的具體情況,我們會在以后的基礎知識講座中闡述。
隧道技術的主要作用是讓一種網絡不支持的外來協議通過該網絡。隧道協議可以讓你利用諸如IP等協議通過IP數據包的“數據”部分發送另一種協
議。大多數隧道協議作用在第4層,這就意味著這些協議可以用來代替TCP(傳輸控制協議)或UDP(用戶數據報協議)等協議的功能。
VPN隧道技術允許遠程客戶通過隧道進入我們的網絡,這一點證明了早前關于隧道被用于那些“不受支持協議”的觀點,盡管該作用并不顯而易見。如
果我們要通過VPN才能實現打印機和文件共享,那可能是因為端口139和445(Windows的配對端口)已被關閉,實際上對于我們的邊界路由器來說,
這兩個端口是不受支持的TCP端口。然而,如果在已知的VPN服務器上采用IPSec或PPTP(點對點隧道協議),那么一切就“都沒問題”了。
被發往活動目錄(Active
Directory)服務器端口445的數據包將被隱藏為VPN數據包。當這些數據包到達VPN服務器時,服務器會對數據包進行解包(demux,即de
-multiplex,也被稱為disassemble),然后將其發送到內部網絡上。當數據包到達內部網絡時,其源地址現在就是VPN服務器的內部
IP,這樣內部網絡做出的響應就能返回VPN服務器。除了這一點,數據包都會完全按照你的意圖行事。VPN服務器一收到響應,就會給該數據包添加VPN頭
并封裝起來,然后通過其外部接口把它發回給你。
關于VPN隧道要注意幾個有意思的地方:一旦你的數據到達內部網絡,它就已經被解密;而當這些數據通過Internet時,會有一些特別的“東西”被加入到數據包中。
有一點我們沒有提及,但是也許很明顯,那就是VPN協議在傳送你的數據包之前會為其加密。對于理解隧道概念這無關緊要,不過卻值得一提。注意這
種加密并不是端對端,也就是說你和服務器之間的通信不是真正安全的。當然你自己和你的網絡之間很安全,別人無法窺探,然而一旦數據包從VPN服務器出來,
就會再一次被解密。
說到第二個有意思的地方,我們先來了解一下最基本的IP封裝原理。從概念上來說,我們是把數據包嵌套,更確切地說, 外部的IP數據包的數據部分要包含一個完整的IP數據包。很妙,是不是?這樣我們就解釋了IPIP隧道的概念:IP被包含在IP數據包中。

圖1
如圖1所示,IP數據包的數據部分包含了一個嶄新的IP數據包。除了加密,它與VPN隧道技術的作用是一樣的。當你的數據包頂端帶了個“附加的
包頭”時,你無法發送大量的數據,因為第一個IP頭就占用了20個節字。認識這一點非常重要,因為在采用隧道技術時會突然出現Path
MTU(最大傳輸單元)問題。
"建立SSH隧道"是一件很奇妙也很讓人費解的事,也就是采用SSH協議通過隧道傳送數據。X11程序(例如一個圖形用戶界面程序)如果需要連
接一個顯示終端。它可以非常輕松地通過SSH隧道傳送數據。X的客戶(例如彈出窗口程序)會試圖連接顯示器所在的工作站上的X服務器,如果你與一臺服務器
之間采用了SSH,并且各選項設置無誤,那么程序試圖連接X的信息將被通過隧道返回給你本地的計算機,解密后再傳送給你本機機上的X服務器。現在來試著建
立SSH隧道吧:執行“ssh-Y
user@hostname.com”命令,然后一旦進入就運行firefox,它應該顯示在你的本地計算機上,而且是通過加密SSH隧道實現的。
因為OpenSSH的能力很有趣,并且有助于我們理解隧道概念,所以我們來看看SSH另外兩個小技巧。
你可以把到自己計算機上的一個端口的連接轉發給一臺遠程計算機,它將你的數據通過SSH隧道傳送,使之安全可靠。這看起來似乎沒什么用處,畢
竟,為什么我要把自己計算機上的端口發給另一臺計算機呢?要回答這個問題我們先要澄清一些概念。SSH轉發端口之前首先要偵聽本地端口是否有連接,當建立
連接后,SSH就把整個連接發送給遠程主機和端口,這是一個單端口VPN!
例如:ssh -L80:workserver.com:80 user@workdesktop.com
這條命令在本機與workdesktop.com計算機之間建立一個SSH連接,而與此同時也打開了你本地計算機上的端口80。如果你讓web
瀏覽器指向http://localhost,此連接就會通過SSH連接被發送至workdesktop.com,進而又發送至
workserver.com服務器的端口80上。這非常有益于從家里訪問那些僅存在于Intranet上的站點,而無需先連接至VPN服務器。
最新的OpenSSH版本同樣支持SSH上的IP隧道技術。實際上,它也支持以太網(Ethernet),目的是將兩個以太網廣播域橋接在一
起;也就是通過SSH加密!在OpenSSH的隧道選項中,人們可以設置全功能的SSH-VPN隧道,使之在任何SSH網絡上都能實現。它在兩端都創建隧
道接口,而唯一需要手動配置的只是路由表。如果你想讓所有發往目的網絡的數據都通過加密隧道來發送,那么你只需為目的網絡增加一條路由,并把它指向SSH
自動創建的隧道接口。這確實是目前最無可爭議的VPN設置了。
隧道也傳送其它協議。希望上述內容能夠讓你深入了解隧道技術,激發一點興趣,或者至少讓某些人不再覺得這種技術多么神秘。
小結
隧道技術用于在各種不同的網絡中發送不受支持的協議。
通過隧道的數據、VPN或其它內容使數據包增大,所以每個數據包所發送的數據量減少。
一般來說,通過SSH隧道發送數據是一種根據具體應用建立的VPN,然而最新版本的OpenSSH可實現一個完全成熟、無可爭議的VPN。