好玩又有趣的网络 篇十九:聪明的少年呦,耐心点啊!这真的是最后一篇了呦!——内网穿透基础篇3.0
导言
在上篇文章中,我们已经讨论了怎么简单高效的在有公网的情况部署内网穿透服务。但是,很可惜的是,现在的宽带基本上已经不可能给你公网ip了(在这里,点名批评一下移动宽带,就是一个大内网),能分给你的只有10开头的内网(私网)IP(已经在运营商那里NAT(网址转换,公网转私网)一次或者多次了),这种情况就没有办法再用简单的DDNS+端口映射进行内网穿透了。这个时候我们就需要通过搭建隧道+端口转发来实现内网穿透了。
正文
现在大部分家庭宽带的网络结构都是下面这种情况
在开始之前,先确认一下自己的宽带是否有公网IP。
先打开百度搜索,在搜索栏里输入 IP
这里显示的是你正在使用的公网IP,比如我正在使用的是117开头的公网IP。
然后再去拨号设备的WAN侧查看设备获取的IP
如果拨号设备WAN侧获取的IP地址和你在百度询的IP地址一样,那么,恭喜你!你的宽带能获取公网IP地址。如果你的拨号设备WAN侧获取的IP地址跟我一样,是一个10开头的私网IP地址,那就是没有公网IP。
没有公网IP的话,那就只能通过搭建隧道+端口转发的方式进行内网穿透了。根据实现搭建隧道+端口转发的原理,可以简单的分为两种穿透类型:服务器中转穿透和点对点穿透。
服务器中转穿透
通过服务器中转这种方式穿透成功率很高,基本上可以达到100%。而且它不限网络NAT类型,只要连接上了互联网就能被互联网上的其它设备访问到。所以,市面上大多数内网穿透产品都是采用这种类型实现穿透,比如向日葵远程控制、teamvierwer远控、ngrok反向代理、FRP反向代理等等。
可以把服务器中转穿透的过程简单的分为三步:打通隧道>>端口转发>>原路转发响应报文。
以FRP反向代理为例简单说一下服务器中转穿透的原理:
有一天,韩梅梅跟李雷说她下载了一部很好看的电影,存放在家里的NAS里,问李雷有没有什么办法用随时随地用手机观看家里NAS里。身为技术宅的李雷觉得是时候向美女展示真正的技术了。经过实地考察,李雷发现韩梅梅家的宽带是移动宽带,没有公网,所以需要内网穿透才能访问到她家里的NAS。考虑到手上刚好还有一台有公网的云服务器(VPS),于是决定搭建FRP反向代理服务器进行内网穿透。
经过不懈的努力,李雷终于在有公网VPS(公网地址是:183.216.230.121)搭建好了FRP服务端,又在韩梅梅家部署了FRP客户端。完全部署好后,在手机或者其它联网设备浏览器上输入:183.216.230.121+端口号就能访问韩梅梅家的NAS了。韩梅梅试用了之后表示很满意,表示愿意一起观看电影。但李雷表示网络太有趣太好玩了,要好好的研究一段时间,很干脆的拒绝了韩梅梅的建议,并提醒她云服务器只有一个月的有效期了,要赶紧续费。
通过上面的场景,各位值友应该知道需要一个有公网的云服务器或者电脑安装服务端作为节点,被访问的设备安装客户端。互联网的设备先访问节点,节点接收到请求后转发给被访问设备的客户端,客户端把数据转发给被访问的设备,被访问的设备收到请求后把应答原路发送到互联网的访问设备。
服务器中转穿透的数据传输速度取决于宽带的上行速度和服务器(节点)宽带。
点对点穿透
服务器中转穿透最大的缺点就是在内网穿透传输大量数据时如果都经过服务器中转的话,这样会对服务器端带宽压力比较大。这个时候,可以考虑用点对点穿透,即P2P技术。但是,并不是所有网络环境下,都可以采用 点对点穿透。理论上来说,只要是Cone NAT(锥形网络)就可以用点对点穿透,Port Restricted Cone(端口限制圆锥型)、Address Restricted Cone(地址限制圆锥型)、Full Cone(完全圆锥型)都可以。但是Symmetic(对称性网络)不行,只能通过服务器中转穿透。网络类型可以用NatTypeTester.exe 测试。
点对点穿透实际运行过程是比较复杂的,在这里大致的说一下原理。点对点穿透也需要一个具有公网的服务器,不过用途不一样,在这里是作为信使使用。李雷的电脑对信使说我要访问韩梅梅家的NAS。信使说你等会儿,我帮你联系一下,信使对韩梅梅家的NAS说,有人要访问你,告诉我你的地址和端口,我转告给他。韩梅梅家的NAS告知了信使自己的地址和端口,并且从信使那里获取了李雷家电脑的地址和端口。双方都知道对方的地址和和端口后就开始进行数据交换了,这个时候数据传输是不经过信使的,都是点对点进行传输。这个时候的传输速度取决于双方的宽带。
用点对点穿透技术的有zerotier、pwnat、FRP的XTCP协议等。这种穿透方式虽然看起来很美好,但是有一个致命的缺陷,那就是不稳定。即使是在Full Cone网线环境下,也有很大的概率穿透失败。
总结
接下来就可以根据各自的网络环境来部署内网穿透了。祝大家玩的愉快!
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~