使用CloudFlare的Worker功能实现Serverless的VLESS/SOCKS5隧道

发布于 2023-07-27  2170 次阅读



最近在GayHub上看到一个特别有意思的项目,可以使用CloudFlare的Worker功能构建Vless隧道,需要注意的是,和传统的理解中使用Worker把已经被墙的节点或路由特别差的节点进行反代,以使用被墙的IP服务器上的Vmess服务或加速已有Vmess节点的作用不同,此方法的好处是直接使用Worker构建Vless隧道,不需要额外服务器即可实现便捷的机票购买服务,CF虽然国内的路由不太行,很多地方都延迟高,但是速度还是相当可观的,且完全免费,流量自然不用担心,而且Worker每天都有10W的免费请求可用,一个人使用几乎不可能用到上限,当然这种钻空子的办法也不知道能活多久,能用一天是一天吧。
原项目地址:

GayHub

0x01 进入CF控制台创建Worker

进入CF控制台首页,点击左侧侧栏中的Workers和Pages功能后点击创建应用程序。
cf-ma.png
创建应用程序后名称自己随便写一个再点击右下角的部署
cf-ma1.png
部署完成后点击配置Worker
cf-ma2.png
在配置Worker页面首先点击触发器,然后添加自定义域。
cf-ma3.png
添加你的自定义域名,比如你托管在CF的域名是abc.com,那这里可以填123.abc.com,填写完成后先点添加,然后点击快速编辑
cf-ma6.png
将原项目地址的worker-vless.js内容复制到Worker的代码编辑页面,需要更改的参数已在图中标示,其中"let userID"可以通过linux系统中uuid软件包的uuidgen命令生成,"let proxyIP"需要去扫描国外除开CF官方以外的反代了CF分发服务器的IP,不能使用CF官方的IP
cf-ma6.png

0x02 使用masscan扫描国外AS机房开放了443端口的IP,这步有一定的风险,这种扫描算是SYN攻击,所以我就不详细写了。

该部分操作所有IP均非实际扫描的IP,如果有需要请自己寻找你觉得好用的IP,并使用whois或者在线工具查询IP所在AS号,并扫描该AS拥有的网段
查找IP所在ASN和该AS关联的IP段

命令含义:查询baidu.com域名的A记录并使用grep命令过滤出IPV4地址
$ dig -t A baidu.com | grep -v -e '^;' -e '^$'                                                                  130 ↵
baidu.com.              52      IN      A       110.242.68.66
baidu.com.              52      IN      A       39.156.66.10

命令含义:查询IP110.242.68.66的注册信息并使用grep命令过滤出origin字段(AS编号通常在origin 或 OriginAS 等字段中)
$ whois 110.242.68.66 | grep -i origin
origin:         AS4837

命令含义:查询IP110.242.68.66的注册信息并使用grep命令过滤出route字段(该字段就是我们需要扫描的IP段)
$ whois 110.242.68.66|grep route
mnt-routes:     MAINT-CNCGROUP-RR
route:          110.240.0.0/12

扫描上面取得的IP段并过滤出有用的信息

命令含义:扫描111.0.0.0/8网段所有IP的443端口,并将开放了443端口的IP信息输出到scanip.txt文件
$ masscan 111.0.0.0/8 -p443 --rate=10000 --open-only -oG scanip.txt

命令含义:使用sed命令正则表达式匹配scanip.txt中所有Host字段后的IP地址并输出到scanip1.txt
$ sed -n 's/.*Host: \([0-9.]*\).*/\1/p' scanip.txt > scanip1.txt

0x03 使用CloudflareSpeedTest工具测试刚刚取得的地址是否可用

CF的的地址使用IP访问时会有一个特殊的错误页面,只要你上面扫描的地址不在CF官方公布使用的IP段内该地址,切直接访问会出现类似以下的特殊报错页面,那该IP就可以用于我们的代理隧道。
cf-e.png

工具的使用详细说明请自行参照项目README,选择延迟和下载速度好的IP

命令含义:扫描scanip1.txt中的IP,总共输出10个结果,延迟超过200,或丢包的均不显示。
$ ./CloudflareST -p 10 -tl 200 -tlr 0 -f scanip1.txt

0x04 使用隧道

经过上面一系列繁杂的步骤选择好IP后再次进入worker的代码编辑页面,填入”let proxyIP”并部署后即可开始使用,在worker-vless.js的最后,有一个示例配置,将自己的信息填入示例配置即可在Clash中启用该节点。
其中,变量hostName为Worker中配置的自定义域。如:123.abc.com,变量userID则是worker-vless.js中"let userID"行的值

#示例配置
- type: vless
  name: ${hostName}
  server: ${hostName}
  port: 443
  uuid: ${userID}
  network: ws
  tls: true
  udp: false
  sni: ${hostName}
  client-fingerprint: chrome
  ws-opts:
    path: "/?ed=2048"
    headers:
      host: ${hostName}

#填写完成后类似于这样
- type: vless
  name: 随便写
  server: 123.abc.com
  port: 443
  uuid: d342d11e-d424-4583-b36e-524ab1f0afa4
  network: ws
  tls: true
  udp: false
  sni: 123.abc.com
  client-fingerprint: chrome
  ws-opts:
    path: "/?ed=2048"
    headers:
      host: 123.abc.com

openClash使用的单行简化配置

- {name: CF, server: 123.abc.com, port: 443, type: vless, uuid: d342d11e-d424-4583-b36e-524ab1f0afa4, alterId: 0, cipher: auto, tls: true, network: ws, ws-opts: {path: "/?ed=2048", headers: {Host: 123.abc.com}}}

0x05 使用效果

可以看到速度还是相当快的,虽然看起来延迟感人,但是跑满500M还是不在话下。十分甚至九分快
cf-speedtest.png
兄啊,这么臭的节点有必要用吗(
114514ms.png
n.png
Youtube4K也完全没问题
cf-youtube.png

0x06

由群友提供的AS45102/AS4134的可用IP列表

47.254.69.186
47.89.241.33
198.11.180.182
47.251.33.29
47.88.57.75
47.251.1.129
47.89.240.9
47.251.10.147
47.88.106.22
47.88.91.186
47.251.37.185
47.88.11.193
47.88.29.163
47.89.213.20
47.88.88.172
47.89.227.179
47.89.248.208
47.88.88.225
47.89.211.223
47.251.4.62
47.88.52.61
47.88.26.229
47.88.50.63
47.251.3.62
47.254.47.181
47.251.62.121
47.88.65.50
47.88.57.31
47.254.65.110
47.89.210.14
47.254.65.41
47.89.247.203
47.88.29.3
47.254.67.224
47.251.8.206
47.88.33.132
47.89.210.198
47.254.31.122
47.88.17.93
47.254.27.27
47.254.72.57
47.251.39.76
47.251.63.225
47.254.17.255

其他可能可以使用的AS还有:AS9808(京东CF合作),120.241.124.0/24(京东广州移动),建议使用国外ip,国内ip都很慢
至于为什么必须要扫描反代CF的IP用是因为边缘节点IP无法访问套了CF的站点,所以需要一个三方中转,那些没套CF站点就是边缘节点IP,套了CF的就是proxy ip,扫出来的反代IP的作用是让CF边缘节点去连接那些IP。
也可以参考这个连接比我写得详细