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

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