配置 Cloudflare Argo Tunnel 并添加 Cloudflare SaaS 域名

0、前言

Cloudflare Tunnel(之前名为 Cloudflare Argo Tunnel)是 Cloudflare 的一款 新(?) 旧产品了,但是最早的几个版本使用体验极其糟糕,例如创建隧道只能获取一个随机的 UUID 作为隧道名,再加上能够找到的资料并不多而且漏洞百出,完全按照流程做一遍也无法成功配置,因此在折腾数次后果断放弃。

在经过很长时间的迭代后 Cloudflare Tunnel 终于好用起来了,并且看到有教程已成功实现使用 Cloudflare SaaS 域名接入 Cloudflare Tunnel,于是在踩坑后得出了快速配置的正确方法。

1、简介

Cloudflare Tunnel 是一款隧道软件,可以快速安全地加密应用程序到任何类型基础设施的流量,让您能够隐藏你的 Web 服务器 IP 地址,阻止直接攻击,从而专注于提供出色的应用程序。
——Cloudflare1

简而言之,Cloudflare Tunnel 就是 Cloudflare 的免费内网穿透。目前免费版应该只支持 HTTP。

2、安装

Cloudflare Tunnel 分为云端管理型本地管理型,本地管理型是自己写配置文件,因此难度更大,但是也更灵活,如果需求简单可以直接选择云端管理型。无论是哪种 Tunnel 都支持一键安装。

2.1、云端管理型

先在面板添加 Tunnel,然后复制安装指令:

安装指令

等待安装完成即可。

2.2、本地管理型

安装指令区分架构,请注意:

Bash
1
2
3
4
5
6
7
8
# AMD
curl -o /usr/bin/cloudflared -L "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64"

# ARM
curl -o /usr/bin/cloudflared -L "https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64"

# 设置可执行权限:
chmod +x /usr/bin/cloudflared

如果之后启动的时候提示有新版本,可以执行:

Bash
1
2
#更新
cloudflared update
这里不得不吐槽一下,一开始找到的升级文档,使用的方法是通过 Tunnel Replica 启动一个备用 Tunnel 以实现无缝切换,太复杂了。不过好像是我找错了文档……

3、配置

如果是云端管理型,在面板中看到 Tunnel 状态为 Active 后点击配置,按照说明添加域名等即可。全过程均在控制面板完成,唯一不方便的就是添加的域名只能在你的账户域名中选取,SaaS 接入的域名无法添加(下文有解决方法)。

下文为本地管理型的配置方法。

先登录:

Bash
1
cloudflared login

打开登录 URL,选择一个域(随便哪一个,不影响后续接入)即可完成授权。

注意:
每次授权成功都会添加一个 API Token 供 Tunnel 调用。

这点很重要以至于要单独拿出来说,因为免费计划 API Tokens 只能创建 50 个,也就是你只要授权 50 次,就会报错:Quota limit exceeded, you can create no more than 50 tokens.

授权报错

因此虽然 Tunnel 限制数量为 10002,但是按默认流程配置,创建 50 次就超过 API Tokens 的限制数量了。

然而经测试,仅在使用 Cloudflared Cli 操作账户,例如添加、删除 Tunnel 时需要使用到授权,因此添加完隧道、获得了隧道的 <uuid>.json后就可以在 Cloudflare 控制面板 中删除该 API Token。

根据进一步测试,授权下载的cert.pem事实上是可以共用的,因此登录一次,保留此次的 API,之后直接粘贴之前获取的cert.pem就可以了。

然后创建隧道:

Bash
1
cloudflared tunnel create <YOUR_TUNNEL_NAME>

会获得一个 Tunnel UUID,例如aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee,和 包含 Tunnel 密钥等信息的文件 /root/.cloudflared/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.json

json
1
{"AccountTag":"YOUR_ACCOUNT_TAG","TunnelSecret":"TUNNEL_SECRET","TunnelID":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"}

编写 Tunnel 配置文件 /root/.cloudflared/config.yml

json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tunnel: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
credentials-file: /root/.cloudflared/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.json

ingress:
   - hostname: website.1.domain.com
     service: https://127.0.0.1:443
     originRequest:
        noTLSVerify: true  
   - hostname: website.2.domain.com
     service: http://127.0.0.1:8080
     originRequest:
        noTLSVerify: true
   - service: http://127.0.0.1:80
     originRequest:
        noTLSVerify: true

这里以三个ingress为例,含义分别是:

  • website.1.domain.com 转发到本地的 443 端口,使用 HTTPS,跳过证书验证;
  • website.2.domain.com 转发到本地的 8080 端口,使用 HTTP,跳过证书验证;
  • 其他域名转发到本地的 80 端口,使用 HTTP,跳过证书验证。

其中noTLSVerify在使用 SaaS 域名时必须为true,因为验证的是回退源的证书,一定会返回错误。最后一项ingress必须写。

安装服务:

Bash
1
cloudflared service install

如果你修改了配置文件,需要执行:

Bash
1
2
cloudflared service uninstall
rm -f /etc/cloudflared/config.yml

卸载服务,然后再安装服务,配置文件才能生效。

然后,在面板中看到 Tunnel 状态为 Active

启动成功

4、接入 SaaS 域名

4.1、本地管理型

在 DNS 记录中,把想要接入的域名指向 CNAMEaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.cfargotunnel.com,如果是 SaaS 域名,只能把回退源指向这个,此域下的所有 SaaS 域名都会走 Tunnel 回源。

4.2、云端管理型

参考:
Cloudflare SaaS 域名回源 Cloudflare Tunnel 的方法
https://www.nodeseek.com/post-98866-1

F12打开 DevTools,然后随意添加一个域名:

添加域名

点击提交后,在网络请求里找到以 configurations 结尾的一个 PUT 请求,右键复制为 Curl 命令,复制出的--data-raw ''中就是前面的ingress配置,按照上文说明,对配置文件稍作修改并提交,就可以在面板中看到新增的域名。之后 CNAME 等步骤同本地管理型。

5、后记

普通请求经过 Cloudflare CDN 的路由如下:

Text
1
客户端 -> 离客户端最近的 Cloudflare 节点 -> 服务端

如果你不是较高级计划,分配到的可能甚至不是最近的 Cloudflare 节点。例如中国大陆和台湾访问 Cloudflare Free 计划的域名,命中的都是美国节点。

Cloudflare 的 Argo Smart Routing 可以实现以下路由:

Text
1
客户端 -> 离客户端最近的 Cloudflare 节点 -> 离服务端最近的 Cloudflare 节点 -> 服务端

这样相当于在回源过程中,国际互联部分由 Cloudflare 完成,客户端和服务端都只和最近的(甚至是本地的)Cloudflare 节点通信,对国际互联不好的节点而言有较大提升。

根据此原理,用香港入口转发日本、韩国、新加坡等地的服务器,延迟有略微提升(嗯,其实几乎没什么感觉)。另外,NAT 服务器用 Cloudflare 加速不再需要占用一条 Origin Rule,甚至服务器不开端口或者根本就没有公网 IP,也可以接入 Cloudflare,再也不用担心被 GFW 墙 攻击、扫描了。

配置 Cloudflare Argo Tunnel 并添加 Cloudflare SaaS 域名

https://blog.tsinbei.com/tw/archives/1505/

文章作者
Hsukqi Lee
发布于

2024-05-01

修改于

2024-05-01

许可协议

CC BY-NC-ND 4.0

评论

昵称
邮箱
网址
暂无