为什么使用 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 | curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o ./cloudflared |
🔍 验证安装
安装成功后,运行以下命令查看版本号:
1 | cloudflared --version |
如果输出了版本信息(如 cloudflared version 2025.9.1),说明安装成功。
步骤二:授权 cloudflared 访问您的账户
这一步是为了让您服务器上的 cloudflared 程序能与您的 Cloudflare 账户关联起来。
1 | cloudflared tunnel login |
执行后,终端会显示一个 URL 链接:
- 复制这个链接到您的浏览器中打开。
- 登录您的 Cloudflare 账户。
- 选择您要使用的域名,点击授权。
授权成功后,您的服务器上会自动创建一个认证文件(默认为 /etc/.cloudflared/cert.pem 或 ~/.cloudflared/cert.pem),cloudflared 将依靠它来操作您的账户。
步骤三:创建并配置您的隧道
现在,我们将创建一个隧道,并配置它将您的域名指向您的本地服务。
1. 创建隧道
为您的隧道取一个名字(例如 my-website),然后执行:
1 | cloudflared tunnel create my-website |
终端会输出重要信息,请务必记下来:
1 | Created tunnel <my-website> with id a31dcf45-3c81-45f5-86b8-c68ab00d60c0 |
📌 关键信息:
- 隧道 ID (UUID):
a31dcf45-3c81-45f5-86b8-c68ab00d60c0 - 证书路径:
/root/.cloudflared/a31dcf45-3c81-45f5-86b8-c68ab00d60c0.json
2. 创建配置文件
接下来,创建 cloudflared 的主配置文件。
1 | sudo mkdir -p /etc/cloudflared |
将以下内容粘贴进去,并务必替换为您自己的信息:
tunnel: 替换为您上一步获得的隧道 ID。credentials-file: 替换为您上一步获得的证书路径。hostname: 替换为您自己的域名。service: 替换为您本地服务的地址和端口。
1 | # 隧道 ID,从 `tunnel create` 命令的输出中获取 |
配置完成后,验证一下配置文件是否正确:
1 | cloudflared tunnel ingress validate |
3. 绑定域名到隧道
执行以下命令,告诉 Cloudflare:“请将 your-domain.com 的流量通过 my-website 这个隧道进行传输”。
1 | cloudflared tunnel route dns my-website your-domain.com |
💡 如果 Cloudflare DNS 面板中已存在该域名的
A、AAAA或CNAME记录,此命令可能会失败。请先去面板删除旧的解析记录,再重新执行。
步骤四:启动隧道并设为开机自启
现在,我们将 cloudflared 安装为一个系统服务,让它在后台持续运行并能开机自启。
1 | # 将 cloudflared 安装为 systemd 服务 |
🚀 检查运行状态
1 | sudo systemctl status cloudflared |
如果看到 Active: active (running) 的绿色字样,恭喜您,隧道已经成功运行!
您还可以通过实时日志来观察隧道的连接情况:
1 | journalctl -u cloudflared -f |
步骤五:最终验证
- 访问您的域名:打开浏览器,输入
https://your-domain.com。 - 查看网站:如果能看到您本地服务器上的网站内容,说明一切配置成功!🎉
✨ 安全优化建议
- 强制 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 |