云计算百科
云计算领域专业知识百科平台

Linux 服务器使用 Cloudflare Tunnel 免费内网穿透教程

前言

很多时候我们需要把本地服务器暴露到公网(比如让别人访问你的 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 对比

特性cloudflaredngrok
免费 ✅ 完全免费 ⚠️ 免费版有限制
警告页 ✅ 无 ⚠️ 有(免费版)
需要注册 ❌ 不需要 ✅ 需要
临时域名 随机 随机
固定域名 需 Cloudflare 账号 需付费
速度 较快(Cloudflare CDN) 一般(海外节点)
国内可用性 ✅ 良好 ⚠️ 不稳定

七、常见问题

Q:域名是随机的,能记住吗?

临时模式不行,但可以用脚本记录每次生成的域名。

Q:支持 TCP 转发吗?

支持,但固定域名模式需要 Cloudflare 账号。临时模式只支持 HTTP。

Q:安全性如何?

流量经过 Cloudflare 的 CDN 网络,真实 IP 不会暴露,自带 DDoS 防护。


适用于个人项目演示、内网服务临时对外开放、不想暴露服务器 IP 等场景。

赞(0)
未经允许不得转载:网硕互联帮助中心 » Linux 服务器使用 Cloudflare Tunnel 免费内网穿透教程
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!