如果想在網路世界中傳輸訊息的話,可能會受到各式各樣阻礙,例如我們曾經聊過一系列的 NAT 技術,以及淺談過的防火牆,都可能導致資料的傳輸最後失敗。
而今天就來聊聊另外一種能跨越阻礙的技術:Tunneling Protocol(穿隧協定)。
網路隧道(Tunneling),就像是在傳輸及接收方中間建立了一條訊息傳輸的隧道一樣,使得雙方能夠互相交流而不必擔心傳輸圖中的任何障礙。而其本質上就是將你想要傳輸的資料封包塞到其他封包內,到達目的地再解開封包的技術,這能盡可能減少傳輸中間路徑所造成的阻礙。
*Tunneling 示例
大致上,會需要網路隧道的原因可以歸納成以下兩點
資料加密:大部分的 Tunneling 技術都會伴隨加密,確保這條隧道的資料不會被竊取
克服網路限制:例如防火牆、ISP 的監管等,都是 Tunneling 想要繞開的限制
例如 VPN(Virtual Private Network)就是使用了 Tunneling 技術的服務,假如你的 ISP 想要封鎖你訪問某個網站,他們可以透過解析你的封包得知你的目標網站為何,藉此來封鎖。但透過 VPN 將訪問網站的封包打包起來,到 VPN Server 再解封包並幫你訪問網站,就可以繞過這層封鎖。
關於 Tunneling 的技術及協定五花八門,我自己覺得比較常見的協定有以下幾種
IPsec(Internet Protocol Security,網際網路安全協定)
L2TP(Layer 2 Tunneling Protocol,第二層隧道協定)
PPTP(Point to Point Tunneling Protocol,點對點隧道協定)
SSH Tunnel(Secure Shell Tunnel,安全外殼協定隧道)
通常 IPsec 和 L2TP 會一起使用,因為 L2TP 本身僅負責隧道的建立而不加密,搭配 IPsec 服用則能幫隧道內的封包加密,所以常被放在一起稱作 L2TP/IPsec。
而 PPTP 則是則是一種比較早期、用來實現 VPN 的一種協定,最初由微軟主導開發而成。其優點是速度比較快,但是在加密這塊僅僅使用簡單些的加密演算法,因此雖然快,但安全性相對較低。
最後是 SSH Tunnel,提供了很好的加密能力、功能面還支持 Port Forwarding 等等,並且現在大部分的作業系統都有原生支持這個應用程式。但也由於 SSH 的加密演算法強度較高,也並不是為了大量資料處理所設計的,因此性能上會較上面幾種 Tunneling 技術來的差一些。