Cloudflare Tunnel 零基础部署指南:让你的 NAS 服务安全暴露到互联网

本文详细介绍如何使用 Cloudflare Tunnel 将本地服务(如博客、导航页)安全地暴露到互联网,无需公网 IP,无需担心端口暴露风险。

1. 什么是 Cloudflare Tunnel?

1.1 传统暴露服务的痛点

传统方式将服务暴露到互联网通常需要:

  • 公网 IP:需要向运营商申请,部分用户无法获取
  • 端口映射:在路由器上配置,存在安全风险
  • 动态 DNS:网络变化时需要更新解析记录
  • 防火墙规则:需要手动配置和维护

1.2 Cloudflare Tunnel 的优势

Cloudflare Tunnel 是一种反向代理技术,它可以:

优势说明
无需公网 IP通过 Cloudflare 的网络中转流量
零端口暴露不需要在路由器上开放任何端口
自动 HTTPS所有流量自动使用 SSL 加密
防火墙友好只需要在防火墙开放 Cloudflare IP
免费使用Cloudflare Tunnel 完全免费
穿透 NAT完美解决 NAT 环境下的服务暴露问题

1.3 工作原理

用户浏览器
    ↓ HTTPS
Cloudflare 全球网络
    ↓ 安全隧道
Cloudflare Tunnel (cloudflared)
    ↓ localhost
你的本地服务 (NAS 上的博客)

1.4 什么是 Docker?

Docker 是一种容器化技术,可以让开发者将应用程序及其依赖打包成一个独立的单元,确保应用在任何环境下都能一致运行。

核心概念

概念说明
镜像(Image)应用程序的模板,包含代码、运行时环境、配置文件等
容器(Container)镜像的运行实例,可以启动、停止、删除
仓库(Repository)存储和分发镜像的地方,如 Docker Hub

容器 vs 虚拟机

对比项容器虚拟机
启动速度秒级分钟级
资源占用极低(MB 级)较高(GB 级)
隔离性进程级隔离完全隔离
体积几十 MB几百 MB 到几 GB

常用命令

# 拉取镜像
docker pull cloudflare/cloudflared:latest

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止)
docker ps -a

# 启动容器
docker start <容器名>

# 查看容器日志
docker logs -f <容器名>

# 删除容器
docker rm <容器名>

1.5 什么是反向代理?

在了解 Cloudflare Tunnel 之前,我们需要先理解反向代理的概念。

正向代理 vs 反向代理

类型正向代理反向代理
作用对象客户端(代客户端请求)服务端(代服务端响应)
典型用途翻墙、缓存、访问控制负载均衡、安全防护、SSL 终结
客户端感知客户端知道代理存在客户端不知道代理存在
代表软件Squid、V2RayNginx、Caddy、Cloudflare

工作流程对比

正向代理(翻墙原理)

用户浏览器 → [正向代理服务器] → 目标网站
   ↑                              ↓
   └────────── 代理返回 ──────────┘

反向代理(Cloudflare Tunnel 原理)

用户浏览器 → [Cloudflare 反向代理] → 你的本地服务
              ↓ 加密隧道
           cloudflared

Cloudflare Tunnel 的定位

Cloudflare Tunnel 本质上是一个反向代理,但与传统反向代理不同的是:

  • 传统反向代理需要你有公网服务器
  • Cloudflare Tunnel 让 Cloudflare 成为你的反向代理
  • 你只需在本地运行一个 cloudflared 客户端

1.6 DNS 基础概念

DNS(Domain Name System)是互联网的 "电话簿",负责将域名转换为 IP 地址。

域名解析流程

当你访问 blog.example.com 时:

1. 浏览器查询本地 DNS 缓存
2. 若无缓存,向 DNS 服务器发起请求
3. DNS 服务器查询根域名服务器
4. 逐级查询直到找到 example.com 的 DNS 服务器
5. DNS 服务器返回 blog.example.com 对应的 IP 地址
6. 浏览器使用该 IP 地址建立连接

DNS 记录类型

记录类型说明示例
A 记录域名指向 IPv4 地址blog.example.com192.0.2.1
AAAA 记录域名指向 IPv6 地址blog.example.com2001:db8::1
CNAME 记录域名指向另一个域名www.example.comexample.com
TXT 记录用于验证和 SPF用于域名所有权验证

Cloudflare Tunnel 的 DNS 配置

使用 Cloudflare Tunnel 时,你需要在 Cloudflare DNS 中添加:

记录类型名称内容
CNAMEblog@(代理到 Cloudflare)
CNAMEblog隧道服务的特殊指向

📝 注意:Cloudflare Tunnel 的 DNS 配置由 Cloudflare Zero Trust 自动管理,你只需在仪表板中添加路由即可。

2. 环境准备

2.1 硬件要求

配置级别CPU内存说明
最低配置1 核256 MB仅隧道基础功能
推荐配置1 核512 MB稳定运行,有余量

📝 注意:Cloudflare Tunnel 本身资源占用极低,256MB 完全足够。

2.2 软件要求

  • Docker 和 Docker Compose 已安装
  • Cloudflare 账号
  • 已托管到 Cloudflare 的域名(可选,但推荐)

2.3 NAS 环境说明

本文以绿联 NAS(DXP2800)为例说明,其他品牌 NAS(群晖、威联通、极空间等)可参考。

2.4 安装 Docker(NAS)

在使用 Docker 部署 Cloudflare Tunnel 之前,需要先在 NAS 上安装 Docker。

绿联 NAS 安装 Docker

  1. 打开 应用中心
  2. 搜索 DockerDocker Compose
  3. 点击安装
  4. 安装完成后,可以在"应用"中找到 Docker 管理界面

📝 注意:绿联 DXP2800 基于 Debian 系统,安装 Docker 后可以通过 SSH 使用完整的 Docker 命令。

群晖 Synology 安装 Docker

  1. 打开 套件中心
  2. 搜索 Docker
  3. 点击安装
  4. 安装完成后,在主菜单中找到 Docker

极空间 安装 Docker

  1. 打开应用商店
  2. 搜索 Docker
  3. 点击安装
  4. 在"应用"中找到 Docker

Docker 安装检查

安装完成后,通过 SSH 或终端验证 Docker 是否正常工作:

# 检查 Docker 版本
docker --version

# 检查 Docker Compose 版本(V2)
docker compose version

# 查看 Docker 信息
docker info

Docker Compose 安装说明

大多数 NAS 的 Docker 套件已包含 Docker Compose(V2)。如果你的版本较旧,可能需要单独安装:

# 验证 Docker Compose
docker compose version

# 如果显示 command not found,可以手动安装
# 或使用 docker-compose(V1)命令
docker-compose --version

2.5 准备 Cloudflare 账号

在使用 Cloudflare Tunnel 之前,需要一个 Cloudflare 账号。

注册 Cloudflare 账号

  1. 访问 Cloudflare 官网
  2. 输入你的邮箱地址
  3. 设置密码
  4. 验证邮箱后完成注册

添加域名到 Cloudflare

  1. 登录 Cloudflare Dashboard
  2. 点击右上角 Add a Site
  3. 输入你的域名(如 example.com
  4. 选择套餐(免费版足够使用 Cloudflare Tunnel)
  5. 按照提示修改域名的 DNS 服务器

修改域名 DNS 服务器

Cloudflare 会提供两个 DNS 服务器地址,你需要到你的域名注册商处修改:

注册商修改位置
阿里云域名控制台 → 管理 → DNS 修改
腾讯云DNSPod → 域名管理 → 设置 DNS
GoDaddyMy Products → DNS → Manage

修改后,等待 24-48 小时生效。可以通过以下方式验证:

# 使用 dig 命令查看 DNS 解析
dig NS yourdomain.com

# 或使用在线工具
# https://www.whatsmydns.net/

获取 Cloudflare Zero Trust 访问权限

Cloudflare Tunnel 需要通过 Cloudflare Zero Trust 访问:

  1. 访问 Cloudflare Zero Trust
  2. 使用你的 Cloudflare 账号登录
  3. 首次登录可能需要设置团队名称(Team Name)

📝 注意:即使你没有自己的域名,也可以使用 Cloudflare 的免费隧道服务,但功能会有所限制。

3. 创建 Cloudflare Tunnel

3.1 登录 Cloudflare Zero Trust

  1. 访问 Cloudflare Zero Trust
  2. 使用 Cloudflare 账号登录
  3. 进入 NetworksTunnels

3.2 创建新隧道

  1. 点击 Create a tunnel
  2. 选择隧道类型:Cloudflared
  3. 输入隧道名称(如 my-tunnel
  4. 保存隧道 Token(后续会用到)

3.3 配置隧道路由

创建隧道后,需要配置哪些服务通过隧道暴露:

配置项说明
Public hostname你想暴露的域名,如 blog.example.com
Service本地服务地址,如 http://localhost:8090

4. Docker Compose 部署

4.1 目录结构

cloudflared/
├── docker-compose.yaml   # 主配置文件
├── .env                  # 环境变量(Token 配置)
└── .gitignore            # Git 忽略配置

4.2 创建 .env 文件

# Cloudflare Tunnel Token 配置
# 请勿将此文件提交到版本控制系统

# 隧道 Token(从 Cloudflare Zero Trust 获取)
TUNNEL_TOKEN=你的隧道Token

4.3 创建 docker-compose.yaml

version: '3.8'

# Cloudflare Tunnel 隧道配置
x-cloudflared_defaults: &cloudflared_defaults
  image: cloudflare/cloudflared:latest
  network_mode: host  # 必须使用 host 模式
  restart: always
  command:
    - tunnel
    - --no-autoupdate
    - --protocol=http2
    - --edge-ip-version=4
    - run
  logging:
    driver: json-file
    options:
      max-size: "10m"
      max-file: "3"
  healthcheck:
    test: ["CMD", "cloudflared", "tunnel", "info"]
    interval: 60s
    timeout: 10s
    retries: 3
  mem_limit: 128m
  cpus: 0.5

services:
  # Cloudflare Tunnel 服务
  cloudflared:
    <<: *cloudflared_defaults
    container_name: cloudflared
    env_file:
      - .env
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN}

4.4 创建 .gitignore

# 敏感文件
.env
*.log

4.5 部署命令

# 进入目录
cd /path/to/cloudflared

# 启动服务
docker compose up -d

# 查看状态
docker compose ps

# 查看日志
docker compose logs -f

# 重启服务
docker compose restart

5. 多服务管理

如果需要暴露多个服务,可以配置多个隧道或使用一个隧道管理多个路由。

5.1 多隧道方式

services:
  # 博客服务隧道
  cloudflared-blog:
    <<: *cloudflared_defaults
    container_name: cloudflared-blog
    env_file:
      - .env
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN_BLOG}

  # 导航服务隧道
  cloudflared-nav:
    <<: *cloudflared_defaults
    container_name: cloudflared-nav
    env_file:
      - .env
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN_NAV}

5.2 .env 文件配置

# 博客服务隧道 Token
TUNNEL_TOKEN_BLOG=你的博客隧道Token

# 导航服务隧道 Token
TUNNEL_TOKEN_NAV=你的导航隧道Token

6. 性能优化

6.1 资源限制说明

配置项说明
mem_limit128m防止内存泄漏影响宿主机
cpus0.5限制 CPU 占用
max-size10m单个日志文件最大 10MB
max-file3最多保留 3 个日志文件

6.2 网络协议选择

command:
  - --protocol=http2    # 推荐:HTTP/2 协议,性能更好
  # 或
  - --protocol=h2mux    # 备选:基于 mux 的协议

6.3 IP 版本选择

command:
  - --edge-ip-version=4  # 仅 IPv4(推荐,大部分网络环境)
  # 或
  - --edge-ip-version=auto  # 自动选择(IPv4/IPv6)

7. 故障排查

7.1 隧道无法连接

检查日志

docker compose logs -f cloudflared

常见错误

错误信息原因解决方法
TUNNEL_TOKEN missingToken 未配置检查 .env 文件
connection refused本地服务未启动启动本地服务
unauthorizedToken 无效重新获取 Token

7.2 服务无法访问

检查步骤

# 1. 确认隧道状态
docker compose ps

# 2. 检查本地服务
curl http://localhost:8090

# 3. 查看 Cloudflare 仪表板
# Networks → Tunnels → 查看连接状态

7.3 性能问题

优化建议

问题解决方案
访问慢检查 Cloudflare 边缘节点距离
连接不稳定尝试更换 --protocol
频繁断开检查本地网络稳定性

8. 安全建议

8.1 网络安全

措施说明
使用 Cloudflare Access添加身份验证(可选)
限制来源 IP使用 Cloudflare Firewall Rules
启用 2FACloudflare 账号启用双因素认证

8.2 隧道安全

措施说明
定期轮换 Token定期更换隧道 Token
最小权限原则只暴露必要的服务
监控日志定期检查异常访问

8.3 容器安全

措施说明
资源限制限制内存和 CPU
日志管理防止日志撑满磁盘
定期更新及时更新 cloudflared 镜像

9. 常见应用场景

9.1 博客系统

适用于 Halo、WordPress、Typecho 等博客系统:

services:
  cloudflared-blog:
    <<: *cloudflared_defaults
    container_name: cloudflared-blog
    env_file:
      - .env
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN_BLOG}

9.2 导航页

适用于 Heimdall、Dashboard 等导航页面:

services:
  cloudflared-nav:
    <<: *cloudflared_defaults
    container_name: cloudflared-nav
    env_file:
      - .env
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN_NAV}

9.3 NAS 管理界面

适用于绿联、群晖、威联通等 NAS 管理界面:

services:
  cloudflared-nas:
    <<: *cloudflared_defaults
    container_name: cloudflared-nas
    env_file:
      - .env
    environment:
      - TUNNEL_TOKEN=${TUNNEL_TOKEN_NAS}

10. 总结

10.1 部署要点

步骤操作
1. 创建隧道在 Cloudflare Zero Trust 创建
2. 配置 Token写入 .env 文件
3. 部署服务docker compose up -d
4. 验证连接检查日志和访问状态

10.2 优势回顾

  • ✅ 无需公网 IP
  • ✅ 零端口暴露
  • ✅ 自动 HTTPS
  • ✅ 免费使用
  • ✅ 稳定可靠

10.3 注意事项

  • 请勿将 Token 提交到版本控制
  • 定期更新 cloudflared 镜像
  • 监控资源使用情况
  • 保持配置文件备份

延伸阅读


本文由人工智能协会整理
2026 年 3 月