Cloudflare Tunnel内网穿透及优选

前言

11月份Frp的机到期了,发现能用CF白嫖内网穿透,于是开始了折腾

准备

  • ImmortalWrt 23.05
  • 两个域名且绑定在Cloudflare
  • CF账号以及开通 SAAS 不多说

开始

首先在 ImmortalWrt上面安装好 luci-app-cloudflared (ImmortalWrt 自带相关软件包,我未深入研究其他安装方式。Linux 系统的安装方法有很多,这里不再赘述,详情可参考官方 GitHub 页面:Cloudflare/cloudflared

SSH 连接到设备

注意:如果和我一样是是用 ImmortalWrt 提供的软件包,可以输入 cloudflared update 来更新软件,不会影响 luci 的兼容

1
cloudflared tunnel login

这时候打开客户端跳出来的链接,登录 Cloudflare 后选择你的副域名(辅助域名),例如:back.com
电脑这时候会下载 “cert.pem” 到 /root/.cloudflared,需要自己把他移动到 /etc/cloudflared/ 或者用luci界面上传
如果下载失败可以手动点击控制台的链接下载到电脑,重命名后,再用上面的方式传输到 OpenWrt

创建隧道,随意命名

1
cloudflared tunnel create XXX

这时候 /root/.cloudflared 下面会有一个 <UUID>.json文件,同样把它弄到 /etc/cloudflared/ 文件夹里面去

添加一个域名,这个域名将作为回退源,建议使用子域名,这里以 op.back.com 为例

1
cloudflared tunnel route dns <UUID or NAME> op.back.com

创建配置文件 config.yml

1
2
3
4
5
6
7
8
9
tunnel: <UUID>
credentials-file: /etc/cloudflared/<UUID>.json

ingress:
- hostname: back.com
service: http://localhost

# Example of a rule responding to traffic with an HTTP status:
- service: http_status:404

验证配置是否有效

1
cloudflared tunnel ingress validate

运行隧道

1
cloudflared tunnel run <UUID or NAME>

或去luci启动

迁移本地配置

迁移到云端更便于管理,避免使用抓包 PUT 请求

去 Cloudflare 的 Tunnel 界面查看是否为 HEALTHY

进入该 Tunnel 的管理界面,一路确认就可以迁移了

这时候可以添加主域名的穿透了,Add a public hostname –> op.a.com –> http://192.168.8.1:80

还可以继续添加同一IP不同端口的服务到,a.com 的其他子域名下面(我自己折腾,同一内网不同IP也是可以的,如:回退源为192.168.8.1,但是我穿透192.168.8.2的服务,用网站测速也是有加速效果的,这里没有佬的研究成果,效果不敢保证)

设置优选域名

  1. 在Cloudflare中直接设置
  2. 主域名的一个子域名(cdn.a.com)托管到腾讯云、阿里云等提供DNS分线路解析服务的平台,进行境内境外分流

方法一

到 辅助域名(back.com )的管理页面

添加一条DNS记录,用作优选域名,如:cdn.back.com

把该域名CNAME到一个优选域名(切记关闭小黄云),请自行挑选:CloudFlare公共Cname域名

方法二

dnspod 或其他 dns 平台,添加主域名的随机一个子域名,如:cdn.a.com

这里以腾讯云为例

复制主机记录和记录值去 CF 添加,同时添加 NS 记录指向 f1g1ns1.dnspod.netf1g1ns2.dnspod.net,然后在高级设置中关闭暂停解析

如下图添加解析,境内指向优选域名 / IP,境外指向你的回退源

然后在我的域名界面,点击该加速域名的 “更多” –> “开始解析”

设置回退源

辅助域名(back.com)管理界面,左侧边栏–>SSL/TLS–>自定义主机名

设置回退源为 op.back.com

设置自定义主机名为 op.a.com(还有其他服务一并添加)

复制好 “主机名预验证 TXT 名称” 和 “主机名预验证 TXT 值”
就是 _cf-custom-hostname.op.a.com

证书验证(_acme-challenge.op.a.com)不用管,CNAME 到回退源他会自动消失的

主域名设置

现在去主域名(a.com)设置 DNS 记录

由于我们在 Tunnel 已经添加过主域名的记录,所以这里会有CNAME的记录,且内容为我我们的容器ID

把容器 ID 改为我们的优选域名(cdn.a.com)关闭小黄云,这样就用上了

再把 “主机名预验证 TXT 名称” 和 “主机名预验证 TXT 值” 添加好,这时候可以回到,辅助域名(back.com)自定义主机界面,看 “证书状态” 和 “主机名状态” 是否都变成了有效,到此就大功告成了

ITDOGZHALE 的网站测速看看(带上https://,慢速检测),出口IP有十个以上就是成功了

设置截图

Public hostname

辅助域名(back.com DNS设置)

自定义主机名设置

主域名(a.com DNS设置)

加速域名设置(cdn.a.com)

注意事项

  1. OpenWrt 上面跑了科学的话,请跳过这个域名的Fakeip,或者 OpenWrt 不要走代理,不然会连接不到 Cloudflare

    1
    +.v2.argotunnel.com

    最好走直连,或者把 CF Tunnel 的服务 IP 走直连,不然家里的梯子断了就连不回来了

    思路来源于

    https://blog.xmgspace.me/archives/cloudflare-tunnel-via-proxy.html

    https://www.nodeseek.com/post-201141-1

  2. 免费计划 API Tokens 只能创建 50 个,也就是你只要授权 50 次,就会报错:Quota limit exceeded, you can create no more than 50 tokens.
    所以要记得删除无用的:https://dash.cloudflare.com/profile/api-tokens

    详细请见:https://blog.tsinbei.com/archives/1505

看过的教程

视频:

文字:

End

其实优选后的提升不是很大,建议不折腾。