技术指南

Cloudflare Tunnel 与 frp:如何选择内网访问方案

从信任边界、路由和访问控制比较 Cloudflare Tunnel 与 frp,并准备可验证的切换与回滚。

Cloudflare Tunnel 和 frp 都能把内网服务连接到外部入口,但信任模型不同。Tunnel 由 `cloudflared` 主动建立到 Cloudflare 的出站连接,再把公共主机名映射到本地服务;frp 通常需要自管公网 frps。选择前应先决定是否接受第三方边缘、是否需要非 HTTP 协议、谁控制公网端点,以及故障时怎样恢复管理入口。

按信任边界选择

维度Cloudflare Tunnel自管 frp
公网入口Cloudflare 网络与账号自有 frps 主机和公网地址
入站端口源站通常只需出站连接frps 需要明确开放控制与服务端口
访问控制可结合 Cloudflare Access需自行设计认证、TLS 与网络 ACL
运维责任账号、token、路由、cloudflared客户端、服务端、证书、防火墙与容量全部自管

部署前画清请求路径

  • 记录公共域名、隧道连接器、本地监听地址和最终应用四个节点。
  • 确认应用只监听需要的接口;同机服务优先回环地址,不默认监听 0.0.0.0。
  • 列出 WebSocket、上传大小、长连接、真实客户端 IP 和身份认证要求。
  • 保留独立的带外管理路径,不能让待配置的隧道成为唯一 SSH 入口。

Cloudflare Tunnel 的安全落点

Cloudflare 官方文档把 Tunnel 描述为出站连接,不要求给源站开放公共入站端口。创建 tunnel 后,将主机名路由到明确的本地服务,例如 `http://localhost:8080`。这不会自动让应用变成私有:公开 hostname 仍可能对互联网开放,需要按用途配置 Access、应用鉴权、WAF 和最小权限成员角色。

当本地上游使用 HTTPS 时,应设置与证书匹配的 `originServerName` 或可信 CA。Cloudflare 故障文档把 `noTLSVerify` 仅作为最后手段且不建议生产使用;不能为了消除 x509 错误长期关闭验证。

自管 frp 的额外责任

frps 所在主机成为新的公网边界。控制通道和暴露的服务端口应由云防火墙与主机防火墙双重限制,客户端与服务端版本要兼容,认证材料独立保存并轮换。不要把数据库、Docker API 或无鉴权管理面板直接映射到公网。HTTP 服务仍应通过 TLS 反向代理和应用认证。

从外到内验证

  • 从外部网络访问公共主机名,验证 TLS、身份策略、状态码和目标内容。
  • 从不受信账号或隐私窗口确认未授权请求确实被拒绝。
  • 扫描源站公网地址,确认旧端口已关闭且 DNS 历史暴露风险已处理。
  • 停止一个连接器观察告警和恢复;需要高可用时部署独立副本而非同一宿主机多个进程。
  • 检查日志中的真实客户端信息、敏感头部和 token 是否被正确处理。

回滚和故障分层

切换 DNS 或路由前保留旧入口但限制访问。故障时先区分隧道是否在线、`cloudflared`/frpc 能否访问本地服务、以及应用自身是否健康。Cloudflare 常见的 502 类问题可能表示隧道已连通但上游地址错误或服务未监听。回滚时移除新路由、恢复旧入口和防火墙规则,并轮换测试期间暴露的凭据。

返回知识库