前言
“折腾”的第一步,往往是从拥有一台自己的服务器开始的。也许是家里的 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 账号登录后才能访问),这些高级玩法,我们有机会在未来的文章里再来“折腾”。




最新评论