用Cloudflare Tunnel免端口暴露内网服务:零成本内网穿透方案详解
传统的服务器部署方式需要在防火墙上开放 80/443 端口,真实 IP 暴露给全网扫描。而内网穿透场景(如将本地开发服务、家庭 NAS、内部管理后台暴露到公网)往往需要购买中转服务器或付费的穿透服务。Cloudflare Tunnel 提供了一个完全不同的思路:服务器主动向 Cloudflare 建立出站隧道,不需要开放任何入站端口,安全性大幅提升,且完全免费。本文提供完整的配置实战教程。
一、Cloudflare Tunnel 的工作原理
传统方式:用户 → 公网IP:443 → 服务器(需要开放入站端口,IP 暴露)
Cloudflare Tunnel 方式:
用户 → Cloudflare CDN → Tunnel(出站连接) → 服务器本地端口
核心差别:服务器上运行的 cloudflared 守护进程主动向 Cloudflare 发起出站连接建立隧道。用户的请求经过 Cloudflare 后,通过这条隧道传递到服务器。整个过程中:
- 服务器不需要开放任何入站端口(80、443 都可以关闭)
- 服务器真实 IP 完全隐藏在 Cloudflare 背后
- 自动获得 HTTPS 和 DDoS 防护(Cloudflare 处理)
- 完全免费(Cloudflare Zero Trust 免费套餐包含 Tunnel 功能)
二、适用场景
- 🏠 内网穿透:将家庭 NAS、本地开发服务器、树莓派等暴露到公网,无需公网 IP
- 🔒 隐藏真实 IP:防止服务器 IP 被 DDoS 攻击者直接发现
- 🛠️ 本地开发预览:将 localhost 上的开发中应用临时暴露给客户演示
- 🖥️ 内部管理后台安全访问:结合 Cloudflare Access,只允许特定用户访问后台
- 🚀 无需配置 Nginx/SSL:Cloudflare 自动处理 HTTPS,简化部署流程
三、前置条件
- 一个已托管在 Cloudflare 的域名(免费注册 Cloudflare 账号后添加域名即可)
- 服务器或本地机器(Linux/macOS/Windows 均支持)
- 服务器上运行的 Web 服务(如 Nginx 监听 3000 端口的 Node.js 应用)
四、安装 cloudflared
Linux(Ubuntu/Debian)
# 添加 Cloudflare APT 仓库
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# 验证安装
cloudflared --versionmacOS
brew install cloudflaredWindows
从 Cloudflare 官方 GitHub Releases 页面下载 cloudflared-windows-amd64.exe,重命名为 cloudflared.exe 并添加到 PATH。
五、方法一:命令行快速创建临时隧道(无需登录,适合开发调试)
# 将本地 3000 端口临时暴露到公网(生成随机 trycloudflare.com 子域名)
cloudflared tunnel --url http://localhost:3000命令运行后会输出一个类似 https://random-name.trycloudflare.com 的公网地址,任何人都可以通过这个地址访问你本地 3000 端口的服务。按 Ctrl+C 停止后链接失效。
这个方式无需 Cloudflare 账号,无需域名,适合临时演示或测试。
六、方法二:创建持久化命名隧道(生产环境推荐)
Step 1:登录 Cloudflare 账号
cloudflared tunnel login
# 会在浏览器打开 Cloudflare 授权页面,完成授权后证书保存到本地Step 2:创建命名隧道
# 创建一个名为 "my-server" 的隧道
cloudflared tunnel create my-server
# 输出示例:
# Created tunnel my-server with id abc123de-xxxx-xxxx-xxxx-xxxxxxxxxxxx记录输出的隧道 ID(UUID格式),后续配置会用到。
Step 3:创建隧道配置文件
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.ymltunnel: abc123de-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 你的隧道ID
credentials-file: /root/.cloudflared/abc123de-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
ingress:
# 规则一:将 app.yourdomain.com 路由到本地 3000 端口
- hostname: app.yourdomain.com
service: http://localhost:3000
# 规则二:将 admin.yourdomain.com 路由到本地 8080 端口
- hostname: admin.yourdomain.com
service: http://localhost:8080
# 规则三:将 static.yourdomain.com 路由到本地文件(静态文件服务)
# - hostname: static.yourdomain.com
# service: http://localhost:9000
# 默认规则(必须存在,处理不匹配的请求)
- service: http_status:404Step 4:在 Cloudflare DNS 中添加 CNAME 记录
# 自动创建 DNS CNAME 记录(推荐)
cloudflared tunnel route dns my-server app.yourdomain.com
cloudflared tunnel route dns my-server admin.yourdomain.com或者手动在 Cloudflare DNS 面板添加:app.yourdomain.com → CNAME → abc123de-xxxx-xxxx-xxxx-xxxxxxxxxxxx.cfargotunnel.com
Step 5:启动隧道
# 测试启动(前台运行,可以看到日志)
cloudflared tunnel run my-server
# 访问 https://app.yourdomain.com 测试是否正常七、设置 cloudflared 为系统服务(开机自启)
# 安装为 systemd 服务
sudo cloudflared service install
# 启动服务
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
# 查看运行状态
sudo systemctl status cloudflared设置完成后,服务器重启后隧道会自动重新建立连接,无需人工干预。
八、进阶:结合 Cloudflare Access 保护内部服务
Cloudflare Access 可以为通过 Tunnel 暴露的服务添加访问控制,只有通过身份验证的用户才能访问:
- 登录 Cloudflare Zero Trust 控制台(
one.dash.cloudflare.com) - 进入 Access → Applications → Add an application
- 选择 "Self-hosted",填写你的应用 URL(如
admin.yourdomain.com) - 配置访问策略:允许指定邮箱域名(如只允许
@yourcompany.com邮箱登录) - 用户访问时,Cloudflare 会要求发送验证码到邮箱,验证通过后才能访问
这个方案特别适合将后台管理页面(如 Grafana、phpMyAdmin、内部工具)安全暴露,无需 VPN,任何地方通过浏览器即可访问,但只有授权用户才能通过验证。
九、常见问题排查
隧道无法建立连接
# 检查 cloudflared 日志
sudo journalctl -u cloudflared -n 50
# 测试 cloudflared 能否连接 Cloudflare
cloudflared tunnel ingress validate访问显示 502 Bad Gateway
说明隧道建立成功,但本地服务未运行或端口错误。检查:
# 确认本地服务正在运行
ss -tlnp | grep 3000 # 检查 3000 端口是否在监听HTTPS 证书问题
Cloudflare Tunnel 自动处理 HTTPS,你的本地服务只需用 HTTP 即可,Cloudflare 会在边缘自动加密。
总结
Cloudflare Tunnel 是目前最优雅的内网穿透和 IP 隐藏方案,核心优势:
- 🔒 零端口暴露:服务器防火墙可以完全关闭入站端口
- 🌐 自动 HTTPS:无需申请 SSL 证书,Cloudflare 自动处理
- 🛡️ DDoS 防护:流量经过 Cloudflare 清洗,真实 IP 隐藏
- 💰 完全免费:Cloudflare Zero Trust 免费套餐足够大多数场景使用
无论是部署在后浪云香港云服务器上的生产服务,还是本地开发环境,Cloudflare Tunnel 都是提升安全性和访问便利性的绝佳工具。
