Cloudflare Tunnel 部署教程

为什么使用 Cloudflare Tunnel?

您是否想把家中的电脑、树莓派或办公室的内部服务器变成一个能从外网访问的网站,但却没有公网 IP,或者端口被运营商封锁了?

Cloudflare Tunnel 就是解决这个问题的完美方案。它就像一条从您的设备直达 Cloudflare 全球网络的加密通道,让您可以:

  • 无需公网 IP:在任何网络环境下发布您的服务。
  • 零端口暴露:无需在路由器或防火墙上开放任何端口,极大提升安全性。
  • 自动 HTTPS:Cloudflare 会自动为您的域名提供并续期 SSL 证书。
  • 稳定可靠:服务由 Cloudflare 官方支持,能自动重连并可设置为开机启动。

本教程将带您一步步完成 Cloudflare Tunnel 的部署,最终通过自己的域名 https://your-domain.com 访问到您本地的网站服务。


准备工作

在开始之前,请确保您已具备以下条件:

项目 说明
一台服务器 您要对外提供服务的本地计算机,可以是任何 Linux 主机。
一个域名 域名必须已经添加到您的 Cloudflare 账户中进行管理。
本地服务 确保您要穿透的服务(如 Nginx、Wordpress、Node.js 应用)已在本地正常运行。

💡 本地服务检查

在您的服务器上执行以下命令,检查本地网站是否能访问(以 Nginx 的默认端口 80 为例):

1
curl -I http://127.0.0.1

如果返回的响应中包含 HTTP/1.1 200 OK,说明您的本地服务已准备就绪。


步骤一:安装 cloudflared 客户端

cloudflared 是控制 Cloudflare Tunnel 的核心程序。我们需要在您的服务器上安装它。

对于MACOS系统:
使用Homebrew安装:

1
brew install cloudflared

对于Linux系统:
在Linux上,可以直接下载二进制文件,并给以可执行权限,比如安装amd64版本:

1
2
3
curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o ./cloudflared

chmod +x ./cloudflared

🔍 验证安装

安装成功后,运行以下命令查看版本号:

1
cloudflared --version

如果输出了版本信息(如 cloudflared version 2025.9.1),说明安装成功。


步骤二:授权 cloudflared 访问您的账户

这一步是为了让您服务器上的 cloudflared 程序能与您的 Cloudflare 账户关联起来。

1
cloudflared tunnel login

执行后,终端会显示一个 URL 链接:

  1. 复制这个链接到您的浏览器中打开。
  2. 登录您的 Cloudflare 账户。
  3. 选择您要使用的域名,点击授权。

授权成功后,您的服务器上会自动创建一个认证文件(默认为 /etc/.cloudflared/cert.pem~/.cloudflared/cert.pem),cloudflared 将依靠它来操作您的账户。


步骤三:创建并配置您的隧道

现在,我们将创建一个隧道,并配置它将您的域名指向您的本地服务。

1. 创建隧道

为您的隧道取一个名字(例如 my-website),然后执行:

1
cloudflared tunnel create my-website

终端会输出重要信息,请务必记下来

1
2
Created tunnel <my-website> with id a31dcf45-3c81-45f5-86b8-c68ab00d60c0
Tunnel credentials written to /root/.cloudflared/a31dcf45-3c81-45f5-86b8-c68ab00d60c0.json

📌 关键信息

  • 隧道 ID (UUID): a31dcf45-3c81-45f5-86b8-c68ab00d60c0
  • 证书路径: /root/.cloudflared/a31dcf45-3c81-45f5-86b8-c68ab00d60c0.json

2. 创建配置文件

接下来,创建 cloudflared 的主配置文件。

1
2
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml

将以下内容粘贴进去,并务必替换为您自己的信息

  • tunnel: 替换为您上一步获得的隧道 ID
  • credentials-file: 替换为您上一步获得的证书路径
  • hostname: 替换为您自己的域名
  • service: 替换为您本地服务的地址和端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 隧道 ID,从 `tunnel create` 命令的输出中获取
tunnel: a31dcf45-3c81-45f5-86b8-c68ab00d60c0
# 证书文件路径,同样从 `tunnel create` 的输出中获取
credentials-file: /root/.cloudflared/a31dcf45-3c81-45f5-86b8-c68ab00d60c0.json

# Ingress 规则定义了流量如何被路由
ingress:
# 规则一:将主域名指向本地的 80 端口
- hostname: your-domain.com
service: http://localhost:80

# 规则二:将 www 子域名也指向本地的 80 端口
- hostname: www.your-domain.com
service: http://localhost:80

# 规则三(可选):将其他子域名指向不同的本地服务
- hostname: admin.your-domain.com
service: http://localhost:8080

# 规则四:所有其他未匹配的访问都将返回 404 错误
- service: http_status:404

配置完成后,验证一下配置文件是否正确:

1
cloudflared tunnel ingress validate

3. 绑定域名到隧道

执行以下命令,告诉 Cloudflare:“请将 your-domain.com 的流量通过 my-website 这个隧道进行传输”。

1
2
cloudflared tunnel route dns my-website your-domain.com
cloudflared tunnel route dns my-website www.your-domain.com

💡 如果 Cloudflare DNS 面板中已存在该域名的 AAAAACNAME 记录,此命令可能会失败。请先去面板删除旧的解析记录,再重新执行。


步骤四:启动隧道并设为开机自启

现在,我们将 cloudflared 安装为一个系统服务,让它在后台持续运行并能开机自启。

1
2
3
4
5
# 将 cloudflared 安装为 systemd 服务
sudo cloudflared service install

# 启动服务并设置开机自启
sudo systemctl enable --now cloudflared

🚀 检查运行状态

1
sudo systemctl status cloudflared

如果看到 Active: active (running) 的绿色字样,恭喜您,隧道已经成功运行!

您还可以通过实时日志来观察隧道的连接情况:

1
journalctl -u cloudflared -f

步骤五:最终验证

  1. 访问您的域名:打开浏览器,输入 https://your-domain.com
  2. 查看网站:如果能看到您本地服务器上的网站内容,说明一切配置成功!🎉

✨ 安全优化建议

  • 强制 HTTPS:在 Cloudflare 仪表板 SSL/TLS -> 边缘证书 页面,开启 始终使用 HTTPS
  • 严格加密模式:在同一页面,将 SSL/TLS 加密模式设置为 Full (Strict),确保从访客到 Cloudflare、再到您服务器的全程流量加密。

附录:常用命令参考

功能 命令
登录账户 cloudflared tunnel login
创建隧道 cloudflared tunnel create <隧道名称>
查看隧道列表 cloudflared tunnel list
删除隧道 cloudflared tunnel delete <隧道名称>
绑定域名 cloudflared tunnel route dns <隧道名称> <域名>
启动服务 sudo systemctl start cloudflared
停止服务 sudo systemctl stop cloudflared
查看实时日志 journalctl -u cloudflared -f