一直使用阿里云的ECS做个人服务器,来部署自己的后台。因为是首次续费,所以三折优惠。去年五月份的时候三百块钱就买了一年的时间,虽然是最低配置的服务器,但是聊胜于无。闲暇时间自己写写接口,做点网站也学到了一些东西。但是马上5月1号就要到期了,一看续费金额,938一年。你这个价格对得起突发型15%实例的价格吗?老哥,一核一兆一G,20G硬盘?果断弃用,所以有了接下来的内容。在经历了一通踩坑之后,成功的使用基于Natapp的内网穿透实现了物理本机映射外网的功能。
这是很简单的概念,内网和外网没有一个具体的界限来划分。可以简单的理解为同一个局域网就属于一个内网。那么这个范围就非常大了,我们公司可以是一个局域网,校园网也可以是一个局域网,同样我们家中路由器下多个设备也可以组成一个局域网。
对于这些小的局域网而言,城域网可以称之为外网,墙内墙外的都可以称之为外网。
为什么要这样解释这两个名词,因为后续内容中的内网穿透要用到上面说的东西。这其中牵扯到一个大家都没有察觉到的一个“骗局”,而这个骗局对我们普通的用户是无法感知的。
内网穿透就是让我们自己局域网中的设备可以直接和外网进行互联,实现一个具体的业务功能和需求。
到了这里,就要说到运营商的“骗局”了。
有计算机基础的人都知道随着全球各种电子设备的增多,2011年2月3日,IpV4(第四代互联网通信协议)主地址池的资源已经耗尽,分配给了所有的电子设备,所以才有了IpV6的诞生,IpV6使用了更大的地址范围,其地址长度为128,即形成的地址池有2^128-1个,夸张一点讲就是全球的每一粒沙子都能获得一个自己独有的地址。
既然IpV4已经枯竭,那么为什么我们还可以上网呢?因为我们已经不在IpV4的主地址池里面了。我们是在其下面的某个局域网中,然后获取局域网分配的ip,所以现状就是我们很多台设备通过一个外网的IpV4地址进行互联网的访问,而国家规定正规缴费入网的用户是可以分配一个独立的外网ip的。所以我们很多人都被运营商欺骗了,那么这时候可以打电话给运营商,运营商一般会分配一个独立的外网ip给我们,这样我们在自己的路由器做一个简单的映射就可以当做服务器来使用了。但是我居住的这里不知道上面嵌套了几层运营商,所以这样肯定是行不通的。
其实我们的普通拨号网络在每一次拨号会获取一个独立的ip,这个ip是在每次重连之后会改变的,所以使用一个随时变化的ip来做服务器的映射是一件很不舒服的事情。那么就会有人问了,为什么不用一个固定的ip呢?这个问题非常好,因为面向普通用户的都是会变得ip,只有面向公司的或者大额套餐的才会给予固定的ip。
既然没办法获取一个固定的ip,甚至连一个会变得外网ip都获取不到的情况下,我们想搭建自己的外网物理服务器,只能另辟蹊径,重头再来。
基于Ngrok的内网穿透是一个反向代理。通过在公共端点和本地运行的Web服务器之间建立一个完全的通道,实现内网主机的服务可以暴露给外网。
Natapp是基于Ngrok的或内收费内网穿透工具。类似花生壳,有免费版本。提供了自定义隧道,自定义端口的模式。
这些都是是基于Ngrok开发的内网穿透工具。
ssh配合autossh使用,会自动重新启动ssh会话和隧道。
lanproxy是一个将局域网个人电脑、服务器代理到公网的穿透工具。
多方面查阅资料之后,决定使用Natapp实现内网穿透。
需要设备:服务器一台。(电脑也可以,开机除了停电就别想关机了)
相对于Linux服务器,Windows Server 是比较容易上手的,毕竟我们都习惯了Windows的操作模式,而实际上Server和我们Window10旗舰版在感知上差别不是很大,最主要的是其系统比Windows标准版更加稳定,并且多出了一些缓存纠错和数据恢复功能。
首先我们需要一个U盘作为启动盘,然后随便使用一个启动工具做成启动盘,比如大白菜启动盘制作工具。然后在MSDN下载Server 2019的iso文件,导入U盘,按照正常的装机流程进行安装。系统装好后就需要配置项目环境。使用java配置好jdk和jre环境,然后搭建Tomcat环境,搭建MySql数据库,并且配置好字符集编码,以防乱码。配置成功后先在本地启动项目。项目成功启动后就可以接入Natapp穿透隧道了。
NatApp官网 https://natapp.cn/
首先购买一个tcp类型的免费隧道,这里需要注意的是做远程控制的话需要服务器打开远程控制,切记不是关闭防火墙。服务器在开启防火墙的情况下都比较脆弱,更何况关闭防火墙。natapp tcp的端口一定要设置3389,因为这是windows远程连接的端口,如果不设置这个端口无法远程控制。
配置好tcp隧道之后就可以进行远程连接了。
Web隧道可以绑定一个natapp购买的一个二级域名(3元一个),如果不使用二级域名,那么域名在每次启动natapp.exe的时候,域名是会改变的。同时也可以绑定自己的顶级域名,前提是域名已经通过备案。并且要将域名映射到natapp提供的隧道上。
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=******** #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
配置好natapp config.ini后就可以启动natapp.exe
到此,隧道已经启动成功了,内网穿透已经ok。可以通过外网测试一下了。收获成果的时候到了。
到此我们已经成功配置好了服务器的tcp和web隧道。可以直接进行外网调试和外网的远程连接。
1、有时候我们直接ping不到外网的地址或者隧道。这是因为服务器没有开放ping的进出规则。阿里云需要配置-1/-1的端口策略,物理服务器则需要开启打印机共享传输服务。
2、配置www.xxxx.com和xxx.com访问同一项目
云服务器:则需要在域名解析的时候通过 www和@来分别配置。
物理服务器:在tomcat中的server.xml中添加host节点,映射的host分别为以上类型网址。并且要新建一个webbapp文件夹,来对应不同的host。
长路漫漫,菜不是原罪,堕落才是原罪。
我的CSDN:https://blog.csdn.net/wuyangyang_2000
我的简书:https://www.jianshu.com/u/20c2f2c3560a
我的掘金:https://juejin.im/user/58009b94a0bb9f00586bb8a0
我的GitHub:https://github.com/wuyang2000
个人网站:http://www.xiyangkeji.cn
个人app(茜茜)蒲公英连接:https://www.pgyer.com/KMdT
我的微信公众号:茜洋 (定期推送优质技术文章,欢迎关注)
Android技术交流群:691174792
以上文章均可转载,转载请注明原创。