文章

公网环境下,使用Lucky轻松实现反向代理+Https外网访问家庭NAS

之前一直用的IPV6+DDNS-GO的方案实现外网访问群晖系统,最近看到一篇帖子,可以给电信投诉,之前有公网IP,现在需要恢复,我宽带已经9年了,试一试,app上我问了下,还是很官网,就是资源枯竭,办理需要399以上套餐加每个月100,我直接给他说提交个工单,让懂的人给我联系,没想到第二天电信给我打个电话核实下名称身份证就可以了。

于是开始用ipv4的方案外网访问。网上看了很多方案,我只想一个端口开放给外网,访问不同的服务,找了一下无意看到一个方案,Lucky插件,这个插件方便的是有DDNS,有反代理,还有证书管理和自带的证书自动续期。

以下配置教程摘抄至知乎:https://zhuanlan.zhihu.com/p/660282355(原文链接)

在此也特意感谢Lucky的作者GDY大神。

前提条件:

1、有域名,最好通过ICP备案。

2、有公网IP。

3、本文适用群晖系统。

Step 1、在Docker中安装Lucky

转到NAS端,在镜像管理中搜索gdy666/lucky并下载:

下载完成后在本地镜像中找到,创建容器:

取一个自己喜欢的名字,然后点击下一步:

重启策略选择“容器退出时总是重启容器”,然后不要点击下一步,而是转到上方的网络选项卡。

由于需要将Lucky作为反代服务器使用,因此网络模式必须选择host,不能使用常用的Bridge!

转到储存空间选项卡,将Lucky安装位置设置在Docker/goodluck,装载路径中填写/goodluck,并给予完全的读写权限:

端口设置保持默认的16601即可,其他选项也保持默认。直接点击下一步并启动运行:

Step 2、在套件安装Lucky

群晖套件中心右上角设置,我是群晖7的系统,添加套件来源:矿神源:https://spk7.imnks.com/

然后直接搜索lucky安装

打开电脑浏览器,在地址栏中输入IP+16601,进入Lucky管理后台:

缺省用户名和密码均为666,填入后登录,并点击左侧的“设置”选项卡,重新设置一套新的管理账号和密码,确保安全:

Step 3、设置DDNS(动态域名解析)

接下来在左侧找到“动态域名”选项卡,并点击“添加DDNS任务”。

DDNS任务名称随便填自己喜欢的,操作模式选择“简易模式”,DNS服务商选择自己域名的服务商(我这里是阿里云),并将前面保存下来的AccessKey ID和 Secret填入,然后按照自己家的公网IP类型选择v4或v6,获取方式选择通过接口获取,最后域名列表填写两行,第一行是主域名,第二行是*.主域名,代表二级域名。其他全部默认,完毕后点击添加:

稍等片刻,看到同步结果为“域名IP和公网IP一致”,就说明DDNS设置成功了。多说一句,这里设置的DDNS其实和使用其他单独的DDNS应用(比如DDNS-GO)效果是一样的。

Step 4、申请SSL证书

接下来我们需要为自己的域名申请SSL证书。转到“安全管理”选项卡,并点击“添加证书”。

备注随便填,添加方式选择ACME,证书颁发机构选择Let's Encrypt,DNS服务商选择自己的服务商。

和刚才一样,填入AccessKey的ID,Secret,主域名和二级域名。电子邮箱可以使用系统提供的临时邮箱,或者自己的邮箱都可以。算法选择默认的RSA2048。

如果你的公网IP是IPv4,就开启DNS查询强制IPv4,同时启用DNS查询仅使用TCP通道。其他所有选项全部保持默认,并点击添加完成。

证书申请需要稍等一段时间,大概几分钟。成功后就会出现ACME信息,颁发时间和道到期时间。每张免费SSL证书的有效期为三个月,但Lucky在证书到期日会自动续签,不需要人工干预。

Step 5、设置反向代理及HTTPS访问

转到Web服务菜单,点击“添加Web规则”。

Web服务规则名称随便填,规则开关开启,操作模式选简易模式,监听类型按照你的公网IP类型选择。监听端口这里给出的默认是16666,如果不喜欢,可以自己随便改,只要和局域网中其他服务端口不冲突就行,防火墙自动放行开启。特别注意,这里一定要开启TLS,否则无法使用HTTPS。

接下来先不要着急添加规则,而是点击“添加Web服务子规则”。实际上,这个所谓的“子规则”,就是你从外网访问的某项服务,比如Home Assistant,或者NAS管理页面。名称还是随便写,规则开关开启。Web服务类型选择“反向代理”。

前端域名/地址需要填写你想要从外网访问该服务的二级域名,比如我这个子规则是分配给NAS管理页面的,那我就写nas.xxx.xx或者ugreen.xxx.xx,前缀可以按照自己的喜好编写。

而后端地址则需要写你访问该服务的内网IP+端口号,前面不要忘记加http://,其他选项全部保持默认。

这里有一个需要注意的地方就是BasicAuth认证,也就是基础加密功能。在开启之后,从外网访问时,需要先输入账号和密码,等于是多加了一道保险。对于本身就有密码登录界面的服务来说,是否开启可以根据个人需求。但对于本身没有密码登录界面的服务,比如YACD小猫咪,开启BasicAuth认证还是有必要的。

如果还有其他服务需要外网访问的话,那么还是按照上面的方法,添加新的Web服务子规则,需要多少服务,开几条子规则即可,但是注意二级域名前缀不要冲突。比如我这里就开启了5条:

全部设置好以后,我们还需要把反向代理的端口(默认为16666)通过路由器映射出去,才能够正常从外网访问。和正向代理不同,现在我们只需要映射一个反代端口就可以,不用把每个服务单独的内网端口再映射出去,注意内网端口和外网端口号要保持一致。

端口放出去之后,如果所有设置都正常,就已经可以从外网访问了。这里注意一下,lucky填的什么外网端口,路由器设置这里就填什么端口,内部端口和外部端口都填一样的,这样操作相当于路由器开放这个端口,然后把路由器的防火墙打开,其他端口就进不来了。比如我现在输入https://nas.xxx.xx:8888,就可以访问到NAS的设置页面。而且可以看到,域名的前面是有一把锁的,也就是说已经开启了SSL安全访问。

不过这里还有个小问题,就是在输入网址的时候,还是需要带上Https://,否则在某些浏览器中会自动被识别为http,造成无法访问。为了解决这个问题,我们需要在仅输入域名时让浏览器也能够自动跳转到https。

回到Lucky,在Web服务中添加一条全新的Web服务规则(注意不是子规则)。名称随便,操作模式选定制模式,监听端口和前面的反代端口保持一致,TLS一定要禁用!然后点击“默认子规则”

打开默认子规则界面后,Web服务类型选择重定向,然后在默认目标地址中输入:

https://{host}:{port}

并打开万事大吉开关(自动添加请求头),其他所有选项全部保持默认,添加完成。

这样一来,在外网访问时我们只需要输入xxx.xx.xxx:端口号,浏览器就会自动跳转到https协议,非常方便。

到此为止,我们就可以从外网使用反向代理+HTTPS方式访问家里的NAS服务器了,这已经是目前最完美的方式。不过有些小伙伴可能还会问,为什么不把最后的反代端口号也去掉,直接输入二级域名访问,岂不是更加优雅?

实际上,HTTPS协议默认的端口为443。当我们输入https://xxx.xx.xx时,就等同于访问https://xxx.xx.xx:443,只不过由于通用标准的缘故,443端口在输入时可以省略。

遗憾的是,目前绝大多数家庭宽带80和443端口都是被运营商封闭的,因此只能退而求其次,选择其他端口使用。如果你家宽带是万里挑一的幸运儿,没有被封闭443端口,那么就可以使用443端口作反代,并直接使用域名访问。

443端口是否开放,可以通过站长之家查询,输入域名或者IP和端口号即可:

https://tool.chinaz.com/port

比如我这里443端口就是关闭状态:

今天的教程就到这里,只要按照以上步骤正确操作,就可以从外网轻松,愉快,安全,优雅的访问家中NAS任意服务,绝对是NAS进阶玩家必备。

License:  CC BY 4.0

©2024 你彬哥的博客.

蜀ICP备2022008680号-1

总访问量:👀| 访客数:🚶‍♂️
本站已运行: 📅