文章目录
- Cloudflare开源的cloudflared,不碰防火墙就能暴露内网服务
- 核心机制
- 支持的协议
- 安装方式
- 版本策略
- 适用场景
Cloudflare开源的cloudflared,不碰防火墙就能暴露内网服务
Cloudflare维护的cloudflared项目在GitHub上获得了1.4万Star。它是一个命令行隧道客户端,将Cloudflare网络的流量代理到你的源服务器,过程中不需要在防火墙上开任何端口。
我自己平时做开发,经常遇到一个情况:本地跑了一个服务,想让外网的人测试一下,要么部署到公网服务器,要么折腾端口映射和动态DNS。cloudflared解决的就是这个问题。
核心机制
cloudflared在服务器上运行一个守护进程,与Cloudflare边缘网络建立隧道。外部请求到达Cloudflare后,经隧道转发到源服务器,响应沿原路返回。
源服务器始终是隧道的发起方,防火墙只需允许出站连接,入站端口可以全部关闭。这个设计降低了网络暴露面。
支持的协议
Tunnel功能服务于HTTP和WebSocket流量,适合托管网站和API服务。Access功能支持在Layer 4代理TCP流量,覆盖SSH、RDP、数据库连接等场景。
我试过这样一个用法:在一台没有公网IP的测试服务器上运行cloudflared,然后从本地通过SSH直连过去,中间不需要配置任何安全组规则。Cloudflare的Access策略还可以在连接层面叠加身份验证,未通过认证的请求不会被转发。
如果你使用了Cloudflare的WARP客户端,WARP可以直接路由到隧道背后的源站,不再需要单独运行Access命令。
安装方式
cloudflared支持的安装途径比较全:
- macOS:Homebrew安装,或直接下载二进制文件
- Linux:二进制包、Debian包、RPM包
- Windows:独立安装步骤
- Docker:DockerHub上有官方镜像
- 源码编译:需要Go 1.26以上,执行make cloudflared
安装后登录Cloudflare账号认证,创建隧道并配置路由。官方文档对DNS记录公开、Load Balancer配合、WARP私有网络路由等用法都有说明。
TryCloudflare功能允许不提前添加网站就创建临时隧道做测试。在正式配置之前先跑通流程,省了不少事。
版本策略
Cloudflare对cloudflared的版本支持窗口为一年。超过一年的旧版本可能遇到兼容性问题,使用者需要跟进升级。
项目代码在持续更新。Go语言编写,依赖capnp进行序列化,构建使用Makefile。开发者可运行make test、make lint、make fmt检查代码质量,提交前安装Git hooks自动校验。
适用场景
这个工具适合三类用户:需要在本地开发环境让外部访问进行调试的开发人员;运行自托管服务但不想暴露公网IP的团队;使用Cloudflare系列产品做网络管理的组织,cloudflared可与WARP、Access联动。
局限在于依赖Cloudflare网络。如果使用其他CDN或代理方案,这个工具不适用。所有流量经过Cloudflare,数据合规有要求的场景需要提前评估。
N或代理方案,这个工具不适用。所有流量经过Cloudflare,数据合规有要求的场景需要提前评估。