部署Lucky 配置DDNS与反向代理 实现 IPV6 + HTTPS 外网访问家庭 NAS

对 NAS 用户来说,内网访问是基础功能,而能够玩转公网(外网)访问,才能使 NAS 真正成为个人专属家庭服务器。通过 Lucky 可以轻松实现公网 IPv6 转内网 IPv4 的功能,并有动态域名、端口转发、反向代理、证书管理(ACME)等等多种功能,通过一个工具完美实现 IPV6 + HTTPS 外网访问家庭 NAS OpenWrt...


Lucky 部署

Lucky 安装可以参考:OpenWrt 通过 IPK 软件包及 Docker 两种方式安装 Lucky 教程

内网环境下,输入 IP:16601 即可访问管理界面。默认的账户密码为 666/666

首次登录先在「设置」 - 「登录验证设置」修改默认账号及密码。


Lucky 配置

本次配置使用的 DNS 服务商为 Cloudflare ,提前把域名托管到 Cloudflare,如果你没有域名,可以使用之前我们推荐的免费域名

Lucky 设置DDNS(动态域名解析)

进入动态域名设置,配置域名解析。在左侧找到「动态域名」选项卡,并点击「添加任务」。

这里我们使用 Cloudflare 的 DNS 做演示:

  • 任务名称:自定义
  • 操作模式:简易模式
  • 托管服务商:选择 Cloudflare
  • Token:填写 Cloudflare 申请的 API 令牌

Cloudflare 获取 API Token 步骤

启用 {ipv6Addr} ,获取公网IP方式这里有两种方式,如果你“通过接口获取(推荐)”无法获取到IPV6地址,可以使用“通过网卡获取”。

点击「添加同步记录」,添加域名。设置完成后点击底部「添加任务」。

  • 备注:选填
  • 记录名:填写域名
    • zoio.net:主域名
    • *.zoio.net:为泛域名解析,即*号可以代表任何字符。
  • 同步开关:开启
  • 记录类型:AAAA(ipv6)

稍等片刻,看到同步结果为“同步成功”或“本地记录未变化”,就说明DDNS设置成功了。这里设置的DDNS其实和使用其他单独的DDNS应用(比如DDNS-GO)效果是一样的。


申请SSL证书

接下来我们需要为自己的域名申请SSL证书。转到「SSL/TLS证书」选项卡,并点击「添加证书」。

添加证书:

  • 证书备注:随便填
  • 添加方式:选择 ACME
  • 证书颁发机构:选择 Let's Encrypt
  • 验证方式:选择 Cloudflare
  • Token:填写 Cloudflare API 令牌
  • 域名/IP列表:输入我们DDNS设置的的域名

如果你没有ipv4公网,在更多设置取消勾选使用ipv4通道申请证书

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


设置反向代理及HTTPS访问

在左边菜单栏选择「Web 服务」菜单,点击「添加 Web 规则」。


添加web服务规则:

规则基本设置:添加web服务规则的时候,名称可以随意写,操作模式选简易模式,监听类型我因为是ipv6,所以选的是tcp6,监听端口默认是16666(大家也可以换成自己喜欢的,只要没被占用就行,后期访问就是用域名和这个端口),防火墙要开启,TLS也得开启(因为https访问必须开启这个)。

  • Web服务规则名称:名称随意,可留空
  • 规则开关:启用
  • 操作模式:简易模式
  • 监听类型:选择 IPv6
  • 监听端口:监听端口默认是16666(大家也可以换成自己喜欢的,只要没被占用就行,后期访问就是用域名+这个端口)
  • 防火墙自动放行:开启
  • TLS:开启(https访问必须开启)

添加子规则:

往下拉,在「子规则列表」点击「添加子规则」,这个所谓的“子规则”,就是你从外网访问的某项服务,比如 NAS,或者 OpenWrt 管理页面。

  • 子规则名称:名称随意,例如 OpenWrt
  • 子规则开关:启用
  • 服务类型:反向代理
  • 前端地址openwrt.zoio.net,前缀自定义,域名修改为自己的域名。
  • 后端地址:内网IP+项目端口,例如http://10.10.10.10:80
  • 万事大吉:启用
  • 忽略后端TLS证书验证:是

最后点击右下角的「添加Web服务规则」保存规则,如果还有其他服务需要外网访问的话,那么还是按照上面的方法,添加新的Web服务子规则,需要多少服务,开几条子规则即可,但是注意二级域名前缀不要冲突。


添加重定向规则:

如果不设置重定向,有些浏览器只输入网址,不输入前面的https,在某些浏览器中会自动被识别为http,造成无法访问,我们需要在仅输入域名时让浏览器也能够自动跳转到https

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

  • Web服务规则名称:名称随意,可留空
  • 规则开关:启用
  • 操作模式:定制模式
  • 监听类型:选择 IPv6
  • 监听端口:监听端口默认是16666,和我们上一条规则的端口要一致。
  • 防火墙自动放行:开启
  • TLS:禁用

往下点击「默认规则」:

  • 服务类型:重定向
  • 默认目标地址:填写 https://{host}:{port}
  • 万事大吉:启用
  • 其他所有选项全部保持默认

最后点击右下角的「添加Web服务规则」保存规则。这样一来,在外网访问时我们只需要输入xxx.zoio.net:16666 ,浏览器就会自动跳转到https协议https://xxx.zoio.net:16666,非常方便。


端口转发

如果你是在 NAS 或者 OpenWrt 旁路由上部署的Lucky,还需要在主路由把反向代理的端口通过路由器映射出去,才能够正常从外网访问。就只需要映射一个端口就行,像我这里就是16666,不用把每个服务单独的内网端口再映射出去,注意内网端口和外网端口号要保持一致。

iKuai 示例:

网络设置 - 端口映射

OpenWrt 示例:

网络 - 防火墙 - 端口转发

ROS 示例:

IP - Firewall - NAT