Cloudflare WARP 能为服务器提供 Cloudflare 的出口地址,适合访问仅支持 IPv6 的资源,或改变对外显示的出口 IP。在远程机器上,经典的陷阱是 WARP 的默认模式会接管路由表,直接切断你的 SSH 会话。本文在 VPS Linux Infrawire 上演示两种安全做法:代理模式的官方客户端,以及配合 WireGuard 做部分路由的 wgcf。
📋 前提条件
- 一台运行 Ubuntu 24.04 或 Debian 12、可用 root 通过 SSH 登录的 VPS(在客户中心中可以找到 VPS 的 IP 和 root 密码)。
- 单独记下 VPS 的公网 IP(
VPS_IP)。 - 当网络改动导致无法登录时,能够打开 VPS 控制台。
- 已安装
curl、gpg和lsb-release。
📦 安装官方客户端
添加 Cloudflare 软件源并安装软件包:
Bashapt update && apt install -y curl gpg lsb-release curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" > /etc/apt/sources.list.d/cloudflare-client.list apt update && apt install -y cloudflare-warp systemctl enable --now warp-svc
🛡️ 代理模式:保住 SSH
在代理模式下,WARP 不会改动路由表,只是开放一个本地 SOCKS5 端口,需要时再使用。请先设置模式再连接,顺序不能反。
Bashwarp-cli --accept-tos registration new warp-cli mode proxy warp-cli proxy port 40000 warp-cli connect warp-cli status
代理只监听 127.0.0.1:40000。让命令经由它出网:
Bashcurl -x socks5h://127.0.0.1:40000 https://www.cloudflare.com/cdn-cgi/trace
socks5h 这个协议名很关键:它会让 DNS 解析也经过代理。要停止,执行 warp-cli disconnect。
🔀 替代方案:wgcf 与 WireGuard
如果你更想用内核级的 WireGuard 接口,wgcf 可以注册 WARP 账号并生成标准配置。请从该项目的 GitHub Releases 页面下载与你的架构匹配的 wgcf,然后执行:
Bashapt install -y wireguard-tools chmod +x wgcf_linux_amd64 && mv wgcf_linux_amd64 /usr/local/bin/wgcf cd /root && wgcf register && wgcf generate cp wgcf-profile.conf /etc/wireguard/wgcf.conf
先不要启动:生成的配置会把所有流量送入隧道,从而切断 SSH。
✂️ 部分路由与仅 IPv6
编辑 /etc/wireguard/wgcf.conf。若只让 IPv6 流量走 WARP,而保持 IPv4(即你的 SSH 会话)不受影响,请收窄 AllowedIPs、删除 DNS 行并降低 MTU:
INI1[Interface] 2MTU = 1280 3PostUp = ip rule add from VPS_IP lookup main 4PostDown = ip rule del from VPS_IP lookup main 5 6[Peer] 7AllowedIPs = ::/0 8Endpoint = engage.cloudflareclient.com:2408
保留 wgcf 生成的密钥和 Address 行。这对 ip rule 能确保来自 VPS_IP 的回包始终走主路由表,从而保护入站连接。如果你只通过 IPv4 连接,之后可以把 ::/0 改成 0.0.0.0/0, ::/0,让全部流量进入隧道。启用接口:
Bashsystemctl enable --now wg-quick@wgcf
✅ 验证
确认 WARP 在正确的路径上生效:
Bashcurl -s https://www.cloudflare.com/cdn-cgi/trace | grep warp curl -6 -s https://www.cloudflare.com/cdn-cgi/trace | grep -E 'ip=|warp=' wg show wgcf
IPv6 请求显示 warp=on,且 wg show 中有最近的握手,说明隧道正常。普通 IPv4 请求应仍显示 warp=off。
🛠️ 故障排查
连接后立刻失去 SSH 访问。 WARP 处于全隧道模式。打开 VPS 控制台,执行 warp-cli disconnect(或 systemctl stop wg-quick@wgcf),重新连接前先切换为 warp-cli mode proxy。如果你通过 IPv6 登录服务器,请不要在 AllowedIPs 中使用 ::/0。
DNS 无法解析。 配置中存在 DNS 行时,wg-quick 会改写解析器。请删除该行,或使用 socks5h 代理,让解析在 Cloudflare 一侧完成。
大页面卡住或 TLS 停滞。 几乎都是 MTU 问题。在 WireGuard 配置中保持 MTU = 1280,并用 ping -M do -s 1200 1.1.1.1 测试。
🎉 现在你的 VPS 可以按需使用 Cloudflare WARP,而不会切断 SSH 会话。