LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]Cloudflare Tunnel:公网访问方案(内网穿透)

admin
2026年2月10日 22:12 本文热度 42

本文介绍使用 Cloudflare Tunnel(原 Argo Tunnel)把系统安全地暴露到公网的方案,此方案无需所谓的公网 IP,也无需第三方工具,免费高效。

准备工作

哪些场景特别适合

  • • 家里 NAS / Homelab
  • • 公司内网系统(OA、ERP、监控面板)
  • • 临时测试环境 / 内测系统
  • • 没公网 IP 的云服务器
  • • Docker / 本地 FastAPI / Web 管理后台

尤其适合:“系统已经跑起来了,但不想折腾公网、防火墙、安全组” 的情况。

前提

  • • 必须能主动访问 Cloudflare
  • • 443 端口出站不被封
  • • 不是所有协议都适合(HTTP / HTTPS / TCP 最友好)
  • • 强依赖 Cloudflare(但稳定性极高)

优势(常见方案比对)

端口映射 / 公网 IP

这是最传统、最直觉的方式:

  • • 优点
    • • 原理简单
    • • 网络路径直观
  • • 问题也很明显
    • • 需要公网 IP(或备案云主机)
    • • 端口直接暴露,安全压力大
    • • IP 变动、环境迁移成本高

适合:
👉 对网络熟悉、对安全有完整防护体系的正式生产环境。

第三方内网穿透工具(frp / ngrok / 花生壳等)

这类工具的思路是:
你跑一个客户端,它帮你转发流量。

  • • 优点
    • • 上手快
    • • 对内网友好
  • • 常见不足
    • • 稳定性依赖服务商
    • • 免费版通常限速、限连接
    • • 域名、TLS、访问控制能力有限

适合:
👉 临时调试、演示、短期使用。

Cloudflare Tunnel(本文主角)

Cloudflare Tunnel 的逻辑和前面都不同:

  • • 不是让外部“连进你的服务器”
  • • 而是你的服务器主动连向 Cloudflare

这意味着:

  • • 不需要公网 IP
  • • 不需要端口映射
  • • 不直接暴露真实服务器

优势非常集中:

  • • 安全(真实 IP 对外不可见)
  • • 稳定(走 Cloudflare 全球网络)
  • • 成本低(个人和中小项目几乎够用)

一句话总结它的定位:
这是一个“反向暴露服务”的工程级方案。

准备

一个 Cloudflare 账号 + 一个域名

  1. 1. 登录https://www.cloudflare.com/zh-cn/注册一个账号,并生成一个用户 API 令牌
  2. 2. 注册一个域名(阿里、腾讯等域名服务商均可)

部署

Windows

1. 安装 cloudflared

两种方式选一种即可:

  • • 方式 A:Chocolatey(推荐)
choco install cloudflared -y
cloudflared --version
  • • 方式 B:Winget
winget install Cloudflare.cloudflared
cloudflared --version

2. 登录授权(会弹浏览器)

cloudflared tunnel login

3. 创建 Tunnel

cloudflared tunnel create my-tunnel

4. 写配置文件

建议放到默认目录(没有就建):

  • • 配置目录:C:\Users\<你的用户名>\.cloudflared\
  • • 配置文件:config.yml

创建/编辑:

notepad $env:USERPROFILE\.cloudflared\config.yml

填入(把 UUID 换成你创建 tunnel 后输出的那串):

tunnel: <TUNNEL-UUID>
credentials-file: C:\Users\<你的用户名>\.cloudflared\<TUNNEL-UUID>.json

ingress:

- hostname: app.example.com
  service: http://127.0.0.1:8080
- service: http_status:404

5. 创建 DNS 路由(把子域名绑定到 tunnel)

cloudflared tunnel route dns my-tunnel app.example.com

6. 运行

cloudflared tunnel run my-tunnel

运行后访问:https://app.example.com

Linux(Ubuntu/Debian 为例)

1. 安装 cloudflared

(如果你已用二进制安装也没问题,这里给常见方式)

# Debian/Ubuntu 常见安装方式之一(使用官方仓库时因发行版不同略有差异)
# 如果你不想折腾仓库,直接用 cloudflared 二进制也行。

如果你手里已有 cloudflared 二进制(最省心),放到 PATH:

sudo mv cloudflared /usr/local/bin/
sudo
 chmod +x /usr/local/bin/cloudflared
cloudflared --version

2. 登录授权(会给你一个 URL)

cloudflared tunnel login

3. 创建 Tunnel

cloudflared tunnel create my-tunnel

4. 写配置文件

Linux 推荐路径:
/etc/cloudflared/config.yml

sudo mkdir -p /etc/cloudflared
sudo
 nano /etc/cloudflared/config.yml

内容:

tunnel: <TUNNEL-UUID>
credentials-file: /root/.cloudflared/<TUNNEL-UUID>.json

ingress:
  - hostname: app.example.com
    service: http://127.0.0.1:8080
  - service: http_status:404

注意:credentials-file 的实际路径取决于你用哪个用户执行 tunnel login/create(通常在 ~/.cloudflared/ 下)。你也可以把 json 拷贝到 /etc/cloudflared/,然后改路径即可。

5. 创建 DNS 路由

cloudflared tunnel route dns my-tunnel app.example.com

6. 前台运行

cloudflared tunnel run my-tunnel

7. (可选)设置为 systemd 常驻服务

sudo cloudflared service install
sudo
 systemctl enable --now cloudflared
sudo
 systemctl status cloudflared

macOS(Homebrew)

1. 安装

brew install cloudflare/cloudflare/cloudflared
cloudflared --version

2. 登录授权

cloudflared tunnel login

3. 创建 Tunnel

cloudflared tunnel create my-tunnel

4. 写配置文件

macOS 默认在:
~/.cloudflared/config.yml

nano ~/.cloudflared/config.yml

内容:

tunnel: <TUNNEL-UUID>
credentials-file: /Users/<你的用户名>/.cloudflared/<TUNNEL-UUID>.json

ingress:
  - hostname: app.example.com
    service: http://127.0.0.1:8080
  - service: http_status:404

5. 创建 DNS 路由

cloudflared tunnel route dns my-tunnel app.example.com

6. 运行

cloudflared tunnel run my-tunnel

Docker(推荐做法:Token 方式,无需配置文件)

1. 创建 tunnel:

cloudflared tunnel login
cloudflared tunnel create my-tunnel
cloudflared tunnel route dns my-tunnel app.example.com

2. 获取 token(Cloudflare 会给一个很长的 token):

cloudflared tunnel token my-tunnel

3. Docker 运行(把 <TOKEN> 换掉;把服务地址换成你的容器名或宿主地址):

如果你的业务服务在同一个 docker network 里,假设服务容器名叫 myapp,端口 8080

docker network create cfnet

docker run -d --name myapp --network cfnet -p 8080:8080 your-app-image

docker run -d --name cloudflared --network cfnet \
  cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <TOKEN>

注意:Token 方式不需要你在容器里写 config.yml。子域名的 ingress 规则一般在 Cloudflare Zero Trust 的 Tunnel 配置里完成(更直观)。

多子域名/多服务怎么写

如果你想一条 tunnel 暴露多个服务(例如后台+API+监控),配置文件 ingress 写成这样:

ingress:
  - hostname: app.example.com
    service: http://127.0.0.1:8080
  - hostname: api.example.com
    service: http://127.0.0.1:9000
  - hostname: grafana.example.com
    service: http://127.0.0.1:3000
  - service: http_status:404

然后分别做 DNS 路由:

cloudflared tunnel route dns my-tunnel app.example.com
cloudflared tunnel route dns my-tunnel api.example.com
cloudflared tunnel route dns my-tunnel grafana.example.com


阅读原文:原文链接


该文章在 2026/2/11 11:15:27 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved