这份教程结合了你所有的硬件现状、网络环境修正(无端口转发、使用防火墙规则和 UPnP)、以及 Lucky 的正确配置逻辑(端口分流)。
1. 基础设施与网络准备
设备角色:
核心路由: 红米 AX6 (ImmortalWrt) —— 负责拨号、UPnP 映射、防火墙放行。
应用服务器: OEC-Turbo (Armbian) —— 运行 1Panel + Docker (Lucky, Jellyfin, Immich 等)。内网 IP: 192.168.31.211。
路由器配置 (红米 AX6):
配置 UPnP (解决 IPv4 穿透)
位置:服务 -> UPnP IGD 和 PCP/NAT-PMP。
勾选: 启动服务、启用 UPnP IGD 协议、启用 PCP/NAT-PMP 协议。
下载速度: 填 130000。
上传速度: 填 8000。
作用:允许 Lucky 自动申请公网 IPv4 端口,无需手动添加端口转发。
配置通信规则 (解决 IPv6 直连)
位置:网络 -> 防火墙 -> 通信规则。
新建规则:
名称: Allow-Web-IPv6
协议: TCP
源区域: wan / wan6
目标区域: lan
目标地址: 选择 OEC-Turbo 的 IPv6 后缀 (如 ::d451...)
目标端口: 21927 (只放行这一个端口即可)
作用:允许公网 IPv6 流量直接访问 Lucky 的 Web 服务端口。
2. Lucky 核心配置 (部署在 OEC-Turbo)
第一步:配置 SSL 证书
SSL/TLS证书 -> 添加证书。
域名: *.ytcom.eu.org 和 ytcom.eu.org。
验证方式: Cloudflare DNS API。
目的:实现全站 HTTPS 安全访问。
第二步:配置 Web 服务 (反向代理总入口) 这是所有流量(无论是 IPv4 还是 IPv6)汇聚的地方。
添加 Web 服务规则:
监听端口: 21927 (Web 服务独占)。
TLS: 开启,选择刚才的泛域名证书。
添加子规则 (反代到 Docker 容器):
所有后端地址均填写 127.0.0.1,因为服务都在本机。
jellyfin.ytcom.eu.org -> http://127.0.0.1:8096
immich.ytcom.eu.org -> http://127.0.0.1:2283
panel.ytcom.eu.org -> http://127.0.0.1:21925
lucky.ytcom.eu.org -> http://127.0.0.1:16601
第三步:配置 STUN 内网穿透 (IPv4 打洞) 这是为了让 IPv4 流量能进来,由于 21927 被 Web 服务占用了,STUN 需要用另一个端口接收流量并转发过去。
编辑规则: Lucky_Web_V4
穿透类型: IPv4-TCP
操作模式: 简易模式
穿透通道本地端口: 21928 (关键修正:为了不冲突,这里监听 21928)。
目标地址: 127.0.0.1
目标端口: 21927 (关键逻辑:流量收到后,扔给 Web 服务处理)。
UPnP: 开启 (利用路由器的 UPnP 服务自动映射公网端口)。
第四步:配置动态域名 (DDNS)
添加任务: Cloudflare。
IPv6 (AAAA): 解析 *.ytcom.eu.org,获取方式:通过网卡获取 (直连逻辑)。
IPv4 (A): 解析 *.ytcom.eu.org,获取方式:STUN 穿透公网地址,关联规则 Lucky_Web_V4。
3. Cloudflare 自动化跳转 (万能兼容入口)
解决 IPv4 环境下没有 443 端口且随机端口难记的问题。
第一步:DNS 引导记录
登录 Cloudflare -> DNS。
添加 A 记录:v4-jellyfin, v4-immich, v4-panel 等。
IP 地址:1.1.1.1。
代理状态: 开启 (橙色云朵)。
第二步:页面规则 (Page Rules)
登录 Cloudflare -> 规则 -> 页面规则。
URL: v4-*.ytcom.eu.org/*
设置: 转发 URL (302 重定向) -> https://$1.ytcom.eu.org:28440/$2 (端口号暂填)。
第三步:配置 Lucky Webhook (自动同步端口)
回到 Lucky -> STUN 规则 (Lucky_Web_V4) -> 开启底部的 Webhook。
接口地址: https://api.cloudflare.com/client/v4/zones/你的ZoneID/pagerules/你的RuleID
请求方法: PUT
请求头:
Plaintext
Authorization: Bearer 你的CF_Token
Content-Type: application/json
请求主体 (Body):
JSON
{
"targets": [{ "target": "url", "constraint": { "operator": "matches", "value": "v4-*.ytcom.eu.org/*" } }],
"actions": [{ "id": "forwarding_url", "value": { "url": "https://$1.ytcom.eu.org:#{port}/$2", "status_code": 302 } }],
"status": "active"
}
成功字符串: success":true
4. 最终验证与使用
恭喜!这套配置利用了 Armbian 的灵活性和 1Panel 的容器优势,实现了目前最优雅的家庭网络访问方案:
场景 A (IPv6 直连 - 极速):
访问 https://jellyfin.ytcom.eu.org:21927
流量路径: 公网 -> 路由器防火墙放行 -> OECT:21927 (Web服务)。
场景 B (IPv4 自动跳转 - 兼容):
访问 https://v4-jellyfin.ytcom.eu.org
流量路径: Cloudflare -> 重定向到最新端口 -> 路由器 UPnP -> OECT:21928 (STUN) -> OECT:21927 (Web服务)。