没有公网 IP?用 Cloudflare Tunnel 免费内网穿透,家里电脑也能当服务器!
想把家里的 NAS、树莓派或电脑上的服务暴露到公网,但没有公网 IP?Cloudflare Tunnel 完全免费、无需公网 IP、自带 HTTPS 和域名,10 分钟让你的内网服务拥有公网地址。
一、什么是内网穿透?
先看一个常见场景
你在家里电脑上跑了一个网站(比如 localhost:8080),在家能访问,但出门就用不了了——因为你的电脑在路由器后面,用的是内网 IP(192.168.x.x),外网无法直接访问。
内网穿透就是给内网服务开一条"隧道",让外网用户也能访问。
传统方案 vs Cloudflare Tunnel
| 方案 | 需要公网 IP? | 需要买服务器? | 费用 | 难度 |
|---|---|---|---|---|
| 端口映射 + DDNS | ✅ 需要 | ❌ | 免费 | ⭐⭐ |
| frp/nps 内网穿透 | ❌ | ✅ 需要云服务器 | 几十元/月 | ⭐⭐⭐ |
| Cloudflare Tunnel | ❌ | ❌ | 免费 | ⭐ |
Cloudflare Tunnel 是目前最省心的方案:零成本、零服务器、自带域名和 HTTPS。
二、Cloudflare Tunnel 工作原理
传统内网穿透是"外→内"的模式,需要公网入口。Cloudflare Tunnel 是反过来的:
你的电脑 → 主动建立加密隧道 → Cloudflare 全球网络
↓
用户访问 yourdomain.com → 通过隧道到达你的电脑
┌──────────┐ 加密隧道 ┌────────────┐ HTTPS ┌──────────┐
│ 你的电脑 │ ←──────────────→ │ Cloudflare │ ←───────────→ │ 用户 │
│ 内网服务 │ cloudflared │ 全球网络 │ 你的域名 │ 浏览器 │
└──────────┘ └────────────┘ └──────────┘
核心优势:
- 不需要公网 IP
- 不需要开放路由器端口
- 自带 Cloudflare CDN 和 DDoS 防护
- 自带 SSL 证书(HTTPS)
- 完全免费

上图是 Cloudflare Tunnel 官方文档页面。官方介绍说它能让你的本地资源不需要公网 IP 就能安全连接到 Cloudflare 全球网络。
三、准备工作
开始之前,你需要:
| 准备项 | 说明 |
|---|---|
| ☁️ Cloudflare 账号 | cloudflare.com 免费注册 |
| 🌐 一个域名 | DNSHE 免费域名就行,需将 DNS 托管到 Cloudflare |
| 💻 一台电脑/NAS | 要暴露服务的设备,能上网即可 |
| 🐳 Docker(推荐) | 安装 Docker 更方便,不用也行 |
四、第一步:域名托管到 Cloudflare
如果你用的是 DNSHE 免费域名,先把 DNS 托管到 Cloudflare:
- 登录 Cloudflare → 添加站点 → 输入域名 → 选 Free 套餐
- Cloudflare 会给你两个 NS 地址
- 去 DNSHE 后台 → 域名管理 → 修改 DNS 服务器 → 填入 Cloudflare 的 NS 地址
- 等待生效(几分钟到几小时)
生效后在 Cloudflare 面板就能看到你的域名状态为「Active」了。
五、第二步:创建 Tunnel
方式一:Cloudflare 网页控制台(推荐新手)
- 登录 Cloudflare 控制台
- 左侧菜单 → Zero Trust → 首次使用会引导设置团队名(随意填)
- 进入后 → Networks → Tunnels
- 点击「Create a tunnel」
- 输入隧道名称(如
my-home-server)→ 保存
方式二:命令行(Docker)
docker run -d \
--name cloudflared \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate \
run --token 你的隧道Token
六、第三步:安装 cloudflared 并连接
创建隧道后,Cloudflare 会给你一个安装命令。根据你的系统选择:
macOS
brew install cloudflare/cloudflare/cloudflared
cloudflared tunnel login
Windows
下载 cloudflared 安装包,解压后运行:
cloudflared.exe tunnel login
Linux / 树莓派
# 下载
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
chmod +x cloudflared-linux-amd64
sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared
# 登录授权
cloudflared tunnel login
运行后会打开浏览器,授权你的 Cloudflare 账号。授权完成后,运行隧道:
cloudflared tunnel run 你的隧道名称
七、第四步:配置路由(域名 → 内网服务)
隧道跑起来后,需要设置"哪个域名指向哪个内网服务"。
在 Cloudflare Zero Trust → Tunnels → 你的隧道 → 点击「Configure」→ Public Hostname 标签:
| 子域名 | 域名 | 服务类型 | 内网地址 |
|---|---|---|---|
| blog | yourdomain.com | HTTP | localhost:8080 |
| nas | yourdomain.com | HTTP | 192.168.1.100:5000 |
保存后,访问 https://blog.yourdomain.com 就能访问到你电脑上 localhost:8080 的服务了!
一个隧道,多个服务
你可以给同一个隧道添加多条路由,把家里的不同服务都暴露出来:
https://blog.yourdomain.com → localhost:8080 (博客)
https://file.yourdomain.com → localhost:9000 (文件管理)
https://nas.yourdomain.com → 192.168.1.5:5000 (NAS 管理页)
八、实战:把本地网站暴露到公网
假设你电脑上运行了一个本地网站(比如 Python 的简易 HTTP 服务):
# 启动本地服务
python3 -m http.server 8080
然后用 Cloudflare Tunnel 暴露:
- 创建路由:
demo.yourdomain.com→localhost:8080 - 运行隧道:
cloudflared tunnel run my-tunnel - 浏览器打开
https://demo.yourdomain.com
搞定!现在全世界都能访问你电脑上的这个服务了,而且还是 HTTPS 的。
九、开机自启(让隧道一直在线)
隧道需要持续运行才能访问。设置开机自启:
macOS(LaunchAgent)
# 创建 plist 文件
sudo nano ~/Library/LaunchAgents/com.cloudflare.tunnel.plist
内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.cloudflare.tunnel</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/cloudflared</string>
<string>tunnel</string>
<string>run</string>
<string>你的隧道名称</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
# 加载并启动
launchctl load ~/Library/LaunchAgents/com.cloudflare.tunnel.plist
Linux(systemd)
sudo nano /etc/systemd/system/cloudflared.service
[Unit]
Description=Cloudflare Tunnel
After=network.target
[Service]
ExecStart=/usr/local/bin/cloudflared tunnel run 你的隧道名称
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
Windows(任务计划程序)
创建一个计划任务,触发器设为「开机启动」,操作为运行 cloudflared.exe tunnel run 你的隧道名称。
十、常见用途
| 场景 | 说明 |
|---|---|
| 🏠 远程访问 NAS | 在外面也能管理家里的文件 |
| 📝 个人博客 | 电脑上跑 Hugo/Hexo,公网实时访问 |
| 🖥️ 远程桌面 | 暴露 RDP/VNC 端口,远程控制电脑 |
| 🎮 游戏服务器 | 把 Minecraft/Terraria 服务器暴露给朋友 |
| 🧪 项目演示 | 本地开发的项目直接给客户看,不用部署 |
| 📊 Home Assistant | 智能家居面板随时访问 |
十一、常见问题
Q1:免费版有流量限制吗?
Cloudflare Tunnel 本身不限制流量,但受 Cloudflare 免费版 CDN 条款约束。对于个人和小型项目,完全够用。
Q2:国内访问速度怎么样?
Tunnel 走的是 Cloudflare 全球网络,国内访问会走最近的亚太节点(香港、日本、新加坡)。速度一般可以接受,但不如国内服务器快。如果对速度要求极高,建议用国内云服务器。
Q3:安全吗?
非常安全。隧道使用加密连接,所有流量走 HTTPS。而且你的源站 IP 完全隐藏,外部攻击者无法直接扫描你的内网。
Q4:需要备案吗?
不需要!因为域名走的是 Cloudflare 的海外 CDN 节点,不经过国内服务器,无需 ICP 备案。这也是用 Cloudflare Tunnel 的一大优势。
Q5:电脑关机了怎么办?
隧道需要设备在线才能工作。如果需要 7×24 小时可用,建议用低功耗设备(树莓派、NAS)或旧电脑长期运行。
十二、小结
Cloudflare Tunnel 是目前最简单、最便宜的内网穿透方案:
- ✅ 完全免费
- ✅ 不需要公网 IP
- ✅ 不需要买服务器
- ✅ 自带 HTTPS 和域名
- ✅ 自带 CDN 加速和 DDoS 防护
从注册到可用,新手也能在 30 分钟内搞定。赶紧试试,让你的内网服务拥有公网地址!
📌 系列文章:
- 新手必看:DNSHE 免费域名注册全攻略
- 免费虚拟主机注册全攻略
- DNS 解析从入门到精通
- Cloudflare 免费 CDN 配置教程
- 本文:内网穿透教程
- 下一篇:GitHub Pages 搭建免费个人网站