就我目前了解,隧道的实现方案有两类:
1、使用 Zerotier、WireGuard 。将两台服务器组建在一个内网中,完成隧道部署后,两台机器就相当于在同一 WIFI 下的两台电脑,数据在内网中直接传输。
2、使用 Stunnel、GOST 的 TLS 加密隧道。服务器 A 将数据加密后传输,到达服务器 B 后,服务器 B 解密转发到目标服务器(如 油土鳖等)
第二类方案操作比较简单,理解起来也比较容易,但缺点是 TLS 等加密方案大多都是基于 TCP 的,所以对这类隧道对 UDP 的支持较差。而第一类方案可以较好地支持 UDP 转发,但由于本身是特定的加密协议,特征较为明显,且 WireGuard 基于 UDP,对大陆的网络环境适应性不太好(易受宽带运营商 Qos 影响)。
两者较大的区别就是第一类方案会在每台主机上虚拟出一张网卡,并且虚拟网卡都在同一个网段。是不是有点熟悉?对没有错,就是内网穿透的感觉。
1、使用 Zerotier、WireGuard 。将两台服务器组建在一个内网中,完成隧道部署后,两台机器就相当于在同一 WIFI 下的两台电脑,数据在内网中直接传输。
2、使用 Stunnel、GOST 的 TLS 加密隧道。服务器 A 将数据加密后传输,到达服务器 B 后,服务器 B 解密转发到目标服务器(如 油土鳖等)
第二类方案操作比较简单,理解起来也比较容易,但缺点是 TLS 等加密方案大多都是基于 TCP 的,所以对这类隧道对 UDP 的支持较差。而第一类方案可以较好地支持 UDP 转发,但由于本身是特定的加密协议,特征较为明显,且 WireGuard 基于 UDP,对大陆的网络环境适应性不太好(易受宽带运营商 Qos 影响)。
两者较大的区别就是第一类方案会在每台主机上虚拟出一张网卡,并且虚拟网卡都在同一个网段。是不是有点熟悉?对没有错,就是内网穿透的感觉。
隧道 与 iptables 等转发流量的区别
在了解到隧道之前,我印象中中转服务器基本上都是使用 iptables 或者 socat 等工具,直接转发数据包(流量)到落点服务器。 在这种转发方式中,中转服务器没有对数据包进行任何操作(如:加密),仅仅转发数据包到落地服务器。而在 隧道 中的中转服务器有对数据包进行处理。