网络隧道技术

隧道技术摘要

隧道技术(Tunneling)是网络基础设置在网络之间传递数据的方式,使用隧道技术传递可以是不同协议的数据包,隧道协议将这些其他协议的数据包重新封装在新的包头中发送。被封装的数据包在隧道的两个端点之间通过网络进行路由,被封装数据包在网络上传递时所经历的逻辑路径称为隧道

简单来说,隧道技术是一类网络协议,是将一个数据包封装在另一个数据包中进行传输的技术;使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。通过网络隧道技术,可以使隧道两端的网络组成一个更大的内部网络。(把不支持的协议数据包打包成支持的协议数据包之后进行传输)。

隧道协议

要创建隧道,隧道的客户机和服务器双方必须使用相同的隧道技术,隧道协议有二层隧道协议与三层隧道协议两类。

二层隧道协议对应OSI模型中数据链路层,使用作为数据交换单位,PPTP、L2TP、L2F都属于二层隧道协议。是将数据封装在点对点协议的帧中通过互联网络发送。

三层隧道协议对应OSI模型中网络层,使用作为数据交换单位,GRE、IPSec、GRE都属于三层隧道协议。都是数据包封装在附加的IP包头中通过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隧道技术

LVS中也使用了 IP隧道技术 Virtual Server via IP Tunneling

网络隧道技术_第1张图片

SSH隧道技术

SSH提供了一个重要功能,称为转发forwarding或者称为隧道传输tunneling,它可以通过加密频道将明文流量导入隧道中,在创建SSH隧道时, SSH客户端要设置并转交一个特定本地端口号到远程机器上;一旦SSH隧道创建,用户可以连到指定的本地端口号以访问网络服务。本地端口号不用与远地端口号一样。

SSH隧道主要使用场景一般为 规避防火墙加密网络流量

规避防火墙,SSH隧道可以使一个被防火墙阻挡的协议可被包在另一个没被防火墙阻挡的协议里,这技巧可用来逃避防火墙政策。而这种操作符合“数据包封装在另一个数据包中进行传输的技术”,故称为SSH隧道技术。

SSH隧道类型

在ssh连接的基础上,指定ssh clientssh server的某个端口作为源地址,所有发至该端口的数据包都会透过ssh连接被转发出去;至于转发的目标地址,目标地址既可以指定,也可以不指定,如果指定了目标地址,称为定向转发,如果不指定目标地址则称为动态转发:

定向转发

定向转发把数据包转发到指定的目标地址。目标地址不限定是ssh client 或 ssh server,既可以是二者之一,也可以是二者以外的其他机器。

动态转发

动态转发不指定目标地址,数据包转发的目的地是动态决定的。

2.3.1 本地端口转发

本地转发中的本地是指将本地的某个端口(1024-65535)通过SSH隧道转发至其他主机的套接字,这样当我们的程序连接本地的这个端口时,其实间接连上了其他主机的某个端口,当我们发数据包到这个端口时数据包就自动转发到了那个远程端口上了

网络隧道技术_第2张图片

2.3.2 远程端口转发

远程转发和本地很相似,原理也差不多,但是不同的是,本地转发是在本地主机指定的一个端口,而远程转发是由SSH服务器经由SSH客户端转发,连接至目标服务器上。本质一样,区别在于需要转发的端口是在远程主机上还是在本地主机上

现在SSH就可以把连接从(39.104.112.253:80)转发到(10.0.0.10:85)。

网络隧道技术_第3张图片

2.3.3 动态端口转发

定向转发(包括本地转发和远程转发)的局限性是必须指定某个目标地址,如果需要借助一台中间服务器访问很多目标地址,一个一个地定向转发显然不是好办法,这时就要用的是ssh动态端口转发,它相当于建立一个SOCKS服务器。各种应用经由SSH客户端转发,经过SSH服务器,到达目标服务器,不固定端口。

你可能感兴趣的:(#,Network,udp,tcp/ip,http)