无需公网IP,零成本发布内网服务:Cloudflare Tunnels 保姆级教程


avatar
admin 2025-07-17 56

前言

“折腾”的第一步,往往是从拥有一台自己的服务器开始的。也许是家里的 NAS,也许是树莓派,或者是一台跑着 Windows 的旧电脑。我们在上面部署了各种好玩的服务,但一个尴尬的问题随之而来:怎么从外面访问它?

大部分家庭宽带都没有独立的公网IP,即使有,也可能是动态变化的。传统的解决方案是购买一台有公网IP的云服务器(VPS),然后用 FRP 这类工具做反向代理,但这不仅需要花钱,还需要一定的配置和维护成本。

今天,我要介绍一个更优雅、更现代的方案—— Cloudflare Tunnels。

简单来说,它让你在内网的设备上运行一个官方的客户端程序,这个程序会主动、安全地连接到离你最近的 Cloudflare 边缘节点,并建立一个持久的通道。之后,所有访问你域名的流量都会通过 Cloudflare 的全球网络,精准地“钻”过这个通道,到达你的内网设备。

整个过程,你的设备完全不需要公网IP,甚至可以躲在好几层路由器后面。

听起来是不是很酷?让我们开始吧。

准备工作

一个你自己的域名:比如 yourdomain.com。这是必需品,如果没有可以去阿里云/腾讯云等注册商买一个,一年也就几十块钱。

一个 Cloudflare 账号:免费注册即可。

一个内网服务:任何你想发布到公网的服务,例如你的NAS登录页面(如 192.168.1.10:5000)、本地的网站(如 127.0.0.1:8080)等。

操作步骤

第一步

将域名托管到 Cloudflare
这一步是基础。你需要将你的域名服务器(Nameserver)修改为 Cloudflare 的地址。

登录 Cloudflare,点击 “Add a Site”(添加站点),输入你的域名。

选择免费(Free)套餐。

Cloudflare 会扫描你现有的 DNS 记录,直接点 “Continue”(继续)。

最关键的一步,Cloudflare 会给你提供两个 Nameserver 地址。你需要去你的域名注册商(比如阿里云)的后台,找到域名管理,将DNS服务器修改为 Cloudflare 提供的这两个地址。

修改完成后,回到 Cloudflare 点击 “Done, check nameservers”。DNS全球生效需要几分钟到几小时不等,你可以去喝杯茶,等 Cloudflare 给你发邮件通知“站点已激活”。

第二步

创建 Tunnel 通道
域名激活后,我们来创建核心的 Tunnel。

在 Cloudflare 主界面,左侧菜单栏找到并点击 Zero Trust。(第一次进入可能需要初始化,随便选个团队名即可)

在 Zero Trust 仪表盘的左侧菜单,找到 Access -> Tunnels。

点击 Create a tunnel 按钮。

给你的 Tunnel 起一个容易记的名字,比如 my-home-nas,然后点击 Save tunnel。

第三步

安装并运行 Connector
创建 Tunnel 后,Cloudflare 会引导你安装它的“连接器”(Connector),也就是 cloudflared 客户端。这里我们强烈推荐使用 Docker 方式,因为它干净、方便、易于管理。

在引导页面,选择你的操作系统环境(比如 Docker)。Cloudflare 会生成一条 docker run 命令。

我们用更优雅的 docker-compose 来管理它。在你的内网服务器上,创建一个目录,例如 cloudflared,然后在里面创建一个 docker-compose.yml 文件。

mkdir cloudflared
cd cloudflared
touch docker-compose.yml

将 Cloudflare 生成的命令中的 token 复制出来。它是一长串字符。然后将下面的内容粘贴到 docker-compose.yml 文件中,并替换部分。

# docker-compose.yml
version: '3.7'
services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared-tunnel
    restart: unless-stopped
    command: tunnel --no-autoupdate run --token <YOUR_TOKEN_HERE>

在 cloudflared 目录下,运行 Docker Compose 启动连接器。

docker-compose up -d

稍等片刻,回到 Cloudflare 的 Tunnel 页面,你应该能看到你的连接器下面出现了你的服务器信息,状态显示为 Connected。这表示你的内网和 Cloudflare 的“地道”已经挖通了!

第四步

配置公网域名并指向内网服务
地道挖通了,现在要告诉访客从哪个“入口”(域名)可以进入,以及这个入口最终通向哪里(内网服务地址)。

在 Tunnel 的配置页面,点击 Next,进入 Public Hostnames 配置页。

点击 Add a public hostname。

Subdomain:填写你想使用的子域名,例如 nas。

Domain:选择你的主域名,例如 yourdomain.com。这样最终的访问地址就是 nas.yourdomain.com。

Service Type:选择 HTTP。

URL:填写你的内网服务地址,必须带上IP和端口,例如 192.168.1.10:5000 (群晖) 或 127.0.0.1:8080 (本机Web服务)。

配置完成后,点击 Save tunnel。

大功告成!

验证成果

现在,打开浏览器,输入你刚刚配置的域名 https://nas.yourdomain.com。你会惊奇地发现,你已经可以成功访问到家里的服务了!并且注意看地址栏,Cloudflare 已经自动为你加上了 SSL 证书,实现了安全的 HTTPS 访问。

你可以用同样的方法,为同一个 Tunnel 添加多个 Public Hostname,分别指向你内网的不同服务(比如blog.yourdomain.com 指向 192.168.1.10:8000),实现“一夫当关,万夫莫开”的效果。

总结

通过 Cloudflare Tunnels,我们用一种近乎零成本的方式,优雅且安全地解决了内网穿透这个老大难问题。它不仅稳定、快速,还省去了维护公网服务器和配置复杂防火墙规则的麻烦。

这只是 Cloudflare Zero Trust 套件的冰山一角。你甚至还可以为你的服务再套上一层登录验证(比如用你的 Google/GitHub 账号登录后才能访问),这些高级玩法,我们有机会在未来的文章里再来“折腾”。

暂无评论

发表评论

相关阅读