主题模式
Are you an LLM? You can read better optimized documentation at /ai/homelab/cloudflare-tunnel.md for this page in Markdown format
2026 Cloudflare Tunnel 实战:无需公网 IP,远程访问家中 NAS
在上篇教程中,我们成功部署了 Jellyfin。但只能在家里看怎么行?摸鱼的时候想看怎么办?
传统做法是 DDNS + 端口映射,但这有两个致命死穴:
- 没有公网 IP:现在运营商基本是大内网 IP,映射了也没用。
- 极度不安全:把家里的 8096 端口直接暴露在公网,等于是在裸奔。
今天我们要用的 Cloudflare Tunnel,它是从你的 NAS 内部主动向 Cloudflare 建立一条加密隧道。不需要公网 IP,不需要开端口,甚至不需要防火墙放行,就能让外网访问回家。
🛠️ 准备工作
- 一个域名:必须托管在 Cloudflare 上。(几块钱买个
.xyz这种便宜后缀就行)。 - Cloudflare 账号:免费版足矣。
- Docker 环境:依然是在我们的 N100 小主机上操作。
🚀 部署步骤
第一步:创建隧道 (Web 端操作)
现在的 CF Tunnel 已经不需要复杂的配置文件了,全程网页点点点。
- 登录 Cloudflare Dashboard。
- 点击左侧侧边栏的 Zero Trust(第一次进需要填个团队名,随便填)。
- 在 Zero Trust 面板中,点击 Networks -> Tunnels。
- 点击 Create a tunnel。
- Connector type: 选择 Cloudflared。
- Name: 随便起,比如
Home-NAS。
- 保存后,你会看到一个“Install and run a connector”的界面。
第二步:Docker 部署连接器
在网页上选择 Docker 标签页,你会看到一行类似这样的命令:
bash
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...不要直接运行,我们把它转换成更优雅的 docker-compose.yml 管理。
在你的 VPS 或 NAS 上:
bash
mkdir -p /root/data/docker_data/tunnel
cd /root/data/docker_data/tunnel
nano docker-compose.yml写入内容:
yaml
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=你的超长TOKEN # 把网页上那串 eyJ 开头的粘贴到这里启动容器:
bash
docker compose up -d回到网页,如果下方的 Connectors 状态变为了绿色的 Connected,恭喜你,隧道打通了!
第三步:配置公网访问 (Public Hostname)
隧道通了,现在要把你的 Jellyfin 挂载上去。
- 在 Tunnel 详情页,点击 Public Hostname 标签 -> Add a public hostname。
- Subdomain: 填你想用的前缀,比如
movie。 - Domain: 选择你的域名。
- Service:
- Type:
HTTP - URL:
192.168.1.100:8096(填你 Jellyfin 的局域网 IP 和端口)
- 点击 Save hostname。
现在,断开 Wi-Fi,用 5G 访问 https://movie.你的域名.com。 见证奇迹的时刻:你应该能看到 Jellyfin 的登录界面了,而且自带 HTTPS 锁头!🔒
🔒 进阶:给 SSH 加上一把锁
暴露 Web 服务还算安全,但如果你想远程 SSH 连回家,直接暴露是非常危险的。我们可以利用 CF 的 Access 应用 加一层“网页验证”。
- 同样在 Tunnel 里添加一个 Hostname,比如
ssh.你的域名.com,指向SSH://192.168.1.100:22。 - 在 Zero Trust 面板 -> Access -> Applications -> Add an application。
- 选择 Self-hosted。
- Application domain: 填
ssh.你的域名.com。 - Identity providers: 选择 One-time PIN (邮箱验证码)。
- Policies: 设置规则,比如只允许
你的邮箱@gmail.com访问。
效果: 当你在浏览器访问 ssh.你的域名.com 时,CF 会拦截你,要求输入邮箱验证码。验证通过后,才会通过 Browser-based Rendering 让你在浏览器里直接用 SSH!这简直是运维神器。
⚡️ 优缺点分析
优点:
✅ 安全性无敌:隐藏真实 IP,自带 WAF 防火墙。
✅ 兼容性好:只要能上网就能穿透,不受宽带限制。
✅ 免费 HTTPS:自动申请证书,不用再搞 Let's Encrypt 了。
缺点:
❌ 速度限制:国内访问走的是 CF 的边缘节点,晚高峰可能会慢(看 1080P 没问题,4K 原盘可能会卡)。
❌ 协议限制:主要支持 HTTP/TCP,对 UDP 游戏联机支持一般。
🔗 下一步做什么?
Cloudflare Tunnel 适合“让别人访问你的服务”或者“简单的 Web 远程管理”。 但如果你想把公司电脑、手机和家里 NAS 组成一个虚拟局域网,让它们像在同一个 Wi-Fi 下一样互传文件、甚至玩局域网游戏,那么 Tailscale 才是真正的王者。