基于 Lucky 实现DDNS、SSL 与反向代理指南

在云服务器(特别是位于 NAT 网络或具有内网 IP 架构的云环境)上部署个人服务时,动态域名解析(DDNS)、HTTPS 加密以及端口的反向代理是核心的底层基础设施。本文将以部署 Minecraft 服务端及网页管理面板为例,详细记录使用 Lucky(万吉全能版 v2.27.2) 实现上述网络架构的完整流程。


一、 架构概览与核心需求

  • 部署环境:云服务器(示例配置:4C16G,内网 IP 为 10.9.x.x 架构,配有公网 IP),操作系统为 Linux。

  • 域名解析:阿里云 DNS 托管(示例域名 example.top)。

  • 核心目标

    1. 突破 Lucky 较新版本的初始化外网访问安全锁。
    2. 配置阿里云 API 实现多级域名的自动 DDNS 更新。
    3. 通过 ACME 协议全自动申请并续期 ZeroSSL 泛域名证书。
    4. 通过反向代理将内部服务(如运行在 23333 端口的控制面板)安全地暴露在外网的自定义端口(如 16666),并开启 HTTPS。

二、 核心部署与配置流程

1. 基础安装与端口放行

在开始部署前,必须在云服务器提供商(如 UCloud、阿里云等)的控制台安全组以及系统内部防火墙中放行相关端口。

  • TCP 16601:Lucky 默认管理后台。
  • TCP 443 / 80:常规 Web 服务端口。
  • TCP 16666:计划分配给 Web 面板的自定义访问端口。
  • TCP 25565:Minecraft 游戏直连默认端口(无需经过反向代理,直接放行即可)。

执行 Lucky 官方一键安装脚本(推荐安装至 /etc 目录):

Bash

URL="https://release.66666.host"; curl -o /tmp/install.sh "$URL/install.sh" && sh /tmp/install.sh "$URL"

检查服务是否正常运行:

Bash

systemctl status lucky.daji

2. 突破初始外网访问限制(核心问题解决)

问题表现:安装完成后,通过 http://公网IP:16601 访问后台时,返回 JSON 报错 {"ret":1,"msg":"当前外网访问已被禁止..."}

解决核心思路:Lucky v2.13.9 之后引入了严格的安全机制,若配置文件初始化后 10 分钟内未设置安全入口和新密码,外网访问将被永久物理锁定。必须强制删除核心权限配置文件,触发重新初始化。

最终有效操作指令

Bash

# 1. 强制删除包含安全标记的基础配置文件
rm -f /etc/lucky.daji/lucky_base.lkcf

# 2. 重启服务以重新生成配置,并触发 10 分钟倒计时
systemctl restart lucky.daji

限时后续操作(必须在 10 分钟内完成):

  1. 立即访问 http://公网IP:16601,使用默认账号密码(666 / 666)登录。
  2. 进入设置页面。
  3. 修改默认账号密码,并开启外网访问总开关。
  4. 设定安全入口(例如设置为 /myadmin)。
  5. 点击保存。此后需通过新地址 http://公网IP:16601/myadmin 访问。

3. 配置阿里云 DDNS (动态域名解析)

由于云服务器网卡通常绑定的是内网 IP(如 10.9.x.x),DDNS 必须通过外部接口获取真实的公网 IP。

操作步骤

  1. 登录阿里云 RAM 控制台,生成并记录 AccessKey IDAccessKey Secret
  2. 进入 Lucky 后台 -> 动态域名 -> 添加任务
  3. DNS服务商选择“阿里云”,填入凭证信息。
  4. 获取公网IP方式务必选择“通过接口获取”(不要选择网卡获取)。
  5. 启用 {ipv4Addr},推荐将 https://4.ipw.cnhttp://api.ipify.org 置于接口列表首位。
  6. 域名列表:按行填入需要解析的域名,如 example.top 和子域名 mcserver.example.top
  7. 保存并查看日志,确认输出 [阿里云] 更新记录成功

4. 自动化 SSL 证书申请 (ACME + ZeroSSL)

为实现全站 HTTPS,推荐使用 ZeroSSL 申请泛域名证书,以规避 Let's Encrypt 在国内环境偶发的 DNS 验证超时问题。

操作步骤

  1. 进入 Lucky 后台 -> SSL/TLS证书 -> 添加证书
  2. 添加方式:ACME。
  3. 证书颁发机构:ZeroSSL。
  4. DNS 服务商:阿里云(填入同上的 AccessKey 凭证)。
  5. 域名列表:填入主域名 example.top 与泛域名 *.example.top
  6. 高级设置:开启**“使用 IPv4 网络申请证书”,开启“忽略传播检查错误”**。
  7. 保存配置,系统将自动添加 DNS TXT 记录进行验证。等待 1-3 分钟,状态变为“有效”即完成。此后 Lucky 会在到期前自动续签。

5. Web 反向代理与二级域名分发

以部署运行在本地 23333 端口的 Minecraft 网页管理面板为例,使其可通过 https://mcserver.example.top:16666 安全访问。

操作步骤

  1. 进入 Lucky 后台 -> Web服务 -> 添加Web服务规则

  2. 规则名称MC_Panel

  3. 监听类型:勾选 IPv4

  4. 监听端口16666

  5. TLS:启用,并选择上方申请的 ZeroSSL 证书。

  6. 点击添加Web服务规则(子规则):

    • 操作模式:反向代理。
    • 域名列表mcserver.example.top
    • 反向代理目标地址127.0.0.1:23333
  7. 确认云服务商控制台已放行 TCP 16666 端口。

(注:玩家进入游戏使用的 25565 端口属于游戏协议流量,直接通过 DDNS 解析出的公网 IP 连接即可,无需在 Web 反向代理中配置。)


三、 试错与排障过程记录

在部署初期,由于对 Lucky 最新安全机制的变化不熟悉,在解除外网访问限制时进行了多次无效的排障尝试,现将其记录如下,供运维参考。

记录 1:尝试命令行参数覆盖 (失败)

  • 动作:在命令行尝试执行旧版文档提到的 ./lucky -allow-remote-access
  • 结果:提示 flag provided but not defined。该参数在较新版本中已被废弃。

记录 2:尝试运行时 API 解锁 (失败)

  • 动作:查阅最新帮助文档后,执行 ./lucky -rCancelSafeURL 以及 ./lucky -rUnlock
  • 结果:终端提示命令执行成功,重启 systemctl restart lucky.daji 后。浏览器端依然报相同的 JSON 拦截错误。
  • 原因-r 系列命令虽然在运行时清除了缓存的安全路径,但由于系统已超过 10 分钟的未配置保护期,基础配置已被全局锁死,UI 路由层依然拒绝外部来源 IP。

记录 3:尝试直接修改静态配置文件 (失败)

  • 动作:使用 sed -i 's/"AllowRemote":false/"AllowRemote":true/g' /etc/lucky.daji/lucky_base.lkcf 强行修改配置底层文件。
  • 结果:服务重启后修改未能生效。
  • 原因:2.x 版本中 .lkcf 文件为模块化配置,单纯的文本值替换会破坏文件的完整性校验,或者在服务启动时被内存中的持久化安全策略反向覆盖。

最终结论:在云服务器(无直接物理内网访问条件)上部署 Lucky 2.13.9+ 版本时,唯一合法且高效的“救砖”手段是直接删除 lucky_base.lkcf,利用程序的自动初始化机制重置安全保护的 10 分钟生命周期。也可利用 SSH 隧道 (ssh -L 16601:127.0.0.1:16601) 将流量伪装成本地请求进行绕过配置。

评论