隧道协议(英語:Tunneling Protocol[1]是一種網路協議,在其中,使用一種網路協議(傳送協議),將另一個不同的網路協議,封裝在負載部份。使用隧道的原因是在不兼容的網路上传输数据,或在不安全網路上提供一個安全路徑。

隧道則是對比分層式的模型,如OSI模型TCP/IP。隧道协议通常(但並非總是)在一個比負載協議還高的層級,或同一層。要了解協議堆疊,負載和傳送協議都須了解。傳統的分層式協議,如OSI模型TCP/IP模型,HTTP协议 ,並不被認為是穿隧協議。隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

通用路由封装是一種跑在 IP (IP 號碼為 47)的協議,身為網路層上的網路層的例子,通常是用帶有公開位址的 IP 封包來攜帶帶有 RFC 1918 私用位址的 IP 封包來穿越網際網路。在此例上,傳送和負載協議是相容的,但負載位址和傳送網路是不相容的。

穿隧協議可能使用数据加密來傳送不安全的負載協議。

常見穿隧協議 编辑

SSH 编辑

SSH隧道可以通過加密頻道將明文流量導入隧道中。為了建立SSH隧道, SSH客戶端要設定并轉交一個特定本地埠號到遠端機器上。一旦SSH隧道建立,使用者可以連到指定的本地埠號以存取網路服務。本地埠號不用與遠地埠號一樣。

SSH隧道提供一個繞過防火牆,從而連到某些被禁止的網際網路服務的的方法。例如,一個組織可能會禁止使用者不通過組織的代理伺服器過濾器,而直接存取網頁(埠號 80 ),用于監視或控視使用者瀏览網頁。使用者可能不希望讓他們的網頁流量被組織的代理伺服器過濾器所監控或阻擋。如果使用者能連到一個外部的 SSH 伺服器,就有可能建立 SSH 通道,將某個本地端埠號連到遠端網頁伺服器的埠號:80。要連到遠端網頁伺服器,使用者可以將他們的网页浏览器指到http://localhost/。

SSH支持動態埠傳送,允許使用者建立SOCKS代理伺服器。使用者可以設定他的應用程式去使用他們的區域SOCKS代理伺服器。這比建立一個連到單一埠號的SSH隧道更有彈性。使用SOCKS,使用者可以不被限制只能連到事先定義的埠號和伺服器。

作用 编辑

規避防火牆 编辑

一個被防火牆阻擋的協議可被包在另一個沒被防火牆阻擋的協議裡,如HTTP。如果防火牆並沒有排除此種包裝,這技巧可用來逃避防火牆政策。隧道可按要求建立起一条与其他服务器的通信线路,届时使用 SSL 等加密手段进行通信。

另一種基於 HTTP 的穿隧方法使用超文本傳輸協議CONNECT 方法:

客戶端送出 HTTP 的 CONNECT 命令給代理伺服器,代理伺服器會建一個 TCP 連線到特定的 伺服器埠,並轉送伺服器埠和客戶端連線之間的資料。因為這會製造安全漏洞,HTTP 代理伺服器通常會限制 CONNECT 命令。通常只允許基於 TLS/SSL 的 HTTPS 服務。隧道本身不会去解析 HTTP 请求。也就是说,请求保持原样中转给之后的服务器。隧道本身是透明的,客户端不用在意隧道的存在。

加密網路流量 编辑

明文網路流量加密以在互聯網上安全地傳輸。

另見 编辑

参考资料 编辑

  1. ^ Tunneling在台湾译为“穿隧”VPN 虛擬私有網路技術概說页面存档备份,存于互联网档案馆
  2. ^ IP Encapsulation within IP页面存档备份,存于互联网档案馆),RFC2003, C. Perkins,October 1996
  3. ^ Layer Two Tunneling Protocol "L2TP"页面存档备份,存于互联网档案馆),RFC 2661, W. Townsley et al.,August 1999
  4. ^ Point-to-Point Tunneling Protocol (PPTP)页面存档备份,存于互联网档案馆),RFC 2637, K. Hamzeh et al.,July 1999

外部連結 编辑

本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。