问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用 Cloudflare Tunnel 作为反向代理访问内网服务

创作时间:
作者:
@小白创作中心

使用 Cloudflare Tunnel 作为反向代理访问内网服务

引用
1
来源
1.
https://www.cnblogs.com/airoot/p/18725424

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
 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/

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号