外网映射和反向代理--lucky的部署和使用

本文是面向有公网IP的用户,IPV4和IPV6均可。不过lucky也可以支持没有公网IP的打洞,可以自己研究一下。我主要用Lucky来做DDNS、web反向代理、申请SSL证书等。

1.Lucky简介:

Lucky最初是作为一个小工具,由开发者为自己的个人使用而开发,用于替代socat,在小米路由AX6000官方系统上实现公网IPv6转内网IPv4的功能。Lucky的设计始终致力于让更多的Linux嵌入式设备运行,以实现或集成个人用户常用功能,降低用户的硬件和软件操作学习成本,同时引导使用者注意网络安全。随着版本更新和网友反馈,Lucky不断迭代改进,拥有更多功能和更好的性能,成为用户值得信赖的工具。

Lucky 的核心程序完全采用 Golang 实现,具有高效、稳定、跨平台等优点。其后台前端则采用 Vue3.2 技术进行开发,具有良好的用户体验和响应速度。此外,Lucky 的管理后台采用前后端分离的架构,第三方开发者也可以自由使用OpenToken轻松调用Lucky的各种功能接口。

官方网站:

2.安装

先用portainer(docker)来部署lucky:

打开portainer-Volumes,新建一个lucky目录,用来存放配置文件。也可以不创建,后面自己手动映射到硬盘其他路径。

点击Add container。Name输入lucky(可随意改动),image输入gdy666/lucky:latest,端口映射一个反向代理端口,选择一个没有被占用的即可,推荐5位数以上的端口。还需再映射一个lucky访问端口16601,可按下图设置:

Volumes目录挂载一下配置文件目录,选择刚才创建的文件夹。如果没有创建可以选择自己手动指定一个。

环境变量输入参数PATH,值输入

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

修改重启策略后,创建容器。

3.访问lucky

默认登录地址:

http://你服务器IP地址:16601

默认登录密码:

默认账号:666
默认密码:666

登录以后务必先修改登录账户和密码。

4.申请免费域名

挺多网站都提供免费2级域名注册,像no-ip、cloudns、freemyip等。我使用下来,freemyip是最方便的。

先去freemyip注册一个免费的二级域名,不需要注册用户,直接查看域名只要没被占用就行。

注册完成后,会得到一个URL连接,务必保存好,这包含我们用来DDNS的密钥。大概类似这样

https://freemyip.com/update?token=17697cb2d4y5123e243f0uy1&domain=example.freemyip.com

其中token=后面,&号前面的值就是我们的密钥,最后面那段是申请的域名。

5.DDNS

家用宽带的公网IP是会变的,如果不将IP同步到域名上,那我们在外面访问服务的时候就要频繁的更换IP地址。部署的服务多了以后更换IP地址会变得非常的繁琐,所以我们需要将IP自动同步到域名上,用域名来指向IP地址访问服务。

登录lucky,进入动态域名那一页。添加一个任务,用来将我们的IP同步到域名。

记录类型根据自己的实际情况选择IPV4或IPV6,记录名填写刚才注册的域名,然后添加任务即可。

设置好以后,可以查看到同步记录,可以检查一下和你的IP地址是否一致。后面我们就可以使用这个域名来访问家里的服务了(还需要路由器或光猫做端口映射)。

freemyip支持扩展多个3级子域名,可以点击添加记录来增加。比如在example.http://freemyip.com下面可以新增多个3级子域名:

jellyfin.example.freemyip.com
qbittorrent.example.freemyip.com
jackett.example.freemyip.com

直接在lucky里添加记录即可,无需去freemyip网站做任何操作。这是我们后面反向代理的记录,我们将不同的3级域名反向代理到内网不同的docker服务。

6.端口映射

我们部署的服务器都是不同的端口号的,例如jellyfin的端口号默认为8096,如果不把8096映射到外网,那么外网还是无法访问jellyfin服务的。

每个路由器的设置可能不一样,大家可以具体查一下。映射端口以后,加上我们上面DDNS的配置,就可以用域名加端口号来访问服务了。例如:

example.freemyip.com:8096

7.申请SSL证书

申请了SSL证书我们就可以用https来访问了。lucky可以申请Let’s Encrypt的证书,并且自动续签,这样省去了我们3个月要申请一次的麻烦。

在lucky-SSL/TSL证书界面,点击添加证书。添加方式选择ACME,证书办法机构选择Let’s Encrypt,认证方式选择FreeMyip,token填写刚才注册域名的值。域名列表这里填写你注册的域名,然后换行增加一个*.注册域名,这样你所有的3级域名都可以https来访问了。可以参考图中的设置,然后保存后lucky会自动去申请证书,大概几分钟的时间,等一下就好了。

8.反向代理

一般我们会用docker部署多个应用,每个应用的访问端口都不一样,这样就要映射很多端口到外网。这样一个是没那么安全,还有就是麻烦,每次新增一个应用都要去映射一次。我们可以用反向代理来只开一个端口,然后将不同的3级域名映射到内网不同的端口上。

在lucky-web服务界面,添加web服务规则。规则名称随意填写,TCP4和TCP6根据你IPV4和IPV6实际情况勾选。监听端口填写部署的时候映射的监听端口,启用TLS,然后就可以了,子域名后面再添加。

添加好规则以后,点击添加子规则。名称可随意填写,前端地址填写域名(不要http://),后端地址填写内网的服务地址。

建议将申请的二级域名反代给一个导航应用,比如sun-panel,其他应用全部用三级域名。然后在导航页面添加自己的应用即可,这样不用记太多域名。

将所有应用逐一进行反向代理,最后大概是这样:

然后将所有应用都添加到导航页就行了。