没有公网IPv4?我用Lucky+STUN+Cloudflare实现了IPv4/IPv6双栈访问

没有公网IPv4?我用Lucky+STUN+Cloudflare实现了IPv4/IPv6双栈访问

时间煮雨-Master
2026-06-07 / 0 评论 / 8 阅读 / 正在检测是否收录...

一、前置条件检查(必须满足)

1.1 检测 NAT 类型

下载 NatTypeTester,运行后选择 STUN 服务器测试:

┌─────────────────────────────────────────┐
│  NAT 类型检测结果                        │
│  ─────────────────────────────────────  │
│  NAT Type: FullCone (NAT1)  ✅ 可以穿透 │
│  或 NAT Type: Restricted (NAT2)  ✅ 可以  │
│  NAT Type: Symmetric (NAT3/4) ❌ 放弃   │
└─────────────────────────────────────────┘
NAT3/NAT4 无法打洞,需联系运营商改 NAT1,或光猫改桥接 + 路由器拨号。

1.2 网络环境优化

设备推荐配置
光猫桥接模式,由路由器拨号(减少一层 NAT)
路由器开启 UPnP;或给运行 Lucky 的设备设置 DMZ
Lucky 安装位置推荐直接装在拨号路由器上(OpenWrt/软路由),效率最高;如果是 Docker 需用 --net=host 模式

二、Lucky STUN 内网穿透配置

2.1 安装/登录 Lucky

访问: http://你的设备IP:16601
账号: 666
密码: 666
登录后务必在【设置】中修改密码

2.2 添加 STUN 穿透规则(简易模式)

进入 STUN 内网穿透 → 穿透规则列表 → 添加穿透规则

┌─────────────────────────────────────────────────────┐
│  【添加/编辑 STUN 穿透规则】                          │
│  ─────────────────────────────────────────────────  │
│  规则名称:  nas-web                                  │
│  启用规则:  ☑️ 勾选                                   │
│  操作模式:  简易模式                                  │
│  穿透类型:  IPv4-TCP                                  │
│  穿透通道监听端口:  0  (填0表示随机端口)               │
│  目标地址:  127.0.0.1  (Lucky和服务同设备)             │
│  目标端口:  5000       (你的NAS/Web服务端口)          │
│  防火墙自动放行:  ☑️ 勾选                             │
│  启用 NAT-PMP:  ☑️ 勾选 (或改用 UPNP)                │
│  NAT-PMP/UPNP 网关地址:  192.168.1.1  (路由器地址)   │
│  保活间隔:  默认即可                                  │
└─────────────────────────────────────────────────────┘

点击添加后,规则列表会显示:

┌─────────────────────────────────────────────────────┐
│  规则名称    穿透公网地址              状态           │
│  ─────────────────────────────────────────────────  │
│  nas-web     123.45.67.89:16666      ✅ 运行中      │
│              ↑ 这个地址每次重启会变!                 │
└─────────────────────────────────────────────────────┘
手机流量访问 http://123.45.67.89:16666 测试,确认能打开你的服务。

三、域名托管到 Cloudflare

3.1 添加域名

  1. 登录 Cloudflare Dashboard
  2. 点击 添加站点,输入你的域名(如 example.com
  3. 选择 免费套餐
  4. 拿到 Cloudflare 提供的两个 DNS 服务器(如 lara.ns.cloudflare.com

3.2 修改阿里云 DNS 服务器

阿里云域名控制台 → 域名列表 → 找到你的域名 → 管理
  → DNS 修改 → 修改 DNS 服务器
    填入 Cloudflare 提供的两个地址
    保存,等待 5-30 分钟生效

3.3 创建 A 记录(占位)

进入 Cloudflare 域名管理 → DNS → 添加记录:

┌─────────────────────────────────────────┐
│  类型: A                                │
│  名称: @  (或你想用的子域名,如 stun)     │
│  IPv4 地址: 1.1.1.1  (随便填,占位用)    │
│  代理状态: 🟡 已开启 (小云朵必须打开!)     │
│  TTL: 自动                               │
└─────────────────────────────────────────┘
小云朵必须打开,但流量不经过 CDN 中转,只是用 Cloudflare 的规则功能。

四、Cloudflare 重定向规则配置(核心)

4.1 创建规则

进入 规则 → 重定向规则 → 创建规则

┌─────────────────────────────────────────────────────┐
│  规则名称: ipv4-redirect                            │
│  当传入请求匹配时:  自定义筛选表达式                    │
│  ─────────────────────────────────────────────────  │
│  表达式:                                            │
│  (http.host eq "stun.example.com")                   │
│                                                     │
│  则执行... URL 重定向                                │
│  类型: 动态                                          │
│  表达式:                                            │
│  concat("http://66.66.66.66:6666", http.request.uri.path) │
│  ↑ 先随便填一个 IP:端口,后面会被 Webhook 自动更新    │
│                                                     │
│  状态代码: 301                                       │
│  保留查询字符串: 开启                                 │
└─────────────────────────────────────────────────────┘

点击部署

4.2 抓包获取 API 参数(关键步骤)

  1. 在重定向规则列表,点击刚才创建的规则 → 编辑
  2. F12 打开浏览器开发者工具 → 切换到 网络/Network 标签
  3. 点击保存并部署
  4. 在 F12 中找到一条 PATCH 请求,URL 类似:
https://dash.cloudflare.com/api/v4/zones/区域ID/rulesets/规则集ID/rules/规则ID

提取三个关键参数:

  • 区域 ID (zone_id)zones/ 后面那串
  • 规则集 ID (ruleset_id)rulesets/ 后面那串
  • 规则 ID (rule_id)rules/ 后面那串
也可以参考 Cloudflare API 文档,通过 GET /zones/{zone_id}/rulesets 获取规则集 ID。

五、Cloudflare API 令牌创建

进入 Cloudflare API 令牌 页面:

┌─────────────────────────────────────────────────────┐
│  创建令牌 → 使用模板 → 编辑区域 DNS                    │
│  或创建自定义令牌,权限选择:                           │
│    区域 → 重定向规则 → 编辑                            │
│    区域 → 页面规则 → 编辑 (如果用旧版页面规则)         │
│  区域资源: 包括 → 特定区域 → 你的域名                  │
│  点击【继续以显示摘要】→ 创建令牌                       │
│  复制保存令牌(如: abcdef123456789)                  │
└─────────────────────────────────────────────────────┘

六、Lucky Webhook 自动更新配置

回到 Lucky → STUN 内网穿透 → 编辑刚才的规则 → Webhook

┌─────────────────────────────────────────────────────┐
│  【Webhook 设置】                                     │
│  启用 Webhook:  ☑️ 勾选                               │
│  ─────────────────────────────────────────────────  │
│  请求接口地址:                                        │
│  https://api.cloudflare.com/client/v4/zones/       │
│  {区域ID}/rulesets/{规则集ID}/rules/{规则ID}          │
│                                                     │
│  请求方法: PATCH                                      │
│  ─────────────────────────────────────────────────  │
│  请求头:                                             │
│  ┌─────────────────────────────────────────────┐   │
│  │ Authorization: Bearer 你的Cloudflare令牌      │   │
│  │ Content-Type: application/json               │   │
│  └─────────────────────────────────────────────┘   │
│  ─────────────────────────────────────────────────  │
│  请求主体 (Body):                                     │
│  {                                                   │
│    "action": "redirect",                             │
│    "expression": "(http.host eq \"stun.example.com\")", │
│    "description": "ipv4-redirect",                   │
│    "action_parameters": {                            │
│      "from_value": {                                 │
│        "status_code": 301,                           │
│        "target_url": {                               │
│          "expression": "concat(\"http://#{ipAddr}\", http.request.uri.path)" │
│        },                                            │
│        "preserve_query_string": true                 │
│      }                                               │
│    }                                                 │
│  }                                                   │
│  ─────────────────────────────────────────────────  │
│  接口调用成功包含的字符串: "success": true             │
└─────────────────────────────────────────────────────┘

测试 Webhook

点击 Webhook 手动触发测试,如果返回成功,回到 Cloudflare 查看规则,目标地址应已自动更新为 STUN 获取的 IP:端口


七、IPv6 DDNS 配置(保持现有直连)

进入 Lucky → 动态域名(DDNS) → 添加任务:

┌─────────────────────────────────────────────────────┐
│  【DDNS 任务设置】                                    │
│  任务名称: ipv6-ddns                                  │
│  启用:  ☑️ 勾选                                       │
│  服务商: Cloudflare                                   │
│  令牌/密钥: 你的 Cloudflare API 令牌                  │
│  ─────────────────────────────────────────────────  │
│  IPv4:  □ 不启用                                     │
│  IPv6:  ☑️ 启用                                      │
│  获取方式: 通过接口获取 或 网卡获取                    │
│  ─────────────────────────────────────────────────  │
│  同步记录:                                           │
│  类型: AAAA                                          │
│  记录名: @  (或 www)                                  │
│  内容: {ipv6Addr}                                    │
│  TTL: 自动                                           │
└─────────────────────────────────────────────────────┘
这样 IPv6 用户访问 example.com 会直连你的设备,不走跳转。

八、双栈访问效果验证

用户类型访问地址解析结果实际访问路径
IPv6 用户https://example.comAAAA → 你的 IPv6直连,速度快,无端口
IPv4 用户https://example.comA → Cloudflare301 跳转 → http://STUN_IP:端口

验证命令

# IPv6 解析测试
nslookup -q=aaaa example.com

# IPv4 解析测试  
nslookup -q=a example.com

# 查看重定向规则是否生效
curl -I -L http://example.com
# 应看到 Location: http://123.45.67.89:16666

九、进阶:HTTPS 安全访问(可选)

由于 STUN 获取的是 IP:端口,申请证书较麻烦,推荐双域名方案

域名用途配置
example.com入口跳转Cloudflare 重定向规则
stun.example.com实际访问A 记录指向 STUN IP,申请证书

在 Cloudflare 重定向规则中,将目标改为:

concat("https://stun.example.com:#{port}", http.request.uri.path)

然后在 Lucky 的 Web 服务 → 反向代理 中,给 stun.example.com 配置 TLS 证书(可用 Lucky ACME 模块自动申请)。


十、常见问题排查

问题排查方法
STUN 获取不到公网地址检查是否 NAT1/NAT2;检查路由器 UPnP/DMZ;尝试关闭防火墙
Webhook 测试失败检查 Cloudflare 令牌权限;检查 zone_id/ruleset_id/rule_id 是否填对
IPv4 访问跳转后打不开确认 STUN 公网地址用手机流量能直接访问;检查路由器防火墙
端口频繁变化正常现象,Webhook 会自动更新;若变化太频繁,尝试把 Lucky 直接装路由器上

0

评论 (0)

取消
0:00