隧道技术概要
隧道技术(Tunneling)是网络基础设置在网络之间传递数据的方式,使用隧道技术传递可以是不同协议的数据包,隧道协议将这些其他协议的数据包重新封装在新的包头中发送。被封装的数据包在隧道的两个端点之间通过网络进行路由,被封装数据包在网络上传递时所经历的逻辑路径称为隧道。
简单来说,隧道技术是一类网络协议,是将一个数据包封装在另一个数据包中进行传输的技术;**使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。**通过网络隧道技术,可以使隧道两端的网络组成一个更大的内部网络。(把不支持的协议数据包打包成支持的协议数据包之后进行传输)。
隧道协议
要创建隧道,隧道的客户机和服务器双方必须使用相同的隧道技术,隧道协议有二层隧道协议与三层隧道协议两类。
二层隧道协议对应OSI模型中数据链路层,使用 帧 作为数据交换单位,PPTP、L2TP、L2F都属于二层隧道协议。是将数据封装在点对点协议的帧中通过互联网络发送。
三层隧道协议对应OSI模型中网络层,使用 包 作为数据交换单位,GRE、IPSec 都属于三层隧道协议。都是数据包封装在附加的IP包头中通过IP网络传送。
在例如VxLAN,工作在传输层和网络层之间。具体来说,将运行在用户数据报协议 (UDP) 和网络数据报协议 (IP) 之间,以便在网络中建立安全的通信通道。
网络隧道技术应用
隧道在Linux 中应用
IP隧道是指一种可在两网络间进行通信的通道。在该通道里,会先封装其他网络协议的数据包,之后再传输信息。
Linux原生共支持5种IPIP隧道:
- ipip: 普通的IPIP隧道,就是在报文的基础上再封装成一个IPv4报文
- gre: 通用路由封装(Generic Routing Encapsulation),定义了在任意一种网络层协议上封装其他任意一种网络层协议的机制,所以对于IPv4和IPv6都适用
- sit: sit模式主要用于IPv4报文封装IPv6报文,即IPv6 over IPv4
- isatap: 站内自动隧道寻址协议(Intra-Site Automatic Tunnel Addressing Protocol),类似于sit也是用于IPv6的隧道封装
- vti: 即虚拟隧道接口(Virtual Tunnel Interface),是一种IPsec隧道技术
像IPVS/LVS中的 Virtual Server via IP Tunneling
,就是使用了IPIP隧道
SSH隧道技术
SSH提供了一个重要功能,称为转发 forwarding
或者称为隧道传输tunneling
,它可以通过加密频道将明文流量导入隧道中,在创建SSH隧道时, SSH客户端要设置并转交一个特定本地端口号到远程机器上;一旦SSH隧道创建,用户可以连到指定的本地端口号以访问网络服务。本地端口号不用与远地端口号一样。
SSH隧道主要使用场景一般为 规避防火墙、加密网络流量
规避防火墙,SSH隧道可以使一个被防火墙阻挡的协议可被包在另一个没被防火墙阻挡的协议里,这技巧可用来逃避防火墙政策。而这种操作符合“数据包封装在另一个数据包中进行传输的技术”,故称为SSH隧道技术。
SSH隧道类型
在ssh连接的基础上,指定 ssh client
或 ssh server
的某个端口作为源地址,所有发至该端口的数据包都会透过ssh连接被转发出去;至于转发的目标地址,目标地址既可以指定,也可以不指定,如果指定了目标地址,称为定向转发,如果不指定目标地址则称为动态转发:
定向转发
定向转发把数据包转发到指定的目标地址。目标地址不限定是ssh client 或 ssh server,既可以是二者之一,也可以是二者以外的其他机器。
动态转发
动态转发不指定目标地址,数据包转发的目的地是动态决定的。
本地端口转发
本地转发中的本地是指将本地的某个端口(1024-65535)通过SSH隧道转发至其他主机的套接字,这样当我们的程序连接本地的这个端口时,其实间接连上了其他主机的某个端口,当我们发数据包到这个端口时数据包就自动转发到了那个远程端口上了
远程端口转发
远程转发和本地很相似,原理也差不多,但是不同的是,本地转发是在本地主机指定的一个端口,而远程转发是由SSH服务器经由SSH客户端转发,连接至目标服务器上。本质一样,区别在于需要转发的端口是在远程主机上还是在本地主机上
现在SSH就可以把连接从(39.104.112.253:80)转发到(10.0.0.10:85)。
动态端口转发
定向转发(包括本地转发和远程转发)的局限性是必须指定某个目标地址,如果需要借助一台中间服务器访问很多目标地址,一个一个地定向转发显然不是好办法,这时就要用的是ssh动态端口转发,它相当于建立一个SOCKS服务器。各种应用经由SSH客户端转发,经过SSH服务器,到达目标服务器,不固定端口。
SSH隧道的本质
SSH隧道可以被认为是一种应用层隧道,与其他隧道类型(如IPIP, VxLAN)不同的是,SSH隧道是基于SSH协议的一种应用,而IPIP, VxLAN这种,则是基于IP协议,UDP协议的一种封包机制。
SSH(Secure Shell)是一种网络协议,支持远程登录和其他安全网络服务的加密通信。SSH隧道属于SSH协议中的一种应用场景,用于在SSH加密连接上建立通信隧道。SSH隧道允许用户通过加密终端 (SSH客户端) 和远程服务之间的连接,在不暴露底层网络协议的信息(例如IP地址、端口号等)的情况下,传输数据。
SSH隧道工作方式如下:
- 首先,在本地主机和目标服务器之间建立SSH连接,SSH连接是一条安全加密的连接管道,连接过程中对数据进行加密传输。
- 连接建立后,通过SSH隧道在本地主机和目标服务器之间建立一个TCP连接,并将本地主机上的数据通过SSH隧道加密传输到目标服务器,目标服务器接收数据,解密后将数据传输到最终目的地。
- 同样,当接收数据时,目标服务器会将数据加密再通过SSH隧道传输回本地主机。
由于SSH隧道在SSH连接上建立通信隧道,因此可以将其视为应用层隧道。应用层隧道是在应用层协议上建立的隧道,用于将应用程序传输的数据加密传输到目标地址。SSH隧道给用户提供了一种安全的数据通信方法,在安全性上比普通TCP/IP连接更具有优势。
SSH隧道也可以成为一种代理模式,常用于越过不可访问的网络时使用
其他隧道协议
对于隧道,上面也提到了,隧道就是网络数据包封包一种协议,那就是说很多常见的协议其实都是隧道技术
- 工作与数据链路层的隧道技术:
- PPP隧道协议(Point-to-Point Protocol):PPP隧道协议是一种在两个点之间建立可靠连接的协议,它能够在一条串行线路上同时传输多种网络层协议。PPP隧道协议通过在两个点之间建立隧道,将其他协议的数据封装起来进行传输。
- L2TP协议(Layer 2 Tunnel Protocol):L2TP协议是一种在不安全的公共网络上传输数据的加密协议,常用于建立VPN(Virtual Private Network)隧道。L2TP协议将PPP协议属性和L2TP控制消息封装在IP(Internet Protocol)数据报中。
- PPTP协议(Point-to-Point Tunneling Protocol):PPTP协议是一种在不安全的公共网络上传输数据的加密协议,也常用于建立VPN隧道。PPTP协议通过在数据包中添加PPTP头和PPP协议数据负载来传输数据。
- GRE协议(Generic Routing Encapsulation):GRE协议是一种通用路由封装协议,它可以将其他协议的数据封装在IP数据报中进行传输。GRE协议主要用于连接不同类型的网络,通常用于建立VPN隧道。
- 工作与网络层的隧道协议:
- 负载均衡协议 (LBP) 是一种在网络层以上实现的协议,用于在二层 (链路层) 上实现数据包的转发。LBP 可以将数据包转发到多个服务器上,从而实现负载均衡。LBP 可以用于实现网站负载均衡、存储集群等功能。
- 协议映射协议 (PMP) 是一种在网络层以下实现的协议,用于在网络层以上实现数据包的映射。PMP 可以将一个数据包映射到另一个数据包中,从而实现数据包的转发。PMP 可以用于实现虚拟专用网络 (Virtual Private Network,VPN) 和防火墙等功能。
- 虚拟隧道协议 (Virtual Tunneling Protocol,VTP) 是一种在网络层以下实现的协议,用于在网络中创建和管理隧道。VTP 可以将一个网络中的多个子网互联,使得数据包可以在这些子网之间传输。VTP 可以用于实现数据包的路由、负载均衡和安全性等方面。
- 工作与应用层的隧道技术:
- HTTP隧道:HTTP隧道通过HTTP连接创建隧道,将其他协议的数据封装在HTTP报文中,传输到目标地址。HTTP隧道通常用于访问受限制的服务器,如防火墙后的服务器。
- SSL/TLS隧道:SSL/TLS隧道也是基于加密传输的应用层隧道。通过SSL/TLS加密传输,将通信数据封装在加密连接中,传输到目标服务器。SSL/TLS隧道通常用于保护Web应用程序中传输的机密数据。
- SOCKS代理隧道:SOCKS代理隧道是一种应用层代理协议,用于将流量转发到目标地址并代理转发返回数据。SOCKS代理隧道通常用于隐藏客户端的真实IP地址和身份。
- DNS隧道:DNS隧道是通过将数据封装在DNS请求或响应中来传输数据的应用层隧道。DNS隧道通常被用于绕过安全防护措施或访问受限制的服务器。
CCP常提到的“非法信道”中的“信道”和“隧道”是一样的吗?
首先,“信道”和“隧道” 是两种不同的概念,就和“男人”和“女人”一样,同属于人但完全不同,常见的表示形式如下:
- 意义不同:信道是指物理媒介或虚拟路径,用于数据的传输,例如网络电缆或无线信道。隧道则是一种逻辑隧道,通过在底层通信协议的基础上创建加密通道来传输数据。
- 位置不同:信道通常是指在通信的物理媒介上的传输路径,而隧道则是在信道之上的OSI模型层协上创建加密通道的逻辑概念。
- 传输方式不同:信道是直接用于传输数据的物理媒介,信号通过信道进行传输;隧道则是在传输数据时,将数据封装成新的协议格式,通过信道进行加密传输。
- 使用场景不同:信道常用于介质访问控制、传输层控制、传输介质选择等方面,例如在局域网中使用以太网电缆传送数据。隧道则通常用于保障企业内部网络安全、建立虚拟专用网络、跨越防火墙等隧道服务需求。
- 技术特点不同:信道是一种物理层或数据链路层技术,而隧道是一种应用层或数据链路层技术。