搭建属于自己的内网穿透服务器,并部署域名

缘起

什么是内网穿透?内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。说人话,就是你在本地部署的一个服务,比如localhost:1111 ,你想要给别人从外部访问,期间所完成的这个过程。

之前的文章咱们说到,使用ipv6+ddns实现了外网访问本地服务器(NAS),但是这种方式有个致命的问题那就是访客只能通过支持ipv6的网络环境来访问,有时候访问者不一定举报这样的网络环境,之前逛B站看到这样的一则视频:独享带宽,教你搭建只属于自己的内网穿透服务器 视频里面使用了腾讯云的服务器,搭建内网穿透服务,即使没有ipv6,也能正常访问。想到我之前从未购买云服务器类产品,我趁着腾讯云的学生优惠活动,买了台云服务器把玩一波,顺便入坑!

开始部署

首先当然是按照视频那样,购买云服务器并搭建docker容器。由于作者精力有限,就不重复演示视频内容了。图中可以看到,我使用了腾讯云的自带的乌班图docker系统,好处就是内置docker,无需重复安装。

1.png

下图就是frp的原理,将本地的服务映射到云端。这样外网设备访问云端的服务器时,就相当于直接访问内网的服务,解决了本地没有公网IPV4的烦恼。但是,这样的访问方式很不够优雅,需要用[云服务器IP:端口号] 进行访问。有看过前面的文章大家都知道,我购买过域名,当然是用域名比较好。IPV6+DDNS 实现远程访问本地服务器这里讲下域名部署过程!下文中用NAS代指本地服务器

2.png

安装宝塔面板

为了方便操作服务器,我安装了宝塔面板,因为有web界面的面板操作服务器起来更方便些。首先第一个坑就出现了:宝塔无法识别腾讯云的docker容器,提示未安装。询问腾讯云客服得知宝塔可能无法识别路径,不过考虑到腾讯云后台已经能够直接管理容器,这个也就无所谓了!

发现问题

文章关键的来了。实际上,到了这一步,是已经可以通过域名访问到本地的服务器了,一切访问也正常,但这里面是有点问题的。什么情况呢?因为云端80和443端口被frp服务占用,导致云服务器上的其他服务无法再使用80和443端口了。那如果我在这腾讯云服务器上面部署了其他的web服务,是无法用域名访问的,因为一旦用域名访问,frp会将这些请求全部转发到本地nas那里。本地NAS已经设置了反向代理,客户端通过域名告诉本地NAS,NAS根据域名转发对应的服务。虽然是不同域名,但是其实都用的80和443端口(外部来源)转发到对应的内网服务。这样一来,腾讯云的服务器几乎只是用来做frp内网穿透了,有些浪费!这是第二坑!如图所示是本地反向代理设置。

3.png

那有没有好办法呢?经过作者摸索,其实很简单,云端服务器不要转发本地的80和443端口即可,而是直接转发本地的相关端口号,比如网盘服务5244端口。这样frp服务不会占用这两个端口,而是交给宝塔面板去管理。我们仅仅转发NAS上的各种服务(80、443以外)的端口,并在云服务器上设置反向代理就行。

设置反向代理服务器

我们先去你的域名注册商,将域名DNS指向你的云服务器。如图,在阿里云DNS解析添加解析A记录,A记录是IPV4,AAAA是IPV6。这里就不用像V6一样搞什么DDNS了,因为我买的云服务器有效期内都是这个公网V4地址。顺便提一下,我的域名和解析在阿里云操作,购买的服务器确在腾讯云,这样是可以的。后面的备案也在腾讯云,下面细说。

4.png

OK指向之后,进入宝塔面板。宝塔面板先防火墙关了!!!接着,在软件商店安装NGINX服务器,作为反向代理用。

5.png

这时候开始设置反向代理,去左侧网站那里创建网站。第三个大坑来了,有些端口宝塔竟然不让创建,比如8080,提示端口不合法。可以通过修改配置文件解决。

宝塔80端口被占用如何解决:https://www.souwai.cn/37881.html
宝塔添加站点 端口不合法 :https://blog.csdn.net/qq_41820986/article/details/126740343

新建网站如图填写。域名按照实际填写,根目录乱填都行,PHP选择静态,因为用不上。

6.png

这时候,可能有第四个大坑,没法添加网站,提示:nginx: [emerg] host not found in upstream。这时候请填写有效域名测试,比如 qq.com 保存之后再去里面删掉!反复多试几次,最后我都是添加了正常的域名,可以保存通过,如图。

解决 nginx 启动错误:https://blog.csdn.net/qq_34786108/article/details/123319076
7.png

修改站点反向代理,和本地NAS的代理原理差不多,填写对应的端口就好了,最后点击保存!

8.png

这时候可能遇到第五个大坑,宝塔可能提示反向代理无法保存!

Nginx文件已经存在全局反向代理问题如何排查:https://www.yisu.com/zixun/723637.html

大功告成,你会发现云服务器和本地NAS都设置了反向代理,原理图变成了下面这样!

9.png

设置ssl证书

很简单,还是在网站配置这里,上传证书并启用强制HTTPS就行了。证书在你申请的供应商下载pem和key文件,把里面的内容直接复制进去。有时候会报错,那就把整个网站都删了多试几次。

你可能有疑问,本地NAS服务器和云服务器能使用相同的SSL证书吗?答案是肯定的。

10.png

解决了这么多坑总算是成功了!宝塔的nginx设计有点问题呀(笑哭)

域名备案

如果你的域名没备案,设置解析指向腾讯云是无法访问的,会被阻断。按照要求备案就行了。广东通信局我等了大概一个多星期才审批下来。

成功

最后我们关闭IPV6服务,测试域名能否访问