Cloudflare 内网穿透
目录索引
使用免费的 Cloudflare Tunnel,可以将内网中的服务安全地暴露到互联网,无需公网 IP,也不需要自己搭建服务器。
飞牛 NAS 本身也提供了 Cloudflare Tunnel 相关功能,不过个人感觉配置起来相对复杂一些,所以这里还是选择使用 Docker 来运行 cloudflared,配置更加简单,也方便后续迁移和管理。
优点:
- 不需要备案
- 不需要公网 IP
- 不需要额外购买服务器
- 自动提供 HTTPS
- Docker 部署简单,迁移方便
缺点:
- 国内访问速度可能不是特别快
- 对带宽要求比较高的服务不太适合
- 免费 Tunnel 更适合个人服务、管理面板等低至中等流量场景
对于 OpenList、Emby 管理页面、NAS 管理面板等服务来说,Cloudflare Tunnel 基本够用了。
准备工作
开始之前,需要准备以下东西:
- 注册一个 Cloudflare 账号
- 准备一个域名,并将域名托管到 Cloudflare
- 一台内网设备,例如飞牛 NAS、OpenWrt、Linux 服务器等
- 设备最好已经安装 Docker
Cloudflare 注册:
域名托管到 Cloudflare 的过程这里就不详细介绍了。
简单来说,就是在你的域名注册商后台,将域名的 DNS 服务器修改为 Cloudflare 提供的 DNS 服务器,然后按照 Cloudflare 的提示完成托管即可。
Cloudflare Tunnel
进入 Cloudflare Zero Trust 工作台。
选择左侧:
Zero Trust → 网络 → 连接器
点击右上角的 创建隧道。
选择 Cloudflared,然后填写一个隧道名称,例如:
NAS保存之后,Cloudflare 会让你选择运行 cloudflared 的设备。
这里选择:
Docker
然后 Cloudflare 会生成一条类似下面这样的 Docker 命令:
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token eyJhIjoiNjJhYxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdxxxxxxxxxxxAwWWpRM0xUbGxxxxxxxxxxxxxxxxxxxxxkzTlRCaCJ9直接复制这条命令,在你的 NAS 或 Docker 主机上运行即可。
使用 Docker Compose
相比直接运行 docker run,我更推荐使用 Docker Compose,后续管理和重启都会更加方便。
创建 docker-compose.yml:
services: cloudflared: image: cloudflare/cloudflared:latest container_name: cloudflared restart: always network_mode: host command: - tunnel - --no-autoupdate - run - --token - eyJhIjoiNjJhYxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdxxxxxxxxxxxAwWWpRM0xUbGxxxxxxxxxxxxxxxxxxxxxkzTlRCaCJ9注意:上面的 Token 只是示例,请使用 Cloudflare 控制台实际生成的 Token。不要把真实 Token 发布到博客、GitHub 等公开平台。
启动:
docker compose up -d运行成功后,回到 Cloudflare Tunnel 页面。
如果看到连接器已经显示为 Healthy / 健康,说明 Tunnel 已经成功连接。
配置公网访问
继续下一步,进入 公共主机名 配置。
主机名
填写你希望使用的子域名。
例如:
openlist.example.com如果希望直接使用根域名,则不填写子域名。
域
选择你已经托管到 Cloudflare 的域名,例如:
example.com路径
一般保持为空即可。
服务
类型选择:
HTTPURL 填写内网服务的地址,例如 OpenList:
127.0.0.1:5244如果 cloudflared 使用的是 network_mode: host,并且 OpenList 与 cloudflared 运行在同一台主机上,那么这里使用 127.0.0.1:5244 就可以。
如果 OpenList 在另一个 Docker 容器中,则不要直接使用 127.0.0.1,需要根据 Docker 网络情况填写对应的容器名或内网 IP,例如:
http://openlist:5244或者:
http://192.168.1.100:5244具体取决于你的 Docker 网络配置。
配置完成后保存。
完成
现在访问:
https://openlist.example.comCloudflare 会通过 Tunnel 将公网请求转发到你内网中的:
127.0.0.1:5244整个过程中:
互联网 ↓Cloudflare ↓Cloudflare Tunnel ↓cloudflared ↓内网服务 ↓OpenList :5244最舒服的地方就在这里:
不需要公网 IP,不需要端口映射,不需要自己申请 HTTPS 证书,也不需要额外购买一台服务器。
大善人 Cloudflare 会帮你把 HTTPS、证书以及公网入口这些东西全部处理掉。
对于个人 NAS、OpenList、管理面板等服务来说,用 Cloudflare Tunnel 做内网穿透确实非常方便。
当然,如果你要通过它传输大量视频或者其他大文件,速度和流量限制就需要另外考虑了。毕竟:
免费的东西,能用是真的能用,但不能指望它当 CDN 用。 😄