使用Cloudflare+lucky实现优雅的公网ipv4访问网页

参考文章:B站-「LUCKY STUN穿透」使用Cloudflare的页面规则固定和隐藏网页端口

推荐阅读:从零开始玩软路由7——强大的多合一Web中间件lucky

基于文章:[干货]使用Sakura Frp和Lucky实现公网ipv4端口访问

本文章是[干货]使用Sakura Frp和Lucky实现公网ipv4端口访问的升级版,完全摆脱frp的依赖,但没有看过使用frp的实现方式也没有关系,这个在技术原理上还是差不多的,都是先是使用重定向功能找到能端口号再访问

一、准备工作(前提)

在注册号cloudflare账号后进入dash管理面板,在网站处添加域

输入你的域名,这里以a.com为例子

选择免费计划

这时候就得域你购买的域名托管商那修改你的dns地址了,这里以腾讯云为例

域名控制面板域名右边的更多->修改dns服务器改为cloudflare的dns

修改完成后过10~20分钟即可完成dns的修改了

在lucky里面有个快捷打开api页面,也可以手动进入,也面板右上角进入个人资料->api令牌->创建令牌,使用编辑区域DNS模板,选上你的域名,即可点击继续即可

有了令牌后就可以愉快使用DDNS了,这里我们添加一个ipv4的dns解析,解析泛域名*.stun.ytca.top到cloudflare上

这里说一下为什么要解析三级域名*.stun.a.com的泛域名解析而不是二级域名的*.a.com的解析,是因为我们在后续要访问的全部二级域名都会重定向到三级域名上

最后手动添加一条A记录的解析,解析内容随意,因为重定向后永远不会访问这个ip,这个二级域名的泛域名解析的作用就是将*.a.com的请求重定向到*.stun.a.com上,后续会用到

二、使用cloudflare固定stun穿透端口

先看流程图

①用户在访问www.ytca.top的时候会访问cloudflare查询对应的ip地址,在进入cloudflare后会被页面规则匹配,页面规则可以对域名请求做一些处理,并返回特定的内容,如当前的重定向至https://www.stun.a.top

②此时又会重新查询https://www.stun.a.top的ip地址,并返回

③查询完毕就可以直接访问内网服务器了。

更多详细细节请看[干货]使用Sakura Frp和Lucky实现公网ipv4端口访问

附开头参考文章内的流程图

在规则->页面规则->创建页面规则,url填写*.a.top,选取设置为转发URL,状态为302,目标网址选择https://$1.stun.a.com,点击保存部署即可

这里解释一下为什么要这样设置,首先对于全部请求二级域名请求*.a.com,都会被重定向到https://*.stun.a.com,先做了http转https的转换,接着将上面的*对应内容复制到下面的$1,即变量$1的值=*的内容,一开始通配符的作用是给网站路径做解析的(a.com/* -> b.com/$1),但是也可以用作网站域名的通配符解析

引用参考文章内的图片

区域ID比较简单,在面板的概述右边就有

规则ID的话在我的个人资料->API令牌->创建令牌,这和创建DDNS令牌一样,但是不同的是选择自定义令牌

令牌名称为页面规则,权限为区域,页面规则,编辑

区域资源为包括,特定区域,你的域名

保存之后一样,保存API令牌到文本备用

在lucky页面创建一条计划规则,执行周期设置随意,这里我们主要是用到其的子任务功能,创建一条子规则

  • 类型:CallWeb
  • 接口地址: https://api.cloudflare.com/client/v4/zones/你的区域ID/pagerules
  • 请求方法:GET
  • 请求头:
Authorization: Bearer 页面规则的API令牌

Content-Type: application/json
YAML

开启禁用CallWeb调用成功字符串检测

添加完成后点击手动触发

不出意外的话可以在任务执行日志上看到id和value和url的值,复制id后面的值,这个就是我们要的页面ID了

在stun页面创建一个内网穿透规则,开启Webhook

  • 关闭仅在地址和上一次不同时触发Webhook
  • 接口地址: https://api.cloudflare.com/client/v4/zones/区域ID/pagerules/规则ID
  • 请求方式:PATCH
  • 请求头:
Authorization: Bearer 页面规则的API令牌

Content-Type: application/json
YAML
  • 请求体:
{
  "actions": [
    {
      "id": "forwarding_url",
      "value": {
        "url": "https://$1.stun.a.com:#{port}",
        "status_code": 302
      }
    }
  ]
}
JSON

先禁用Webhook接口调用成功字符串检测

点击添加后进去手动触发一下,看看返回的消息是否存在”success”:true的存在,存在的话就可以把Webhook接口调用成功字符串检测框内添加上”success”:true即可完成添加。最后回到cloudflare看看是否更新了端口好,手动触发的端口号是6666,自动触发会吧#{port}变成你实际穿透后的端口

最后设置好反向代理即可完成自动https的访问。这样以后访问任何域名,都会自动跳转到stun穿透后的三域名

三、设置alist分享路径重定向

我们使用页面规则来匹配泛域名域名的匹配,但是对于分享路径来说会丢弃全部后续的请求路径,如:如果想请求alist.a.com/resource/的内容,因为通配符只会域名,所以会丢弃请你后面的请求路径,只会请求https://alist.stun.a.com:6666/,这显然不够优雅,因此我们可以创建第二条页面规则,先实现路径匹配后再进行域名的匹配

  • URL:alist.a.com/*
  • 选取设置:转发URL
  • 选择状态:302临时重定向
  • 输入目标URL:https://alist.stun.a.top:6666/$1

这样请求到的alist.a.com/*内容在经过重定向后请求路径也能原封不动地发往内网服务器了

这个的内容和泛域名解析的一样,也是先获取新创建页面的规则ID,最后重新创建一个stun穿透端口,专门来传输alist路径的数据,只是请求体内部的“URL”变成了”url”: “https://alist.stun.ytca.top:#{port}/$1”

最后,你就可以使用alist.a.com/resource/来实现对https://alist.stun.a.com:6666/resource的访问了

上面的方法只能对一个文件服务alist专用,如果想通过仅在路径后方一些路径就可以区分不同文件服务,如默认alist.a.com/是匹配https://alist.stun.a.com:6666/,那访问alist.a.com/share/resource在反向代理设置匹配另一个文件服务,这样就可以使用一个域名完成多文件服务的访问,仅仅是用路径名作区别。


评论

  1. 风动向
    4 周前
    2025-4-06 6:51:20

    先收藏,有时间研究下

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇