在仅IPv6网络下安装WARP支持双栈实践
原创2026年11月1日大约 4 分钟
在仅IPv6网络下安装WARP支持双栈实践
在纯 IPv6 环境(IPv6-only)的虚拟机或服务器中,虽然可以通过原生的 IPv6 网络与外部通信,但面对庞大的纯 IPv4 网络资源时常常束手无策。通过配置 DNS64/NAT64 配合 Cloudflare WARP(代理模式),可以让纯 IPv6 机器完美访问 IPv4 资源,同时彻底避免全局路由修改导致的 SSH 断连问题。
本文记录了在 Ubuntu 24.04 纯 IPv6 环境下,从零部署 WARP 并通过后台守护脚本实现高可用双栈支持的完整实践。
一、 环境与痛点分析
- 网络环境:IPv6-only Ubuntu 24.04 LTS(宿主机基于 PVE)。
- 核心痛点:
- 机器无原生 IPv4 栈,无法直接请求仅支持 IPv4 的服务或 API。
- 如果直接启用 Cloudflare WARP 的全局模式(
warp),会强制接管系统默认网关,导致原有的 IPv6 路由和当前的 SSH 连接瞬间断开。 - 更改 DNS64/NAT64 服务器重启后恢复默认设置
二、 核心解决方案
- DNS64 / NAT64 基础打通:通过公共 DNS64 服务(如 Cloudflare 的
2606:4700:4700::64),将 IPv4 地址合成解析为64:ff9b::/96的 IPv6 虚拟地址,经 NAT64 网关转换后与 IPv4 世界互联。 - WARP 代理模式(
WarpProxy):不使用会劫持网关的全局模式,而是将 WARP 运行在 SOCKS5 代理模式下(监听本地端口),既能借助 Cloudflare 双栈节点访问 IPv4,又完美保护了原生的 IPv6 路由和 SSH 会话。 - Crontab 守护脚本:编写自动化巡检脚本,防止由于意外重置或配置变动导致 WARP 切回危险的全局模式。
第一步:安装依赖与 Cloudflare WARP 客户端
- 安装 GPG 依赖:
sudo apt update
sudo apt install gnupg -y- 添加 Cloudflare 官方软件源及密钥:
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" | tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update
sudo apt install cloudflare-warp -y第二步:配置为安全的 Proxy 模式
为了防止全局路由劫持导致 SSH 失联,必须将 WARP 设置为代理模式,并指定本地监听端口(例如 40000):
这里暂不初始化防止与服务器失联
warp-cli mode proxy
warp-cli proxy port 40000你可以通过以下命令检查当前生效的模式:
warp-cli settings | grep -i "Mode:"正常情况下应输出:(user set) Mode: WarpProxy on port 40000。
第三步:编写自动化巡检与防断连脚本
为了确保系统稳定性,我们在 /root/ 下编写一个自动检测脚本。如果发现 WARP 意外切回了危险的全局 warp 模式,脚本会自动将其纠正回安全的 proxy 模式并记录英文日志(避免服务器环境编码导致乱码)。
- 创建脚本文件:
sudo nano /root/check_warp.sh- 写入以下内容:
#!/bin/bash
# Log directory and file
log_dir="/root/logs"
log_file="$log_dir/warp_check.log"
# Ensure log directory exists
mkdir -p "$log_dir"
# Get current timestamp
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# (default) Mode: Warp
# (user set) Mode: WarpProxy on port 40000
mode=$(warp-cli settings 2>/dev/null | grep -i "Mode: " | head -n 1 | sed -E 's/.*Mode:[[:space:]]*([a-zA-Z]+).*/\1/' | tr '[:upper:]' '[:lower:]')
# Log current check status
echo "[$timestamp] Current user-set WARP mode detected: '${mode:-unknown}'" >> "$log_file"
# If dangerous global warp mode is explicitly set by user, log and correct it
if [ "$mode" = "warp" ]; then
echo "[$timestamp] WARNING: Dangerous global warp mode detected! Fixing and switching to proxy..." >> "$log_file"
warp-cli mode proxy >> "$log_file" 2>&1
warp-cli connect >> "$log_file" 2>&1
echo "[$timestamp] Recovery complete: Switched to proxy mode and reconnected." >> "$log_file"
fi- 赋予执行权限:
sudo chmod +x /root/check_warp.sh第四步:配置 Crontab 定时任务
利用 crontab 每分钟自动执行一次脚本,实现无人值守的后台状态守护:
- 编辑 root 定时任务:
sudo crontab -e- 在文件末尾添加一行:
* * * * * /root/check_warp.sh >/dev/null 2>&1- 初始化注册并启动 本步骤延迟到这里执行可以防止和服务器失去联系:
warp-cli registration new
warp-cli connect
warp-cli status四、 验证与使用
配置完成后,你可以随时查看日志确认运行状态:
tail -n 20 /root/logs/warp_check.log当需要通过命令行让某些程序或 curl 访问 IPv4 网络时,只需指定本地的 SOCKS5 代理即可:
curl -x socks5h://127.0.0.1:40000 https://ip.sb
curl -x socks5h://127.0.0.1:40000 https://ipv4.icanhazip.com通过这套方案,纯 IPv6 服务器不仅保留了完美的原生 IPv6 访问和稳定的 SSH 远程管理,还能无缝对接全球的 IPv4 网络服务,实现了真正的“双栈自由”。