cloudflare tunnel 详细介绍 —— 面向cloudflare的网站搭建,1分钟快速启动一个有ssl证书的wordpress博客
一、前言
cloudflare argo tunnel是什么?
Cloudflare Tunnel 为您提供了一种无需公共 IP 地址即可将资源连接到 Cloudflare 的安全方式。
使用 Tunnel,您不会将流量发送到外部 IP — 相反,您的基础设施中的一个轻量级守护进程( cloudflared
) 创建到 Cloudflare 边缘的仅出站连接。
Cloudflare Tunnel 可以将 HTTP Web 服务器、 SSH 服务器 、 远程桌面 和其他协议安全地连接到 Cloudflare。
这样,您的源站就可以通过 Cloudflare 提供流量,而不会受到绕过 Cloudflare 的攻击。
Cloudflared 在您的资源和 Cloudflare 边缘之间建立出站连接(隧道)。
在同一个隧道内,你可以运行尽可能多的 cloudflared
根据需要处理(连接器)。
这些进程将建立与 Cloudflare 边缘的连接,并将流量发送到最近的 Cloudflare 数据中心。
![image_3 image_3](https://www.qcyqq.com/wp-content/uploads/2023/08/image_3.png)
额,你说你看不懂?
上面一堆东西,说人话就是人如其名,cloudflare tunnel就是一个内网穿透工具,类似于国内的花生壳这种
但是比它好用的多
二、为什么要用cloudflare tunnel
听我跟你讲,这个好处可太多太多了
- cloudflare tunnel是一个内网穿透工具,它不需要你的服务器暴露端口到公网,也不需要你的服务器有公网ip地址,只要你的设备能联网就能启动一个网站,最关键是完全免费不要钱!带宽看你服务器带宽,和其他内网穿透工具不一样的是,用它搭建的服务自动接入cloudflare的防御,家宽建站不是梦,而且没有任何限制。(除了TOS,自己去看
- 默认情况下,你无法决定cloudflare cdn回源方式,但是你用了tunnel穿透网站的方式,可以指定http2/QUIC/http2 mux等回源方式
- 反正都是面向cf建站,argo tunnel会自动给你申请和续期ssl证书,这方面续期和申请的工作可以无视
- 迁移和维护非常方便,启动也很简单
- 不怕别人扫描你的网站,由于没有屏蔽非CF的ip访问,导致源站暴露,面临被攻击的风险
- 如果你是面向cloudflare建站的,argo tunnel的性能比nginx要好,它高带宽和高并发的情况下,明显argo tunnel占用更低,不信你可以去尝试一下1Gbps以上的传输
- 做站不会占用任何公网端口,你可以同时在一台服务器上同时启动多个网站,不用再考虑端口占用了
- 启动多个实例,宕机自动切换
三、有什么缺点
我觉得没什么缺点,让我评价都是优点,没有不好的地方
硬要说的话,就是你既然用的是cloudflare的内网穿透工具,那么必须把网站接入它的CDN才可以
四、实验环境
您需要的东西:
- cloudflare账户一枚
- 托管在cloudflare一个域名
- 一个完整的大脑
- 一双没有缺陷的眼睛
- 一张会提问的嘴巴
五、Start a tunnel with cli
看完这小节,你可以了解如何用cli使用cloudflare argo tunnel
这不是我们的重点,我们重点是后面docker那部分
1、下载cloudflared工具,连接到你的cloudflare账户
这个不推荐放到服务器上获取储存凭证,因为服务器有被黑的风险,你可以放到本地windwos、linux都行
根据你的架构选择release,这里用x86-64的架构举例
如图:
![image_4 image_4](https://www.qcyqq.com/wp-content/uploads/2023/08/image_4.png)
然后登陆连接你的cloudflare账户,需要使用cloudflare的zero trust
登录时随便选一个托管在cf的域名授权就行了
![image_7 image_7](https://www.qcyqq.com/wp-content/uploads/2023/08/image_7.png)
![image_5 image_5](https://www.qcyqq.com/wp-content/uploads/2023/08/image_5.png)
![image_6 image_6](https://www.qcyqq.com/wp-content/uploads/2023/08/image_6.png)
如果说你要迁移,就把cert.pem这个配置文件下载到其他机器相同的路径就行了,用其他域名也是,不需要重复授权,只需要这一次就能创建隧道
2. 创建一个隧道
非常简单
![image_8 image_8](https://www.qcyqq.com/wp-content/uploads/2023/08/image_8.png)
配置文件路径在/root/.cloudflared/<id>.json
这个意思就是,你现在用你获得你账户的凭证,创建了一个隧道,你可以用<id>.json
去使用这个隧道
3. 管理
额,这里不用多说吧,你运行cloudflared help
直接看就行了
值得注意的就是几个login
create
route
run
list
info
delete
token
这些光看这个单词的意思就能猜出是干什么的,不用我去详细介绍
4. 如何用cli去做内网穿透
上面说了哈,我们创建隧道的这个过程是可以在你内网环境下做的,不需要服务器
那么我们如何其他地方使用穿透功能呢?
先获取你创建隧道的这个token
![image_9 image_9](https://www.qcyqq.com/wp-content/uploads/2023/08/image_9.png)
你在这里获得token意味着其他人有下面这串神秘代码就能使用你的隧道,请谨慎保管
什么,你说这样不安全?
我当然知道啦,下面会介绍其他连接方式,先慢慢来搞懂cli再说
你复制这串神秘代码后,在想要使用隧道的地方这样输入命令
![image_11 image_11](https://www.qcyqq.com/wp-content/uploads/2023/08/image_11.png)
这样我们的在此8080端口上内网服务,就会被穿透到cf哪里(支持设置proxy穿透隧道,自己help查看)
测试网址 https://<id>.cfargotunnel.com ,你浏览器访问一下就知道了
那么如何绑定到我自己的域名呢
也非常简单,在dashboard创建一个cname并开启小云朵就行了,这样cf就会自动把你这个域名绑定到这个隧道上面,以后你只需要访问这个域名就行了
![image_18 image_18](https://www.qcyqq.com/wp-content/uploads/2023/08/image_18.png)
当然cli部分你权当介绍看看就行了,我们的重心不是这里,它只让你对它有个简单的了解,下面的配合docker使用才是真正的方便
六、Start with docker-compose
这里用cloudflared docker 启动一个wordpress做例子,其他也是同理,在下面给出几个常用服务的配置样例
1、安装docker-compose
如果没有装过docker,包管理器会自动给你装上docker,毕竟是依赖的一部分
2、文件夹结构
其实没必要用文件夹,但是为了我们以后管理方便,这里还是每个容器使用一个文件夹吧
解释一下
html以后放wordpress的文件,mariadb_data放的是数据库文件,这俩都不需要创建
你创建的是cloudflared/
文件夹和它的子目录tunnel/
以及创建编辑config.yaml
,这个是tunnel的配置文件,指定配置
3. docker-compose.yml
这个你只需要编辑数据库那部分就行了,修改成你的密码,其他保持原样,然后保存
4. 配置cloudflared config.yaml
其实也很简单
首先把上面创建隧道生成的那个<id>.json
下载下来,上传到服务器文件夹里./cloudflared/tunnel/
记得改名成id.json
config.yaml
解释一下
tunnel
:<id>就是你隧道的那个id,粘贴上,不需要双引号比如123156465-456adwada456dwad-dawdawd
credentials-file
: 不需要你动
protocol
: 可选项<auto/quic/http2/h2mux>
, auto默认quic,使用quic回源时,对性能占用往往很高,如果没有很变态的延迟要求的人,建议用http2和h2mux,h2mux你可以理解为多通道的意思,实测这俩区别不大(如果你禁用了udp也是不能用quic的注意啦)
ingress
: 相当于入站规则 hostname是绑定到这个隧道的cf托管域名,这个tunnel不会自动添加,你需要cli那一步去dashboard手动添加 最后一个service: http_status:404
,这个必须得加,有个收尾规则,你可以吧404改成666或者123,那无所谓
如果说你要用SaaS的域名接入cf,则是
这也是为什么要用配置文件启动tunnel的原因,因为用命令行指定SaaS域名太麻烦了
5. docker-compose管理
启动
查看日志
停止
迁移
把这个blog/文件夹打包直接拷走到其他服务器重启启动就行了,因为自动证书,所以啥也不用管就能启动,你就说方便不方便ba
6. 启动博客
![image_12 image_12](https://www.qcyqq.com/wp-content/uploads/2023/08/image_12.png)
![image_13 image_13](https://www.qcyqq.com/wp-content/uploads/2023/08/image_13.png)
![image_14 image_14](https://www.qcyqq.com/wp-content/uploads/2023/08/image_14.png)
![image_15 image_15](https://www.qcyqq.com/wp-content/uploads/2023/08/image_15.png)
![image_16 image_16](https://www.qcyqq.com/wp-content/uploads/2023/08/image_16.png)
额,没了就这点,简单吧哈哈哈哈,是不是比你从零开始编译环境方便?
七、其他服务示例
bitwarden
alist
emby
其他服务实例欢迎放到评论区,供给大家参考
八、你知道吗?
1.tunnel不止可以穿透http服务
它可以穿透所有TCP协议,使用方法也很简单
把config.yaml修改一下就行了,比如
![image_17 image_17](https://www.qcyqq.com/wp-content/uploads/2023/08/image_17.png)
2. 可以在cloudflare zero trust面板管理你的tunnel
这个面板也可以添加隧道不只是用命令行创建
![Screenshot_1 Screenshot_1](https://www.qcyqq.com/wp-content/uploads/2023/08/Screenshot_1.png)
3. 用一个隧道可以同时被其他机器启动
cf会优先选择第一时间启动的机器作为主节点,当主节点down掉后会自动切换的其他节点,这个是按照启动的顺序决定的
4. tunnel一个帐号有创建的数量限制
但是我记得数量限制一个人是用不完的,不用担心,具体数量忘了
九、常见问题
上一个群管理员帐号被杜叔叔给封了,无法解封,所以新创建一个
创建个群的目的是为了,不给一些小白解决问题
短短一篇博文是无法解释清楚所有问题的,如果你有其他问题,请加群问群友,或者发邮件联系作者
1.我可以用家宽建站吗?
为什么不能呢?
关于家宽建站这方面,argo tunnel可以在连接时指定代理地址,所以只能你的梯子还能用,你还能访问谷歌,那么就能使用tunnel穿透
具体的配置我没有直接在博客里放出来,你可以去cloudflare argo tunnel docs里面去查询连接时代理配置项
就是在配置时启动时指定socks5地址和端口,比如
2. 国内能用吗?
不要问我,去问长城防火墙
3. 我能转载吗?
可以,但是要表明出处,我码一篇文章要好几个小时,你直接copy走了,以后就放弃分享了
4. 速度咋样?
取决于你本地到CF的速度,以及用户到CF的速度
如果说你服务器位于非中国大陆,则完全不需要担心
中国大陆的话,建议外面套一层代理去让CF回源
然后客户访问CF这部分就仁者见仁,智者见智了
由于可以指定QUIC回源,比起传统CDN回源方式肯定要好不少,至少延迟方面要有优势