用 Cloudflare Tunnel 在端口被封的 VPS 上搭建代理

买了一台海外 VPS 想做代理,结果发现提供商把 22、443、8443 等所有常用入站端口全封了。常规的 Xray 直连方案彻底行不通——Cloudflare 回源返回 522,SSH 直连超时。

折腾了大半天,最终用 Cloudflare Tunnel 完美解决。这篇文章记录完整过程和踩过的坑。

说明:文中部分关键参数已做打码处理,输入密码后可查看明文。

问题:端口全封

最开始用 Xray + VLESS + WebSocket + TLS 的经典方案:

客户端 → Cloudflare(443) → VPS(443) → Xray

部署完 Xray,本地一切正常,但通过 Cloudflare 访问 始终返回 HTTP 522(Cloudflare 连不上源站)。

排查发现:

端口直连测试结果
22 (SSH)Test-NetConnection超时
443 (HTTPS)curl522
8443Test-NetConnection超时

服务器内部防火墙全部放行,但机房层面的入站过滤把所有端口都拦了。换非标准端口也没用。

解决方案:Cloudflare Tunnel

Cloudflare Tunnel 的核心思路是反转连接方向

  • 传统方案:Cloudflare 主动连接 VPS(需要入站端口开放)
  • Tunnel 方案:VPS 主动连接 Cloudflare(不需要任何入站端口)
客户端 → Cloudflare 边缘 ← Tunnel(主动外连) ← VPS cloudflared → Xray(本地)

VPS 上的 cloudflared 进程向 Cloudflare 发起出站连接(QUIC 协议),建立隧道。所有流量通过这条隧道双向传输,完全不需要 VPS 开放入站端口。

部署步骤

  1. 安装 cloudflared
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
dpkg -i cloudflared.deb
  1. 登录授权
cloudflared tunnel login

会输出一个 URL,在浏览器打开并选择域名授权。

  1. 创建隧道并配置 DNS
cloudflared tunnel create 
  


cloudflared tunnel route dns 
  

 
   
 

注意:如果域名已有 A 记录,需要先删除,否则 DNS 路由会失败。

  1. 配置 ingress 规则
tunnel: 
  


credentials-file: 
  



ingress:
  - hostname: 
  


    service: http://127.0.0.1:443
  - service: http_status:404
  1. Xray 改为本地监听

Xray 不再需要 TLS 和对外端口,改为监听 127.0.0.1:443,cloudflared 会把流量转发过来。

  1. 设置开机自启
cloudflared service install
systemctl enable cloudflared xray

踩过的坑

  1. 配置文件路径cloudflared service install 后,systemd 读取的是 ,不是 。改错文件会导致配置不生效,表现为 websocket: bad handshake

  2. flow 与 WebSocket 不兼容xtls-rprx-vision 是为 raw TCP + TLS 设计的,WebSocket 模式下必须不带 flow,否则协议不匹配客户端连不上。

  3. 证书权限:私钥 设为 600 时 Xray 服务用户读不了,需要改为 644。

  4. 订阅流量显示:Clash Verge 从 HTTP 响应头 Subscription-Userinfo 读取流量信息,不是从 yaml 文件注释读。Python 订阅服务需要把流量信息写入响应头。

最终架构

Clash Verge (订阅: 
  

)
    ↓ VLESS+WS+TLS:443
Cloudflare 边缘 (
  

)
    ↓ Tunnel (QUIC)
VPS cloudflared
    ├─ 
  

  → Python 
  

 (订阅服务)
    ├─ 
  

 → Xray 443 (代理)
    └─ 
  

 → SSH 
  


总结

当 VPS 入站端口被机房封锁时,Cloudflare Tunnel 是最优雅的解决方案:

  • 不需要任何入站端口
  • 不需要 TLS 证书(Tunnel 自带)
  • VPS 重启后自动重连
  • SSH 也能通过 Tunnel 转发

唯一的前提是域名托管在 Cloudflare。如果你也遇到类似的端口封锁问题,强烈推荐这个方案。

VPSCloudflare代理网络