LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

Cloudflare Tunnel 实战:没有公网 IP,也能从外网访问家里的服务

admin
2026年4月21日 8:2 本文热度 64

系列:Cloudflare 实战第

难度:⭐⭐☆☆☆ 不需要写代码,按步骤操作即可

预计时间:30 分钟

适合谁:有 NAS、树莓派、家庭服务器、本地开发环境,想从外网访问但没有公网 IP 的人


先说清楚问题

大多数家用宽带有一个限制:没有固定公网 IP

没有公网 IP,意味着:

  • 无法在路由器上做端口映射让外网访问
  • 即便 ISP 分配了动态 IP,每次重连都可能变
  • 很多地区的家庭宽带直接在运营商 NAT 后面,根本没有独立 IP

传统解法是 frp——租一台有公网 IP 的云服务器做中转。每年几百块的服务器费,还要自己运维,带宽也是成本。

Cloudflare Tunnel 的方案:在你的内网设备上运行一个叫 cloudflared 的小程序,它主动向 Cloudflare 建立一条加密隧道,外网用户通过 Cloudflare 的节点访问你的服务,流量从 Cloudflare 经由这条隧道到达你的内网设备。

  1. 外网用户
  2. Cloudflare边缘节点(全球330+)
  3. ↓(加密隧道,由内网主动建立)
  4. 你的内网设备(NAS /树莓派/电脑)
  5. 本地服务(网页/ SSH /数据库管理面板...)

整个过程:不需要公网 IP,不需要开放路由器端口,不需要备案,完全免费。


Tunnel vs frp 对比

对比项
Cloudflare Tunnel
frp(自建)
费用
完全免费
需租云服务器(每年几百~千元)
公网 IP
不需要
需要(中转服务器要有)
带宽
Cloudflare 网络,无限
受云服务器带宽限制
HTTPS
自动,无需配置
需自行配置证书
稳定性
Cloudflare 级别,极高
依赖你的云服务器
国内访问速度
一般(节点在境外)
看云服务器位置
配置复杂度
低,控制台操作为主
中,需要修改配置文件
运维成本
几乎为零
需要维护服务器

如果你的用户主要在国外(比如做海外独立站开发调试),Tunnel 完胜。如果主要在国内且对延迟敏感,frp + 国内云服务器速度更快,但有成本。


前置条件

  • 一个接入 Cloudflare 的域名(参考本系列第 2 篇)
  • 一台内网设备(NAS、树莓派、Linux 服务器、Windows 电脑均可)
  • 设备上有你想暴露的服务(比如跑在 8080 端口的 Web 应用)

Step 1:开通 Zero Trust

Cloudflare Tunnel 属于 Zero Trust 产品线,需要先开通。

登录 Cloudflare 控制台 → 左侧菜单点「Zero Trust」→ 首次进入选择 Free 计划(不用填信用卡)→ 设置一个团队名称(随意,比如 myhome)。



Step 2:创建 Tunnel

进入 Zero Trust 控制台 → 左侧「Networks」→「Tunnels」→「创建 Tunnel」。

  • Tunnel 类型:选「Cloudflared」
  • Tunnel 名称:随意,建议用设备名,如 home-nas 或 raspberry-pi

点「保存 Tunnel」。


Step 3:在内网设备上安装 cloudflared

创建 Tunnel 之后,控制台会显示一条安装命令(包含你专属的 Token)。根据你的设备类型选择对应方式:


📌 Linux(通用,含树莓派)

控制台会给出类似这样的命令(以 Debian/Ubuntu 为例):

  1. # 下载并安装 cloudflared
  2. curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb \
  3. -o cloudflared.deb
  4. sudo dpkg -i cloudflared.deb
  5. # 运行 Tunnel(用控制台给出的命令,里面包含你的 Token)
  6. sudo cloudflared service install <你的Token>

树莓派是 ARM 架构,下载对应版本:

  1. # 树莓派 64 位系统
  2. curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb \
  3. -o cloudflared.deb
  4. sudo dpkg -i cloudflared.deb
  5. sudo cloudflared service install <你的Token>

安装后 cloudflared 会自动注册为系统服务,开机自启,无需手动管理。


📌 macOS

  1. # 用 Homebrew 安装
  2. brew install cloudflare/cloudflare/cloudflared
  3. # 运行(控制台复制完整命令)
  4. sudo cloudflared service install <你的Token>

📌 Windows

从控制台复制 Windows 版的安装命令(格式类似 winget install--idCloudflare.cloudflared),或直接下载 .msi 安装包运行。

安装后在 PowerShell(管理员)里执行:

  1. cloudflared.exe service install <你的Token>

📌 Docker(推荐,适合 NAS 和已有 Docker 的环境)

  1. docker run -d \
  2. --name cloudflared \
  3. --restart unless-stopped \
  4.   cloudflare/cloudflared:latest \
  5.   tunnel --no-autoupdate run \
  6. --token <你的Token>

--restartunless-stopped:容器崩溃或设备重启后自动恢复运行。


📌 群晖 NAS(DSM)

群晖可以通过套件中心安装 Docker,然后用上面的 Docker 命令运行。

或者通过第三方套件源(如矿神源)直接搜索「Cloudflare Tunnel」安装套件,输入 Token 即可,不需要命令行。


验证连接成功

安装完成后,回到 Cloudflare 控制台的 Tunnels 页面,看到 Tunnel 状态变为绿色的「Healthy」,说明连接成功。


Step 4:配置公开路由(把内网服务绑定到域名)

连接成功后,要告诉 Cloudflare:访问哪个域名,转发到内网的哪个端口。

在 Tunnel 详情页,点「Public Hostname」→「添加公开主机名」。

以暴露一个跑在 8080 端口的 Web 服务为例:

字段
填写内容
子域名(Subdomain)
home
(最终访问地址是 home.你的域名.com
域名(Domain)
选择你的域名
路径(Path)
留空(转发所有路径)
类型(Type)
HTTP
URL
localhost:8080

Type 为什么选 HTTP 而不是 HTTPS? 因为 Cloudflare 会在边缘自动处理 HTTPS,外网用户访问的是 HTTPS,Cloudflare 到你内网设备这一段走的是加密 Tunnel,所以内部可以用 HTTP。如果你的本地服务本身就是 HTTPS,才需要选 HTTPS。

点「保存」,Cloudflare 会自动在 DNS 里创建对应的 CNAME 记录。

几分钟后,打开浏览器访问 https://home.你的域名.com,就能看到你内网的服务了。


多服务并存:一个 Tunnel,多个子域名

Tunnel 里可以同时配置多个「公开主机名」,每个对应不同的内网服务。比如:

子域名
内网地址
服务
nas.你的域名.comlocalhost:5000
群晖 DSM 管理界面
jellyfin.你的域名.comlocalhost:8096
Jellyfin 媒体服务器
code.你的域名.comlocalhost:8443
VS Code Server
dev.你的域名.comlocalhost:3000
本地开发项目

每个子域名单独添加一条「公开主机名」规则,Cloudflare 自动路由,一台内网设备跑多个服务完全没问题。


进阶:暴露 SSH(命令行远程登录)

除了 Web 服务,Tunnel 也支持暴露 SSH,在外网也能 ssh 进家里的设备。

服务端配置(内网设备上)

在「公开主机名」里添加一条:

字段
填写内容
子域名
ssh
域名
你的域名
类型
SSH
URL
localhost:22

客户端配置(你自己的电脑上)

需要在本地也安装 cloudflared,然后修改 SSH 配置文件:

在 ~/.ssh/config 里添加:

  1. Host ssh.你的域名.com
  2. ProxyCommand cloudflared access ssh --hostname %h

之后正常 SSH 登录即可:

  1. ssh user@ssh.你的域名.com

流量会经由 Cloudflare Tunnel 加密传输,比直接暴露 22 端口安全得多。


进阶:用 Access 加一层身份验证

Tunnel 默认把内网服务直接暴露给所有人,如果你的服务本身没有密码保护(比如一些管理面板),建议加上 Cloudflare Access。

Access 可以要求访问者先登录(支持 Google、GitHub、邮件 OTP 等),验证通过后才能访问内网服务。

配置路径:Zero Trust → Access → Applications → 创建应用 → 选择 Self-hosted → 填入你的 Tunnel 域名 → 设置登录策略。

免费版 Access 支持 50 个用户,适合个人和小团队使用。


常见问题

Q:国内访问速度怎么样?

A:免费版 Tunnel 的节点在境外,国内访问会绕道,延迟通常在 100~300ms,适合偶尔访问管理页面,不适合高频访问或大文件传输。如果主要面向国内,建议搭配国内 CDN 或考虑其他方案。

Q:Tunnel 支持 UDP 吗(比如游戏服务器)?

A:免费版 Tunnel 仅支持 HTTP/HTTPS/SSH/RDP 等基于 TCP 的协议,不支持 UDP。游戏服务器、DNS 服务等 UDP 场景需要付费的 Spectrum 产品。

Q:内网设备重启后 Tunnel 还能自动恢复吗?

A:用 cloudflared service install 方式安装后,cloudflared 注册为系统服务,会随系统自动启动。Docker 方式加了 --restartunless-stopped 参数也会自动恢复。

Q:一个 Cloudflare 账号可以建多少个 Tunnel?

A:免费版没有明确限制,实测可以建很多个。一般建议按设备建 Tunnel(一台设备一个 Tunnel),同一台设备的多个服务用多条「公开主机名」规则区分。

Q:cloudflared 进程挂了怎么处理?

A:检查状态:

  1. # Linux systemd 方式
  2. sudo systemctl status cloudflared
  3. # 查看日志
  4. sudo journalctl -u cloudflared -f
  5. # 重启服务
  6. sudo systemctl restart cloudflared

Docker 方式:

  1. docker ps -| grep cloudflared
  2. docker logs cloudflared
  3. docker restart cloudflared

Q:可以暴露局域网内其他设备的服务吗(不只是运行 cloudflared 的那台)?

A:可以。URL 填内网 IP 而不是 localhost

  1. # 把局域网内 192.168.1.100:8080 的服务暴露出去
  2. Type: HTTP
  3. URL:192.168.1.100:8080

只要运行 cloudflared 的设备和目标设备在同一局域网内,就可以这样转发。一台树莓派跑 cloudflared,可以把整个内网的所有服务都暴露出去。


安全建议

Tunnel 虽然方便,但把内网服务暴露到公网本身就有风险,几点建议:

1. 有登录验证的服务才暴露:没有密码的管理面板(如部分 NAS 的内部服务)暴露前一定要加 Access 身份验证。

2. SSH 暴露要用密钥登录:禁止密码登录,只用 SSH 密钥,防暴力破解:

  1. # /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. PubkeyAuthentication yes

3. 不要暴露数据库端口:MySQL、Redis、PostgreSQL 这类服务不要直接暴露,通过应用层(Web 管理工具)访问。

4. 定期查看 Zero Trust 的访问日志:在 Zero Trust 控制台 → Logs 可以看到所有访问记录,有异常及时处理。


小结

Cloudflare Tunnel 是目前个人和小团队内网穿透的最优解:

  • 无公网 IP、无需开路由器端口、无需备案
  • 自动 HTTPS,流量加密
  • 免费,稳定
  • 支持 Web 服务、SSH、RDP 等多种协议
  • 一个 Tunnel 搞定所有内网服务

操作流程回顾:

  1. 1.开通ZeroTrust(选Free
  2. 2.创建Tunnel,获得Token
  3. 3.在内网设备安装并运行 cloudflared
  4. 4.添加「公开主机名」规则,绑定域名和端口
  5. 5.访问域名,穿透生效

如果你有多个内网服务,花 30 分钟配好之后,从世界任何地方都能访问家里的设备,而且比 frp 方案省钱、省心得多。


下一篇:《WAF 防火墙实战:用 5 条免费规则挡住 90% 的攻击》

系列目录:持续更新,欢迎关注公众号。


参考链接

  • Cloudflare Tunnel 官方文档:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/
  • cloudflared 安装指南:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/
  • Tunnel 公开主机名配置:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/routing/public-hostname/
  • SSH 通过 Tunnel 访问:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/
  • Cloudflare Access 文档:https://developers.cloudflare.com/cloudflare-one/policies/access/
  • Zero Trust 免费计划说明:https://www.cloudflare.com/plans/zero-trust-services/
  • cloudflared GitHub 仓库:https://github.com/cloudflare/cloudflared


阅读原文:原文链接


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