[原创]最快的访问!使用Cloudflare+CDN节点优选+workers重定向lucky的ipv4-stun穿透http请求

推荐阅读:

前言:

之前我发过几篇文章,都是围绕lucky打通内网ipv4如何达到完美访问的,最后一篇是将域名托管到Cloudflare(以下简称cf)上使用“页面规则”来实现http重定向并添加上stun的端口号实现完美http访问

问题

但是这样其实还不够完美,就是我们将域名托管到cf导致每次dns请求都会发往cf上面进行解析。因为众所周知是原因,cf的dns服务器在国内解析是非常慢的,相对去其他国内dns厂商(腾讯、百度、阿里等),有一个数量级的差别,并且因为是重定向的缘故,导致每次首次请求获取实际带stun端口的地址都要进行两次cf的ip地址请求的过程,第一次请求是获取端口号,第二次请求是获取时间访问的ip地址,对于多次跳转不同域名的等待时间显然是不能接受的。

默认的免费账户只能创建3个页面规则,并且一个至少有一个页面规则是用来匹配*.example.com的,但是这样就有个弊端,就是不能附带路径,如*.example.com/web/index.html最后会被重定向成*.stun.exampel.com:6666,访问路径部分因为通配符只能匹配一处的缘故配丢弃了。尽管可以使用可以再创建一个页面规则为特定域名做路径匹配b.example.com/*变成b.stun.exampel.com:6666/*,但是因为一个账号最多只能创建2个路径匹配的页面规则,对于有多个需要携带路径附带的请求就无能为力了。

新方案

之前在研究cf的CDN节点ip优选的时候发现cf的workers可以编写一些js脚本,于是可以利用其来实现多个通配符匹配,实现域名和路径全匹配,并且这个方案使用了cf的CDN-ip优选,还可以优化首次请求的响应速度,减少的dns请求的等待时间

一、前提条件

  • 需要一个主域名托管到cf
  • 需要第二个副域名托管到国内dns网站
  • 会使用lucky的stun功能
  • 会使用lucky的WebHook功能

主域名这里使用a.com作为演示,托管到cf的部分略过,需要的可以自行百度。副域名使用b.net作为演示,并且将b.net托管到腾讯云dns上

二、流程步骤

①我们想要访问www.a.com/index.html的网页,因为a.com被托管到cf上,因此第一次先会向cf请求www.a.com的ip地址,在这之前,我们因为进行了cdn-ip优选,因此www.a.com的请求会发往最近的cdn节点进行解析ip地址

②cdn在收到dns的请求后流经cf的workers.js进行处理,重定向后返回带端口号和路径的副域名www.b.net:6666/index.html,这里同时保留了二级域名和路径

cf的workers给用户自己编写一个js脚本来处理请求的内容,并返回处理后的结果,可以为我们的网站执行一些自动化操作,因此我们请求的www.a.com/index.html流经workers处理后就被包装成了www.b.net:6666/index.html。关于wokers的更多其他好玩的功能请自行学习

③因为b.net是托管在国内的网站了,因此就会就近进行dns查询并返回真实的ip地址,从而实现http页面的请求

三、配置Cloudflare

cf的IP优选就是在访问网站之前先进行自适应连接最近的CDN来访问,以加快后来的请求访问,这通常需要连入一个CNAME的CDN优选域名帮帮忙做CDN筛选。关于CDN优选的内容有兴趣大家可以自行去网上查找,这里不作为主要内容。

先在DNS解析记录这里填入一个CNAME类型*泛域名的解析记录到优选域名cf.090227.xyz。大家可以使用其他的优选域名,也可以使用这个域名进行优选。

侧边栏->管理workers->创建->创建workers来创建一个workers

名称填redirect,点击部署

完成后点击编辑代码

粘贴下列代码块并修改配置参数,主要修改你的主域名、副域名和端口号,点击部署

// 配置参数
const CONFIG = {
  // 需要重定向的源主域名
  sourceDomain: 'a.com',
  // 目标主域名
  targetDomain: 'b.net',
  // 目标端口号
  targetPort: '7363'
};

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  const hostname = url.hostname;

  // 获取主机名的主域部分
  const domainParts = hostname.split('.').slice(-2).join('.');

  // 如果请求的主域名是 sourceDomain
  if (domainParts === CONFIG.sourceDomain) {
    // 将 sourceDomain 替换为 targetDomain,并指定 port
    const newHost = hostname.replace(CONFIG.sourceDomain, CONFIG.targetDomain);
    const targetUrl = `https://${newHost}:${CONFIG.targetPort}${url.pathname}${url.search}`;

    // 返回 302 临时重定向
    return Response.redirect(targetUrl, 302);
  }

  // 如果不是目标域名,则返回 404
  return new Response('Not Found', { status: 404 });
}
JavaScript

这样就完成了对workers的部署。如果还想继续修改js代码的话可以右上角点击代码标志进行修改

在设置栏添加一个路由,把*.a.com/*进行路由,这样就可以搭配workers进行域名和路径的js重定向了

最后将这个wokers页面隐藏就能够完美重定向了,也可以不隐藏,在这个js脚本基础上再加一些别的信息显示,通过workers.dev的链接打开可以显示一些信息。预览url不要开启,是用来做调试用的

在我的个人资料->API令牌->创建令牌->创建自定义令牌来创建workers令牌

令牌名称叫workers,权限为账户-workers脚本-编辑

添加完成后保存API密钥备用

四、配置腾讯云

这里其实也没什么要设置的,无非就是绑定域名到实际IP

在这里顺便获取一下API密钥,用作ddns固定ip

五、配置lucky

在动态域名添加一个任务,填写相应的信息解析泛域名即可,详细步骤可以参考之前的文章

这里和之前那些创建页面规则的操作就大同小异了

  • 接口地址:https://api.cloudflare.com/client/v4/accounts/账户ID/workers/scripts/脚本名字
  • 请求方法:PUT
  • 请求头:
    • Authorization: Bearer workers的API密钥
    • Content-Type: application/javascript
  • 接口调用成功包含的字符串:”success”: true
  • 请求体:
// 配置参数
const CONFIG = {
    // 需要重定向的源主域名
    sourceDomain: 'a.com',
    // 目标主域名
    targetDomain: 'b.net',
    // 目标端口号
    targetPort: '#{port}'
  };
  
  addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request));
  });
  
  async function handleRequest(request) {
    const url = new URL(request.url);
    const hostname = url.hostname;
  
    // 获取主机名的主域部分
    const domainParts = hostname.split('.').slice(-2).join('.');
  
    // 如果请求的主域名是 sourceDomain
    if (domainParts === CONFIG.sourceDomain) {
      // 将 sourceDomain 替换为 targetDomain,并指定 port
      const newHost = hostname.replace(CONFIG.sourceDomain, CONFIG.targetDomain);
      const targetUrl = `https://${newHost}:${CONFIG.targetPort}${url.pathname}${url.search}`;
  
      // 返回 302 临时重定向
      return Response.redirect(targetUrl, 302);
    }
  
    // 如果不是目标域名,则返回 404
    return new Response('Not Found', { status: 404 });
  }
JavaScript

关于账户ID的话在cf的右侧栏是有显示的

这样就完成了终端更新workers的重定向端口号了

itdog的网站测试结果也是快很多的,可以看到连接都是通过多个CDN节点连入的,加快了解析和访问速度


评论

  1. sincere
    2 周前
    2025-4-20 0:31:12

    博主我有一个问题,假如我有ipv4的公网ip,这个方法能不能实现纯域名访问,不想加端口号

    • 博主
      sincere
      1 周前
      2025-4-24 15:35:44

      如果有公网IP的话可以直接使用域名访问了,不需要做stun的工作,关键是现在大部分家庭网络都回收了公网ip,并且即使有公网IP也无法访问80/443端口,依旧需要重定向到别的端口来访问
      您是想借鉴我的方案实现什么功能呀?

  2. 鱼丸粗面
    1 周前
    2025-4-25 9:45:57

    最近也在研究stun,因为只有公网v6没有公网v4,现在用的cf内网穿透,使用lucky也按照教程实现入浏览器输入alist.565.pp.ua自动定向到alist.stun.565.pp.ua+穿透端口。但是还是想学学大佬的方法。希望有空帮我设置一下,万分感谢。

    • 博主
      鱼丸粗面
      1 周前
      2025-4-25 10:01:13

      如果你会使用lucky的stun+cf的Webhook的话这个方法也不难,原理都是一样的,只是实现重定向的方式不一样而已
      那现在你是哪里不理解?

      • 鱼丸粗面
        FishBoss_Tca
        1 周前
        2025-4-25 12:11:36

        才从b站上搞定这个,看到你的教程就想尝试,还没有仔细研究你的方法,本是小白,也在慢慢学习这方面。b站方法现在证书第一次申请成功,后面不知道设置了啥一直调用证书。一直不安全浏览。你的我要认真揣摩一下。或者空了可否博主帮忙远程指导一下。万分感谢。q3811822924

  3. 鱼丸粗面
    1 周前
    2025-4-25 9:53:34

    我是istoresOs,发现一个问题,就是lucky的stun跟openclash冲突,stun显示ip也是宽带运营商的,穿透端口也正常,就是直接ip+端口无法打开web。关闭openclash就行了,我设置了openclash每日重启和延时启动,但是过几个小时stun就不通了。stun随机端口没重新获取。只要关闭openclash,stun几天都是正常的,端口也没有改变。

    • 博主
      鱼丸粗面
      1 周前
      2025-4-25 9:57:18

      openclash是不是开启了系统代理或者tun,如果是这样做的话会导致stun探测的端口是你的代理服务器的端口

      • 鱼丸粗面
        FishBoss_Tca
        1 周前
        2025-4-25 12:03:59

        对的,开启openclash后,stun就会调用科学的ip了,主路由试了upnp和DMZ,开启dmz会不会调用科学ip。

      • 鱼丸粗面
        FishBoss_Tca
        1 周前
        2025-4-25 18:33:28

        换成DMZ就好了。其他转发只要开openclash,stun就跑变成科学IP。感谢

  4. 鱼丸粗面
    1 周前
    2025-4-25 18:31:13

    五、配置lucky
    1、添加ddns解析记录
    在动态域名添加一个任务,填写相应的信息解析泛域名即可,详细步骤可以参考之前的文章
    这里是配置b.net的DDNs吧,我有阿里云b.xyz域名,但是只能分配二级域名,因为住域名有其他用途,是不是A记录到*.stun.b.xyz。然后填写stun穿透的真实ip。

  5. 鱼丸粗面
    1 周前
    2025-4-25 18:36:57

    添加workers那里填写主域名和副域名后填写的目标端口号是STUN内网穿透的端口吗?比如我是16666就填写16666

  6. 鱼丸粗面
    4 天前
    2025-4-29 8:56:15

    stun那里都设置完成,webhook手动触发提示(接口调用出错),但是cf网站的js端口那里已经更新成stun穿透的随机外部端口了。教程那里没有说要不要手动触发验证一下是否各项填写检验。
    还有一个问题web反向代理那里是不是不用设置了?打开要怎样设置。

发送评论 编辑评论


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