收起左侧

使用Cloudflare+CDN优选+workers重定向到lucky的ipv4-stun穿透http请求来直连飞牛OS

0
回复
80
查看
[ 复制链接 ]

1

主题

1

回帖

0

牛值

江湖小虾

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

前言

飞牛os作为近几年比较热门的NAS操作系统,以其简单易用,支持app的特点吸引了非常多的用户前来使用。 但是由于大部分的家庭网络都不存在公网ip的,想要完成在互联网**问还是比较麻烦的。目前的话对于nas的访问有3种方法:

1、使用FRP

这种方案通常是需要自己有一台具备公网IP的服务器来进行中转,或者说是用免费的FRP供应商例如Sakura Frp、StarryFrp等。如果是使用自己的vps的话还需要花费金钱来购买服务器;如果使用免费的frp供应商的话节点稳定性、传输速度和限制流量等问题也是非常限制使用次数的。

2、使用组网服务

市面上已经有非常多的异地组网方案,来实现家庭局域网的访问,例如zerotier、tailscale、easytier和vnt等都是非常不错的组网方案。不过这些组网方案也不是非常实用的,一方面像zerotier的一类中转服务器部署在国外的,并且NAT环境不理想的话会导致访问速度非常的慢,延迟非常的高,p2p打洞的话还需要等待一定的时间,这样是非常影响日常使用的;另一方面使用组网软件的话一般都需要在每一台客户端安装独立的软件,并且在使用之前需要先进行配置好连接参数,这样不利用公共访问且不能方便使用。

3、使用ipv6

现在的家庭宽带络运营商都会提供公网ipv6网络了,使用ipv6网络可以轻松连接到家里的网络。但是目前的网络环境对于ipv6的兼容性还有很多问题,甚至有部分网络(例如校园网、公司网络等)是不提供ipv6网络的,一些家庭也是没有默认打开ipv6网络的,这就导致了ipv6网络非常难以开展。

以上这些方法都存在局限性,那么有什么方法可以实现比较完美访问家庭网络的方式呢?使用lucky就可以实现公网ipv4的访问了。我们可以利用lucky的stun穿透来获取到一个动态公网ip+动态端口号,再利用cloudflare的workers的脚本来实现重定向操作,来实现固定动态端口号。

一、将域名托管到Cloudflare

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

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

选择免费计划

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

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

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

二、飞牛安装lucky

在应用中心可以直接下载lucky

三、配置lucky

安装好后直接启动或者在浏览器输入http://飞牛os的ip:16601来进行访问,默认用户名和密码都是666

1、升级lucky到最新版本

飞牛自带的lucky版本比较旧,建议下载官网最新的版本

选择lucky版本就可以了,lucky和wanji的区别官网有描述

下载Linux_x86_64.tar.gz版本的

下载完成后点击上传新版本即可完成升级

中间可能会有警告,我们直接点击确定就可以了

首次使用可能会有安全提醒,我们按照要求进行修改就可以了

2、添加stun穿透规则

点击STUN内网穿透->添加穿透规则来添加一条stun端口,按照下列规则填写

  • 规则名称:stun
  • 穿透通道本地端口:60000
  • 防火墙自动放行
  • upnp:打开
  • 目标地址:127.0.0.1
  • 目标端口:16666

点击添加后你会得到一个动态公网IP+动态端口号,这个IP+端口号就可以通过互联网直接访问到了

在这里你可能需要保证路由器的upnp功能是开启状态,或者已经添加了DMZ主机到飞牛OS的ip,使lucky可以成功打洞。这里往往还需要你的光猫是桥接模式,并且是使用路由器进行拨号上网的。

3、配置lucky反向代理

在lucky的动态域名->web服务->添加Web服务规则来创建一个web规则,按照下列参数填写

  • Web服务规则名称:反向代理
  • 监听类型:全选
  • 监听端口:16666
  • 防火墙自动放行
  • TLS:启用
  • 默认规则设置为文本输出,用来做测试

此时在浏览器输入https://stun穿透ip:stun穿透端口号,就可以成功访问了,这里可能会提示证书错误的问题,因为我们还没有配置证书,因此直接忽略就可以了。

测试完成就可以继续操作了,如果无法正常访问请检查本机和路由器防火墙是否拦截了

测试完成如果可以正常访问就可以将默认规则修改成反向代理就可以了。

4、获取cloudflare-dns编辑API令牌

在cloudflare的面板右上角个人资料->api令牌->创建令牌,使用编辑区域DNS模板,选**的域名,即可点击继续即可。

完成之后会显示API令牌,注意:这个令牌只会显示一次,请务必保存在文本内,后续会多次用到

5、配置ddns

在lucky的动态域名->添加任务来添加一个ddns解析,按照下列操作

  • 任务名称:ddns
  • 托管服务商:Cloudflare
  • Token你的DNS API 令牌
  • {ipv4Addr}:启用

接着在下面添加一个同步记录

  • 备注:三级泛域名解析
  • 记录名:*.s.a.com
  • 记录类型:A(IPV4)

这样就完成了cloudflare的ddns解析了

四、配置Cloudflare

1、设置Cloudflare-CDN优选域名

在cloudflare的dns管理页面,添加一个CNAME的cloudflare优选域名,这里使用的优选域名为cf.090227.xyz,大家也可以使用其他的优选域名。

关于域名优选这一部分,博主有一篇文章详细深入分析为什么要进行优选和如何优化优选域名,感兴趣的可以点我了解

当然你也可以选择不使用优选域名,直接开启小黄云解析也是可以的,不过这样可能会首次访问比较慢

2、添加workers

在cloudflare的侧边栏->workers路由->管理workers->创建->创建workers来创建一个workers

名称填redirect,点击部署

完成后点击编辑代码

粘贴下列代码块并修改配置参数,主要修改你的域名、ddns域名和端口号。端口号填写上面在lucky创建的stun穿透后的端口号,最后点击部署

// 配置参数
const CONFIG = {
    // 需要重定向的域名
    sourceDomain: 'a.com',
    // 重定向后的域名
    targetDomain: 's.a.com',
    // 目标端口号
    targetPort: '3587'
  };
  
  addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request));
  });
  
  async function handleRequest(request) {
    const url = new URL(request.url);
    const hostname = url.hostname;
  
    // 只要 hostname 中包含 sourceDomain,就将 sourceDomain 替换为 targetDomain,并指定 port
    if (hostname.includes(CONFIG.sourceDomain)) {
      const newHost = hostname.replace(CONFIG.sourceDomain, CONFIG.targetDomain);
      const targetUrl = `https://${newHost}:${CONFIG.targetPort}${url.pathname}${url.search}`;
  
      // 返回 302 临时重定向,如果有需要,可以改成 307 重定向
      return Response.redirect(targetUrl, 302);
    }
    // 如果不是目标域名,则返回 404
    return new Response('Not Found', { status: 404 });
  }
  

JavaScript

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

3、添加workers路由

在设置栏添加一个路由,把*.a.com/*进行路由,这样就可以将*.a.com/*的全部http请求交给workers-redirect来处理,进行js重定向操作

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

4、测试重定向是否可用

现在可以在浏览器输入www.a.com来进行测试,看看是否可以重定向到https://www.s.a.com:3587/,如果可以成功跳转的话说明我们的workers配置是没有问题的;如果无法正常重定向,可能是以下原因:

  1. 泛域名*.a.com是否解析好了(CNAME/小黄云)
  2. workers-redirect的路由是否成功添加
  3. 直接访问www.s.a.com:port是否可以正常访问
  • www.s.a.com:port可以正常访问,但是*.a.com无法访问,可能是你的workers配置出现问题,可能是js脚本,也可能是redirect的路由问题;
  • www.s.a.com:port不能正常访问,但是公网ip+端口号可以正常访问,说明是你的*.s.a.com解析出现了问题,请检查ddns是否正常解析

这样就可以实现ipv4直连接访问了,不过我们还有一个问题要解决,那就是固定stun穿透的端口号。我们使用ddns将ip地址固定下来,但是端口号的话需要我们手动修改,因此我们可以使用cloudflare的workers编辑API令牌来实现动态更新stun穿透的端口号。

4、获取workers编辑API

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

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

添加完成后保存好API令牌备用

5、记录cloudflare的账户ID

在cloudflare的面板右侧栏有账户ID,复制下来备用

五、动态更新stun端口号==(重点)==

回到lucky->STUN内网穿透->编辑之前创建的stun穿透规则,点击Webhook,依次填写下列参数:

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

JavaScript

在这里说明一下,Webhook是一个用来实现当stun穿透的端口号发生变化的时候会自动执行http请求,实现动态更新端口号。请求头内的#{port}是lucky的变量,代表当前stun穿透的端口号。

填写完成后先点击Webhook手动触发测试,测试一下

如果发现存在"success": true字眼就说明可以正常更新了,这样就实现了动态更新stun穿透的公网端口

点击保存,等待一会,就可以看到Webhook触发成功的标识

六、设置TLS证书

回到lucky->SSL/TLS证书->添加证书->添加一个tls证书,依次填入下列信息

  • 证书备注:随意
  • 添加方式:ACME
  • 验证方式:Cloudflare
  • Token:cloudflare dns令牌,忘记了可以去ddns那里复制
  • 域名列表:*.s.a.com

完成之后等待一两分钟,就可以完成证书的申请

七、添加http站点

回到lucky->Web服务->更多操作->添加子规则来创建一个http子规则

这里以飞牛OS进行反向代理为例

  • 子规则名称:任意
  • 服务类型:反向代理
  • 前端地址:fn.s.a.com
  • 后端地址:192.168.1.66:5666

填写完成之后就可以在浏览器输入fn.a.com,会自动跳转到https://fn.s.a.com:3523,并且使用了tls进行加密,其他站点也是同理。

总结

使用lucky的stun+workers重定向的功能可以非常轻松地实现直连访问,并且飞牛官方的APP也是支持重定向连接的,但是对于其他需要反向代理的app就不一定支持了,需要测试才知道,。如果想实现其他网络连接的骚操作,如实现无端口号访问等,欢迎进入我的博客进行学习https://www.ytca.top

📌 本文由 FishBoss_Tca 原创,转载请注明作者和原文链接。
原文链接:https://www.ytca.top/stun/2119/

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则