内网穿透原理介绍

0    104    1

Tags:

👉 本文共约11076个字,系统预计阅读时间或需42分钟。

前言

阅读本文前需要先搞懂NAT、PAT、端口映射几个概念,前面我有写了一篇关于这几个概念的博文。根据之前的博文我们已经知道,内网宽带中的主机可以访问公网宽带主机,反之不可以访问;公网宽带主机可以和公网宽带主机双向访问;内网宽带中的主机和内网宽带中的主机互相无法访问。那么内网宽带中的客户机和公网宽带中的客户机如何访问另一个内网宽带中的服务器呢?这里就需要用到内网穿透技术。

应用场景

家里或公司是运营商内网ipv4宽带或公网IP在防火墙后,且需要在外访问家里或公司的电脑、NAS、树莓派、摄像头等网络设备或远程控制等情况下。

详细原理

传统内网穿透(服务器中转数据穿透)原理

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

点对点穿透原理

在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。只要是数据量很大,而一般利用中转服务器又需要一定规模投入的应用,我们都可以考虑用P2P技术。

1.UDP打洞技术

最为常见的实现P2P的方式是采用UDP打洞技术,UDP打洞技术是通过中间服务器的协助在各自的NAT网关上建立相关的表项,使P2P连接的双方发送的报文能够直接穿透对方的NAT网关,从而实现P2P客户端互连。如果两台位于NAT设备后面的P2P客户端希望在自己的NAT网关上打个洞,那么他们需要一个协助者——集中服务器,并且还需要一种用于打洞的Session建立机制。
Session建立机制:
假定客户端A要发起对客户端B的直接连接,具体的“打洞”过程如下:
(1)A最初不知道如何向客户端B发起连接,于是A向集中服务器(本质上是一台被设置在公网上的服务器,建立P2P的双方都可以直接访问到这台服务器。位于NAT网关后面的客户端A和B都可以与一台已知的集中服务器建立连接,并通过这台集中服务器了解对方的信息并中转各自的信息)发送消息,请求集中服务器帮助建立与客户端B的UDP连接。
(2)集中服务器将含有B的外网和内网的地址二元组发给A,同时,集中服务器将包含有A的外网和内网的地址二元组信息的消息也发给B。这样一来, A与B就都知道对方外网和内网的地址二元组信息了。
(3)当A收到由集中服务器发来的包含B的外网和内网的地址二元组信息后,A开始向B的地址二元组发送UDP数据包,并且A会自动锁定第一个给出响应的B的地址二元组。同理,当B收到由集中服务器发来的A的外网和内网地址二元组信息后,也会开始向A的外网和内网的地址二元组发送UDP数据包,并且自动锁定第一个得到A回应的地址二元组。一旦A与B都向对方的NAT设备在外网上的地址二元组发送了数据包,就打开了A与B之间的“洞”,A与B向对方的外网地址发送数据,等效为向对方的客户端直接发送UDP数据包了。一旦应用程序确认已经可以通过往对方的外网地址发送数据包的方式让数据包到达NAT后面的目的应用程序,程序会自动停止继续发送用于“打洞”的数据包,转而开始真正的P2P数据传输。
当然,UDP转换协议提供的“洞”不是绝对可靠的,多数NAT设备内部都有一个UDP转换的空闲状态计时器,如果在一段时间内没有UDP数据通信,NAT设备会关掉由“打洞”过程打出来的“洞”。如果P2P应用程序希望“洞”的存活时间不受NAT网关的限制,就最好在穿越NAT以后设定一个穿越的有效期。

2.TCP打洞技术

从现在的主流应用的角度上来看,基于TCP的P2P应用显然不如基于UDP的应用那么广泛,但是也存在打洞的需求。TCP相对于UDP而言要复杂的多,TCP连接的建立要依赖于三次握手的交互,所以NAT网关在处理TCP连接的时候,需要更多的开销。但是,由于TCP协议完备的状态机机制,TCP反而比UDP更能精确的获取某个Session的生命期。
一种新的代理类型 XTCP 能解决这个问题,实现方式可以是采用搭建FRP服务器的方式,在传输数据的两端都部署上FRP客户端用于建立直接的连接。
内网穿透原理介绍

延伸一个内网渗透知识

为了安全起见,通常会在网络中加入防火墙,防火墙有入站规则和出站规则。如果不是非常严格的安全管控,通常是不会设置出站规则的,但是入站规则一般都会设置的,比如说外部可以通过80端口传入内网的WEB服务器访问网页,但是不能通过3389端口登陆内网的远程桌面。而在内网渗透的过程中碰到这种情况,我们也可以借助上面内网传统的方式实现穿透防火墙的入站规则。因为防火墙通常只拦截了入站,没有拦截出站,那么我们可以让内网服务器主动出站(主动连接到黑客的服务器),与黑客自己的服务器打通隧道,最终绕过防火墙连上3389远程桌面。
还有一种情况就是我们已经拿下了内网其中一台并没有做任何防火墙规则的白名单服务器,但是我们想连上内网另一台做了入站规则的目标服务器,那么我们可以让这台白名单服务器作为一个跳板,让他先监听自身任意一个端口,然后在有任何用户连上这个端口之后,白名单服务器就主动连上内网的目标服务器,然后借助这台白名单服务器打通黑客和目标服务器的连接隧道。而在黑客工具中大名鼎鼎的lcx原理也就是如此,前者的实现是lcx的listen和slave命令,后者的实现是lcx的tran命令。

穿透原理总结

内网穿透传统方式会出现服务器和客户机之间的数据传输全部经过中转服务器,传输速度将受制于中转服务器的上下行带宽,不过稳定性很好,对于自己要购置的云主机要求就是大带宽,一般这种云主机按流量计费,传输的数据量越大价格自然越贵。所以点对点穿透便能解决流量带来的困扰,点对点可以实现服务器和客户机之间打洞直接进行数据通信,这种方式一般用于udp协议的传输,比如应用于远程NAS看视频听歌,但这种方式需要服务器和客户机都安装穿透工具,对用户访问端来说不够方便,而且这种方式受复杂网络环境影响较大,不能100%实现,稳定性欠缺。

四、方法实现

几款主流工具实现

1.frp(开源):

FRP使用 Go 语言开发,可以支持 Windows、Linux、macOS、ARM 等多平台部署。frp内网穿透无需多复杂的配置就可以达到比较好的穿透效果,具有较强的扩展性,支持tcp, udp, http, https 协议,并且 web 服务支持根据域名进行路由转发。此外,FRP 提供了一种新的代理类型 XTCP ,可以在传输大量数据时让流量不经过服务器中转,用于实现点对点穿透,当然,此功能并不能保证在你的网络环境 100% 可用,成功率较低,而且还要求访问端也得运行 FRP 客户端 (目前手机端ios没有frp客户端软件)。由于实现条件较多,所以有文件传输需求的朋友但必须用frp的朋友还是建议买带宽稍大一点的 VPS 会比较省心。frp适合有linux基础的个人,且需要自购一个云主机做中转,企业追求稳定可以考虑其他方式。

2.ngrok(开源):

ngrok是一个反向代理,通过在公共的端点和本地运行的Web服务器之间建立一个安全的通道。ngrok可捕获和分析所有通道上的流量,便于后期分析与响应。主要用途是给网站或者安装开发提供部署环境,但是也同样可以用来进行端口转发。ngrok适合有linux基础的个人,和frp类似,但比frp配置稍复杂,且需要自购一个云主机做中转,企业追求稳定可以考虑其他方式。

3.zerotier(开源/商业):

ZeroTier官方解释为将整个世界转变为单个数据中心或云区域,将所有设备,虚拟机和应用程序联接起来,就像在同一个交换机接入所有设备一样。zerotier类似VPN,为内网服务器所在NAT网络和客户机所在NAT网络各虚拟出一个VLAN,这样俩个VLAN就可以通过ZeroTier建立连接,在通过UDP打洞技术就可以实现内网服务器和内网客户机直接交互数据。目前ZeroTier提供的点对点穿透技术成功率还是比较高的,可以应付大多数网络,国内长城宽带无法点对点穿透。而zerotier因为是国外的项目,官方提供的中转服务器在国外,国内连接延迟高甚至连不上,所以官方给出了moons概念,可以自己搭建中转服务器。另外ZeroTier 支持 Windows、macOS、Linux 三大主流平台,iOS、Android 两大移动平台,以及 QNAP(威连通)、Synology(群晖)、Western Digital MyCloud NAS(西部数据)三个 NAS 平台,还支持 LEDE 开源路由器项目,支持客户端真的很多。zerotier适合有linux基础的个人,一般用于NAS,为了稳定性需要自购一个云主机做中转,服务器和客户机都需要安装zerotier,企业追求稳定可以考虑其他方式。

4.花生壳(商业):

花生壳既是内网穿透软件、端口映射软件。功能比较齐全,比较简单,也是大家比较耳熟了,支持tcp,udp.https.http,socket5应用。流量还是得走传说中的rootnode,所以是限流1G,分的等级比较多商业版、旗舰版、铂金版,需要根据不同需求付费开通相关功能。安装使用门槛低,无需自购云主机做中转,企业商用追求稳定可以选择花生壳付费版本。

5.Nat123(商业):

nat123是内网端口映射与动态域名解析(DDNS)软件,在内网启动映射后,可在外网访问连接内网网站等应用。安装使用门槛低,无需自购云主机做中转,企业商用追求稳定可以选择此方式付费版。

6.NATAPP(商业):

natapp是基于ngrok的国内收费内网穿透工具,类似花生壳,有免费版本,比花生壳好。免费版本:提供http,https,tcp全隧道穿透,随机域名/TCP端口,不定时强制更换域名/端口,自定义本地端口。安装使用门槛低,无需自购云主机做中转,企业商用追求稳定可以选择此方式付费版。

7.向日葵、teamviewer、anydesk(远程桌面):

这三款比较特殊,都是用来远程桌面使用,原理就是基于点对点穿透+传统穿透,三款软件都有免费版本,经本人长期工作使用发现,teamviewer免费版稳定性和连通性可以说是最好的,但“怀疑商业用途”不时弹出加上近年来爆出的漏洞,而anydesk使用过程中会经常断连,所以现在很多国内用户都转用了免费版的向日葵,本人使用中发现移动网络环境下使用向日葵很卡。

8.VPN(加密穿透):

原理类似zerotier,利用组建虚拟网络,局域网VLAN通信的方式,不同的是不打洞,流量均走中间服务器,内网服务端和客户端均需要安装vpn软件,但是它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库,数据通信全程加密,非常适用于企业内网资料供员工在外网访问,一般使用开源的openvpn,因相关规定这里就不做过多描述和搭建介绍了。对了,VPN还有个作用就是用来正向代理,游戏加速器就是基于VPN正向代理原理,有兴趣的童鞋可以自行查找相关资料,而正向代理典型的工具是S..,不能说了,再说下去这篇博文就要被删了...

方法实现总结

商业付费版暂不具体阐述,只能说花钱的就是好,有专业团队维护,且使用简单方便,但要注意由于数据包会流经第三方,因此对数据安全也是一大隐患。那么对于个人有动手能力的用户或者中小型企业小规模使用可以选择开源方式,综合软件配置复杂度、穿透能力等因素,个人觉得目前最好的选择就是frp用于对流量转发不大的场景,而需要大量udp传输的场景选择zerotier。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
内网穿透原理介绍后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“小麦苗博客”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。另外,Oracle和MySQL OCP包过哟,可随时联系麦老师。
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部

麦老师提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,非诚勿扰,谢谢!