几种搭建内网穿透环境的方案及实现(一):各种方案的介绍与比较

» intranet penetration

内网穿透的介绍

内网穿透的主要任务是,为处于内网的主机取得与处于其他内网的主机通信的链路。众所周知,因为ipv4的ip资源紧缺,使得内网的架构越发普及。而处于内网的主机往往是没有独立公网ip的,也就是说,处于内网的主机在公网上的位置并不是唯一的,它与其它同处一个内网的主机公用一个公网ip地址。这样就产生了,如何才能使得处于不同内网的主机进行通信的问题。目前的内网穿透方案主要有下面两个流派:1、借助内网穿透软件实现;2、通过ddns实现。

利用内网穿透工具实现穿透

zerotier

常用的内网穿透软件有zerotier和frp,先说一说zerotier这款软件的实现思路。它主要通过在多台主机上创建虚拟网卡,通过该网卡,在公网上实现一个虚拟的局域网。下图是对zerotier技术进行的一个图示。

在默认情况下,zerotier会提供官方的主机作为这个虚拟局域网的网关,来进行流量的引导。但是因为它的主机处于境外,故对国内的用户来说不是太友好。另外zerotier也允许用户自己搭建moon,也就是利用客户自己的主机作为虚拟局域网的网关,不过在一定条件下,自建的moon应该还是需要和官方的主机进行通信的。这个方案的好处在于,这样建立的内网穿透方式,各个主机之间的的流量阈值,由其各个内网本身的带宽决定。这与frp的方案不同,在frp的方案中,带宽受到制约的环节更多。但是这个方案本身也有一些问题,第一个问题是,官方服务器处于境外带来的网络连接不稳定的问题,另外一个问题是,当内网的架构非常复杂时,zerotier提供的内网穿透将可能失效(任何处于内网的设备都会受到该影响)。

frp

而frp采取的则是与zerotier完全不同的方案,frp通过将内网主机的固定端口映射到具有公网ip主机的固定端口上,以此来帮助内网的设备,使其能够在公网上拥有一个固定的位置。下图是frp技术的图示。

这种方案的缺点有二:第一个缺点、必须拥有一台具有公网ip的主机,而国内的vps由于高昂的带宽费用,除非是首单,否则基本上是1000/年起步的,而国外的vps相对便宜,可以做到200-300/年。所以,光是这一条就可以筛选掉大部分的人了。第二个缺点是,因为frp是采用将内网主机映射到公网主机的端口上,故其通信的带宽将同时受到内网带宽以及服务器(具有公网ip的主机)带宽的限制。而国内的服务器带宽也是贵的吓人(都是被各个直播平台炒起来的,直播平台都是消耗带宽的大户),5M的带宽直接就比服务器本身还贵了。

利用ddns技术实现穿透

除了上面提到的内网穿透工具的方案外,还可以通过ddns来实现内网穿透。要实现ddns的必须要先购买一个域名,当然,国外的域名供应商也提供一些免费的域名供使用,当然付费的域名也不贵,从几十到几百每年不等。

调用DNS供应商API的方案

实现ddns的方案有很多,下图是一般ddns的实现方式:

主要分为两类:一、利用域名解析供应商提供的api,实现ddns服务。每隔一段时间通过脚本获取内网主机的公网ip,并利用api修改域名对应的ip地址。使得始终可以通过设定好的域名,跟踪内网主机对应的公网ip。github上有一个项目NewFuture/DDNS,它做的很好,支持腾讯云、阿里云、cloudflare等多个平台。这类方案的最大缺点在于免费用户的ttl往往很大,以腾讯云举例,其ttl达到了600秒。也就是在修改dns记录后,一般需要过10分钟后才能生效。如果在内网上搭建私人网盘的话,在这段时间内是无法访问这个网盘的。

自建DNS服务器的方案

另外一类实现ddns的方式是,在自己的服务器上搭建域名解析服务器(如:bind),利用该服务器为域名提供ip地址的解析,这样就不必受限于域名解析供应商设定的ttl等参数。这种方案的缺点是需要购买一台服务器。

接下来将对各个方案的搭建方式分别做详细的介绍。