使用 Cloudflare Tunnel 作为反向代理访问内网服务
Cloudflare Tunnel 是一款隧道软件,可以理解为反向代理;可以快速安全地加密应用程序到任何类型基础设施的流量,如 TCP/HTTP/SSH 等,同时能够隐藏 web 服务器 IP 地址,阻止直接攻击,适用于没有公网 IP,但是又需要从公网访问内网部署的服务;详细可以参考官方文档:Cloudflare Tunnel
创建 Tunnel
Tunnel 支持在线和本地两种配置方式;在线维护方式添加、修改比较方便,推荐使用在线的方式进行配置;
在 Zero Trust => Network => Tunnels 中选择创建 Tunnel
安装配置 Cloudflare Tunnel
Tunnel 支持二进制包或者 Docker 容器的方式进行安装;选择相应的平台,会生成安装命令,在命令后执行该命令即可
这里演示使用Docker安装,复制Docker命令执行
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <你的token>
这里注意:可以在tunnel --no-autoupdate和run之间添加参数,具体说明如下:
--loglevel info:指定日志级别 --logfile /var/log/cloudflared-tunnel.log:日志输出文件 --metrics 0.0.0.0:19991:允许暴露指标,用于监控运行信息 --edge-ip-version 4:使用 IPv4 连接边缘节点(如果有 IPv6建议使用 IPv6) --protocol http2:连接协议使用 http2,默认的 quic 协议在国内丢包严重
比如,增加--protocol http2参数后,则Docker命令执行
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate --protocol http2 run --token <你的token>
如果是非Docker平台运行(如Linux平台安装的),则自动生成的 Service 配置文件路径是 /etc/systemd/system/cloudflared.service
,编辑该文件添加配置即可,当然还需要重载服务
systemctl daemon-reload
systemctl restart cloudflared
查看服务状态
systemctl status cloudflared
1 2 3 4 5 6 7 8 9 | cloudflared.service - cloudflared Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2024-02-27 22:44:53 CST; 43min ago Main PID: 111 (cloudflared) Tasks: 9 (limit: 38155) Memory: 43.7M CPU: 8.539s CGroup: /system.slice/cloudflared.service └─111 /usr/bin/cloudflared --no-autoupdate tunnel --loglevel info --metrics 0.0.0.0:19991 --edge-ip-version 6 --protocol auto run --token ${TOKEN} |
配置路由规则
路由规则支持在本地或者 Cloudflare 平台配置两种方式,建议在 Cloudflare 平台配置,更加灵活
下面演示如何将本地网络192.168.1.123的8080端口启动的Web服务对外进行暴露:
在Cloudflare点击对应的 Tunnel,选择 edit => Public Hostname => Add a public hostname 添加新的路由规则,将域名 whoami.homelab.dev 的请求转发到 192.168.1.123:8080 这个地址,服务类型为 HTTP (图片来自其他网站,仅参考)
这样配置之后服务是向公网开放的,如果想要通过权限控制,仅允许特定用户或者 IP 访问,可以参考 Cloudflare-Tunnel-配置权限控制保护服务安全访问
Cloudflare 默认和边缘节点的数据中心建立 4 个连接,但是边缘节点都在美国,使用 IPv4 连接边缘节点在国内高峰期基本是无法使用的;如下是使用 IPv4 和 IPv6 连接时有效连接的边缘节点数量,因此强烈建议使用 IPv6
此外,还可以结合cloudflare的Access和WAF进行更多安全防护,本篇不详细介绍,请见https://debill.me/categories/Cloudflare%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/
其他参考:https://blog.hellowood.dev/posts/%E4%BD%BF%E7%94%A8-cloudflare-tunnel-%E4%BD%9C%E4%B8%BA%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%AE%BF%E9%97%AE%E5%86%85%E7%BD%91%E6%9C%8D%E5%8A%A1/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)