前言
很多时候我们需要把本地服务器暴露到公网(比如让别人访问你的 Web 应用),但又不想直接暴露真实 IP,也不想花钱买付费隧道服务。Cloudflare Tunnel(cloudflared)是 Cloudflare 提供的免费内网穿透方案,无需注册、无警告页、开箱即用。
一、安装 cloudflared
Ubuntu / Debian
方法一:官方 apt 源(推荐)
# 添加 Cloudflare GPG 密钥
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
# 添加 apt 源
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bookworm main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
# 安装
sudo apt update && sudo apt install cloudflared -y
方法二:直接下载二进制文件
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
sudo mv cloudflared-linux-amd64 /usr/local/bin/cloudflared
sudo chmod +x /usr/local/bin/cloudflared
CentOS / RHEL / Fedora
sudo rpm -ivh https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
通用方式(任何 Linux 发行版)
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared
chmod +x /usr/local/bin/cloudflared
安装完成后验证:
cloudflared –version
二、快速启动隧道(临时模式)
假设你本地有一个 Web 服务运行在 80 端口:
cloudflared tunnel –url http://localhost:80
启动后终端会输出类似:
https://xxxx-yyyy-zzzz.trycloudflare.com
这个链接就是你的公网访问地址,任何人都可以通过它访问你本地的 80 端口服务。
常用端口示例
# 代理到 8080 端口
cloudflared tunnel –url http://localhost:8080
# 代理到 3000 端口(如 Node.js 应用)
cloudflared tunnel –url http://localhost:3000
# 代理到 8443(HTTPS 服务)
cloudflared tunnel –url https://localhost:8443 –no-tls-verify
三、后台运行
临时模式下关闭终端隧道就断了。可以用 nohup 后台运行:
nohup cloudflared tunnel –url http://localhost:80 > /tmp/cloudflared.log 2>&1 &
# 获取生成的公网地址
grep -oE 'https://[a-z0-9-]+\\.trycloudflare\\.com' /tmp/cloudflared.log
停止隧道:
pkill cloudflared
四、设置开机自启(systemd)
# 创建 systemd 服务
sudo tee /etc/systemd/system/cloudflared.service > /dev/null << 'EOF'
[Unit]
Description=Cloudflare Tunnel
After=network.target
[Service]
ExecStart=/usr/local/bin/cloudflared tunnel –url http://localhost:80
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
# 查看公网地址
sudo journalctl -u cloudflared –no-pager | grep -oE 'https://[a-z0-9-]+\\.trycloudflare\\.com' | head -1
五、固定域名(需要 Cloudflare 账号)
临时模式的域名每次重启都会变。如果你有自己的域名托管在 Cloudflare,可以配置固定域名:
# 1. 登录认证
cloudflared tunnel login
# 2. 创建隧道
cloudflared tunnel create my-tunnel
# 3. 配置路由
cloudflared tunnel route dns my-tunnel app.yourdomain.com
# 4. 创建配置文件
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: my-tunnel
ingress:
– hostname: app.yourdomain.com
service: http://localhost:80
– service: http_status:404
EOF
# 5. 启动
cloudflared tunnel run my-tunnel
这样域名就固定为 app.yourdomain.com,重启不变。
六、与 ngrok 对比
| 免费 | ✅ 完全免费 | ⚠️ 免费版有限制 |
| 警告页 | ✅ 无 | ⚠️ 有(免费版) |
| 需要注册 | ❌ 不需要 | ✅ 需要 |
| 临时域名 | 随机 | 随机 |
| 固定域名 | 需 Cloudflare 账号 | 需付费 |
| 速度 | 较快(Cloudflare CDN) | 一般(海外节点) |
| 国内可用性 | ✅ 良好 | ⚠️ 不稳定 |
七、常见问题
Q:域名是随机的,能记住吗?
临时模式不行,但可以用脚本记录每次生成的域名。
Q:支持 TCP 转发吗?
支持,但固定域名模式需要 Cloudflare 账号。临时模式只支持 HTTP。
Q:安全性如何?
流量经过 Cloudflare 的 CDN 网络,真实 IP 不会暴露,自带 DDoS 防护。
适用于个人项目演示、内网服务临时对外开放、不想暴露服务器 IP 等场景。
网硕互联帮助中心





评论前必须登录!
注册