编辑
2023-02-01
灌水
00
请注意,本文编写于 1000 天前,最后修改于 665 天前,其中某些信息可能已经过时。

目录

内网穿透简介
内网穿透原理
内网穿透方式
DDNS
自建
付费&自建
内网穿透实现
DDNS
自建
Other
Zerotier:使用Zerotier Moon为内网穿透加速
Tailscale:搭建开源版Tailscale——Headscale
VPN(WireGuard):基于WireGuard实现内网穿透

img.jpg

内网穿透简介

内网,就是在公司或者家庭内部,建立的局域网络或者是办公网络,可以实现多台电脑之间的资源共享,包括设备、资料、数据等。而外网则是通过一个网关与其它的网络系统连接,相对于内网而言,这种网络系统称之为外部网络,常见的就是我们日常使用的互联网。

一般而言,在没有固定公网IP的情况下,外网设备无法直接访问内网设备。而内网穿透技术,顾名思义就是能让外网的设备找到处于内网的设备,从而实现数据通信。


内网穿透原理

内网穿透,又称为NAT穿透。NAT背后的设备,它们的主要特点是 ,可以访问外网,但不能被外网设备有效访问。基于这一特点,NAT穿透技术是让NAT背后的设备,先访问指定的外网服务器,由指定的外网服务器搭建桥梁,打通内、外网设备的访问通道,实现外网设备访问到内网设备。

该技术除了可以访问隐藏在NAT后的设备,同样可以穿透防火墙。这是因为防火墙一般只拦截了入站没有拦截出站,所以也可以让防火墙内的设备对外提供服务。

由于内网设备并不是与外网设备直接相连,所以在安全性上是毋庸置疑的,内网穿透可以说是安全与效率兼得。 202202211836283405.png (借用花生壳官网的示意图,其中花生壳的客户端和服务器可替换为任意其他的方案)

对于在NAT之后的内网客户端来说,可以主动访问公网端口,但是不能反过来被公网访问。所以可以在中间架设一个公网中转服务器,让内网客户端持续主动访问这个拥有公网IP地址的服务器,这样内网设备就成功与服务器建立了一个连接通道。然后当有任何其他NAT后的内网客户端主动连接服务器时,服务器马上把这连接请求通过先前建立好的隧道转发到刚才的内网客户端,内网客户端将响应数据包再原路转发回去,最终到达服务器,然后返回给其他内网客户端。

在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。如果数据量很大,可以考虑使用P2P技术。最为常见的实现P2P的方式是采用打洞技术(UDP/TCP),打洞技术是通过中间服务器的协助在各自的NAT网关上建立相关的表项,使P2P连接的双方发送的报文能够直接穿透对方的NAT网关,从而实现P2P客户端互连。但是这种方式受复杂网络环境影响较大,网速波动大,稳定性欠缺。


内网穿透方式

DDNS

  • 花生壳:国内知名内网穿透服务商,无需公网IP、自带端口映射,安装使用门槛低,能轻松穿透各种复杂的路由器和防火墙,让外网设备通过域名快速访问到内网应用。

  • natapp:基于ngrok的国内高速内网穿透专业服务商,有免费版本。免费版本:提供http,tcp,udp全隧道穿透,随机域名/随机TCP,UDP端口,不定时强制更换域名/端口,自定义本地端口。

  • DDNSTO:由KoolCenter(opens new window)@小宝开发,是一款稳定、快速、简单易用的内网穿透工具。让用户在公司、旅行途中都能够使用浏览器方便的访问家庭内的网络设备。无需公网IP,不被网络环境限制,全部的安装、配置、使用都可在浏览器完成,不需要敲一行代码。


自建

  • frp:frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。主要由客户端(frpc)服务端(frps)组成,服务端通常部署在具有公网IP的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。内网服务由于没有公网IP,不能被非局域网内的其他用户访问。用户通过访问服务端的frps,由frp负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

  • ngrok:ngrok是一个用go语言编写的反向代理,通过在公共的端点和本地运行的web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析和重放。数据转发需要ngrok客户端ngrok服务端建立链路通道,需要一个具有公网IP的服务器部署服务端。

  • nps:nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。需要具有公网IP的服务器部署nps服务端,客户端通过注册导服务端实现内网穿透。


付费&自建

  • VPN(虚拟专用网络):VPN会通过互联网在设备之间建立私有的网络连接。VPN用于通过公有网络安全且匿名地传输数据。它们的原理是通过掩蔽用户IP地址并加密数据,使未获得接收信息授权的人无法读取。VPN的数据通信全程加密,保护了用户的隐私,匿名和安全性。VPN的一般技术方案包括OpenVPN,IPSec,SSTP,WireGuard等。当然,在国内,VPN目前还有另一个主要用途。。。。。。(p.s. 注意某些热心大佬自研类协议并不能算VPN,但是可以通过改造(虚拟网卡)的方式全局接管流量。。。)对于VPN而言,无论选择自建或是购买VPN供应商的服务,可选择性都很强。

  • Zerotier:Zerotier是一个加密的虚拟主干网,允许多台机器像在一个网络上一样通信。Zerotier的核心方案是使用UDP打洞,无论两台设备是否在一个内网中,只要这两个局域网的NAT方式达到了打洞的要求,就可以进行打洞,建立一条通信隧道。Zerotier官方提供的中转服务器在国外,在网络较好的情况下,可以直接打洞连接成功,在打洞失败的情况下,所有的流量都会通过Zerotier的公共服务进行数据中转,国内连接延迟较高,需要建立moon中转服务器,moon服务提供的功能相当于frp

  • Tailscale:Tailscale是一种基于WireGuard的虚拟组网工具,可以轻松管理对私有资源的访问,快速通过SSH连接到网络上的设备,并在任何地方安全地工作。,可以将Tailscale看成是更为易用,功能更完善的WireGuard。Tailscale的个人用户在接入设备不超过20台的情况下可以免费使用(存在有一些限制,比如子网网段无法自定义,无法设置多个子网,只能配置一个虚拟路由)。对于大部份用户来说,Tailscale免费版已经足够日常使用了,相比于Zerotier,Tailscale更容易添加虚拟路由,任何一个节点就都可以被设置为路由,从而让所在内网被其他节点访问到。


内网穿透实现

DDNS

花了money,没有搞不定的事,使用成熟的商业化内网穿透方案,配置,对小白和不想折腾的人非常友好,专业的技术文档和商家的技术支持已经足够弄好整套方案了。


自建

目前最广泛使用的自建内网穿透方案是frp,网上各种教程很多,这里就不再赘述。

nps相较于frp较新,操作简单,只需简单的配置即可在web ui上完成其余操作,展示信息全面,流量、系统信息、即时带宽、客户端版本等,部署起来相对比较简单,具体看一参考ehang-io/nps


Other

有了上面的方式为什么还有走到这条,可能有几点原因:

  1. 不想花钱在这个可能大部分时间不需要使用的服务上。建议直接使用Zerotier和Tailscale的个人免费版,虽然传输速度没有保证,但是仅轻量使用问题不大。
  2. 不想花费精力在整个方案的维护上。直接选择商用的方案即可,国内大部分用户会选择花生壳,不想花钱请参考1。
  3. iOS系统的主力用户,需要使用IOS设备进行内网穿透。上面的方案对你来说基本上帮助不大,你的选择基本局限在接下来的几种方案中。

除此以外,一个常见的使用场景是使用移动设备远程访问家中的智能设备和服务,在使用移动网络的情况下,打洞很难成功,此时的连接方式就是服务器通道,需要使用服务器的带宽和流量。无论是DDNS供应商亦或是自建,带宽均存在限制,在高峰期(如晚上),使用体验也会比较差,所以需要自行体验,权衡适合自己的方案。


Zerotier:使用Zerotier Moon为内网穿透加速

使用Zerotier作为内网穿透工具,好处是个人用户使用基本免费,还可以创建多个局域网段。使用Zerotier十分简单,只要下载各个平台的客户端就行,iOS系统,常用的软路由系统与群晖也有可视化客户端,基本零压力实现。当然,直接使用免费版本的Zerotier,也存在不少缺点,打洞成功,速度也称不上快,如果打洞失败,使用海外服务器直连,那么基本上无法正常使用。自建Zerotier Moon可以解决中转服务器的问题(甚至可以自建Zerotier Planet拥有可视化界面),但是也无法解决连接建立时需要使用海外服务器的问题。


Tailscale:搭建开源版Tailscale——Headscale

Tailscale常常被用来与Zerotier比较,他是基于WireGuard为底层实现的一个内网穿透工具,在WireGuard的基础上实现了更加丰富的功能,比如虚拟路由,虚拟子网等。Tailscale的免费版可以满足大部分用户的需求,已经足够日常使用了,实际的使用体验上Tailscale可能比Zerotier更加稳定。自建开源版Tailscale——Headscale的好处是突破Tailscale免费版的限制,自定义子网网段,设置多个子网与命名空间等,而且无论是打洞还是使用服务器直接中转连接,都可以直接使用自建的服务器来进行,速度也会更快。


VPN(WireGuard):基于WireGuard实现内网穿透

既然可以自建Tailscale与Zerotier,为什么需要使用更为原始的方案WireGuard呢。其实普通个人用户基本上是不需要商用软件那么多复杂的功能的,只需要一个轻量级的工具就可以了。WireGuard的另一个优势是提供了ios和安卓客户端,注意,自建Tailscale与Zerotier都不能在ios上使用,原因不用多说,重新实现一个闭源的ios客户端太复杂,而在安卓设备上也需要自行编译安装客户端,相对来说比较复杂,而WireGuard的客户端则是开源的,可以直接在各个应用商店下载安装。通过自建节点使用WireGuard,也可以自行附加需要的功能,可玩性很高。


内网穿透