隧道协议(英语: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 请求。也就是说,请求保持原样中转给之后的服务器。隧道本身是透明的,客户端不用在意隧道的存在。

加密网路流量

明文网路流量加密以在互联网上安全地传输。

另见

参考资料

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.