博客 / 详情

Cloudflare 内网穿透

2026.08.24
技术教程
3193 Words
- Views
- Comments

使用免费的 Cloudflare Tunnel,可以将内网中的服务安全地暴露到互联网,无需公网 IP,也不需要自己搭建服务器。

飞牛 NAS 本身也提供了 Cloudflare Tunnel 相关功能,不过个人感觉配置起来相对复杂一些,所以这里还是选择使用 Docker 来运行 cloudflared,配置更加简单,也方便后续迁移和管理。

优点:

  • 不需要备案
  • 不需要公网 IP
  • 不需要额外购买服务器
  • 自动提供 HTTPS
  • Docker 部署简单,迁移方便

缺点:

  • 国内访问速度可能不是特别快
  • 对带宽要求比较高的服务不太适合
  • 免费 Tunnel 更适合个人服务、管理面板等低至中等流量场景

对于 OpenList、Emby 管理页面、NAS 管理面板等服务来说,Cloudflare Tunnel 基本够用了。

Cloudflare 官网

准备工作

开始之前,需要准备以下东西:

  1. 注册一个 Cloudflare 账号
  2. 准备一个域名,并将域名托管到 Cloudflare
  3. 一台内网设备,例如飞牛 NAS、OpenWrt、Linux 服务器等
  4. 设备最好已经安装 Docker

Cloudflare 注册:

Cloudflare 注册页面

域名托管到 Cloudflare 的过程这里就不详细介绍了。

简单来说,就是在你的域名注册商后台,将域名的 DNS 服务器修改为 Cloudflare 提供的 DNS 服务器,然后按照 Cloudflare 的提示完成托管即可。

Cloudflare Tunnel

进入 Cloudflare Zero Trust 工作台。

选择左侧:

Zero Trust网络连接器

点击右上角的 创建隧道

选择 Cloudflared,然后填写一个隧道名称,例如:

NAS

保存之后,Cloudflare 会让你选择运行 cloudflared 的设备。

这里选择:

Docker

然后 Cloudflare 会生成一条类似下面这样的 Docker 命令:

Terminal window
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 等公开平台。

启动:

Terminal window
docker compose up -d

运行成功后,回到 Cloudflare Tunnel 页面。

如果看到连接器已经显示为 Healthy / 健康,说明 Tunnel 已经成功连接。

配置公网访问

继续下一步,进入 公共主机名 配置。

主机名

填写你希望使用的子域名。

例如:

openlist.example.com

如果希望直接使用根域名,则不填写子域名。

选择你已经托管到 Cloudflare 的域名,例如:

example.com

路径

一般保持为空即可。

服务

类型选择:

HTTP

URL 填写内网服务的地址,例如 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.com

Cloudflare 会通过 Tunnel 将公网请求转发到你内网中的:

127.0.0.1:5244

整个过程中:

互联网
Cloudflare
Cloudflare Tunnel
cloudflared
内网服务
OpenList :5244

最舒服的地方就在这里:

不需要公网 IP,不需要端口映射,不需要自己申请 HTTPS 证书,也不需要额外购买一台服务器。

大善人 Cloudflare 会帮你把 HTTPS、证书以及公网入口这些东西全部处理掉。

对于个人 NAS、OpenList、管理面板等服务来说,用 Cloudflare Tunnel 做内网穿透确实非常方便。

当然,如果你要通过它传输大量视频或者其他大文件,速度和流量限制就需要另外考虑了。毕竟:

免费的东西,能用是真的能用,但不能指望它当 CDN 用。 😄