前言
WARP 是 Cloudflare 提供的一项基于 WireGuard 的网络流量安全及加速服务,能够让你通过连接到 Cloudflare 的边缘节点实现隐私保护及链路优化。其连接入口为双栈 (IPv4/IPv6),因此单栈服务器可以连接到 WARP 来获取额外的网络连通性支持。
比如可以让仅具有 IPv6 的服务器直接访问 IPv4 网络,不再局限于 DNS64 的束缚,能自定义任意 DNS 解析服务器,对于科学上网会有很大的帮助;也能让仅具有 IPv4 的服务器获得 IPv6 网络的访问能力,可以作为 IPv6 Only VPS 的 SSH 跳板。另外科学上网通过 WARP 网络可以实现解锁 Netflix 、绕过 Google 验证码等骚操作。
与之前介绍的 Hurricane Electric IPv6 Tunnel Broker 不同,WARP 并不提供公网 IP 地址,而是以 NAT 的方式去访问外部网络。此外 CloudFlare WARP 的网络质量目前要比 HE 好非常多的。
安装 WireGuard
既然 WARP 是基于 WireGuard 的,那么我们首先就需要安装 WireGuard 。由于博主使用的是 Debian ,所以只写了 Debian 的 WireGuard 详细安装方法,其它系统可以参考官方文档来进行安装。
首先安装一些必要的工具,防止接下来的操作出问题。
apt update apt install curl sudo lsb-release -y
- 按照《Debian Linux VPS WireGuard 安装教程》中简单的几个步骤完成安装工作。
使用 wgcf 生成 WireGuard 配置文件
wgcf 是 Cloudflare WARP 的非官方 CLI 工具,它可以模拟 WARP 客户端注册账号,并生成通用的 WireGuard 配置文件。
安装 wgcf
curl -fsSL git.io/wgcf.sh | sudo bash
注册 WARP 账户 (将生成
wgcf-account.toml
文件保存账户信息)wgcf register
生成 WireGuard 配置文件 (
wgcf-profile.conf
)wgcf generate
生成的两个文件记得备份好,尤其是 wgcf-profile.conf
,万一未来工具失效、重装系统后可能还用得着。
编辑 WireGuard 配置文件
将配置文件中的节点域名 engage.cloudflareclient.com
解析成 IP。不过一般都是以下两个结果:
162.159.192.1
2606:4700:d0::a29f:c001
这样做是因为后面的操作要根据 VPS 所配备的网络协议的不同去选择要连接 WARP 的节点是 IPv4 或 IPv6 协议。
为 IPv4 Only 服务器添加 IPv6 网络支持
将配置文件中的 engage.cloudflareclient.com
替换为 162.159.192.1
,并删除 AllowedIPs = 0.0.0.0/0
。即配置文件中 [Peer]
部分为:
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = ::/0
Endpoint = 162.159.192.1:2408
原理:AllowedIPs = ::/0
参数使得 IPv6 的流量均被 WireGuard 接管,让 IPv6 的流量通过 WARP IPv4 节点以 NAT 的方式访问外部 IPv6 网络。
此外配置文件中默认的 DNS 是 1.1.1.1
,博主实测其延迟虽然很低,但解析结果并不理想。由于它将替换掉系统中的 DNS 设置 (/etc/resolv.conf
),建议小伙伴们请根据实际情况来进行替换,或者直接删除 DNS 这行。以下配置供参考:
DNS = 8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844
为 IPv6 Only 服务器添加 IPv4 网络支持
将配置文件中的 engage.cloudflareclient.com
替换为 [2606:4700:d0::a29f:c001]
,并删除 AllowedIPs = ::/0
。即配置文件中 [Peer]
部分为:
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0
Endpoint = [2606:4700:d0::a29f:c001]:2408
原理:AllowedIPs = 0.0.0.0/0
参数使得 IPv4 的流量均被 WireGuard 接管,让 IPv4 的流量通过 WARP IPv6 节点以 NAT 的方式访问外部 IPv4 网络。
此外配置文件中默认的 DNS 是 1.1.1.1
,由于是 IPv4 地址,故查询请求会经由 WARP 节点发出。由于它将替换掉系统中的 DNS 设置 (/etc/resolv.conf
),为了防止当节点发生故障时 DNS 请求无法发出,建议替换为 IPv6 地址的 DNS 优先,或者直接删除 DNS 这行。以下配置供参考:
DNS = 2001:4860:4860::8888,2001:4860:4860::8844,8.8.8.8,8.8.4.4
双栈服务器置换网络
有时服务器本身就是双栈的,但是由于种种原因我们可能并不想使用其中的某一种网络,这时也可以通过 WARP 接管其中的一部分网络连接隐藏自己的 IP 地址。至于这样做的目的,最大的意义是减少一些滥用严重机房出现验证码的概率;同时部分内容提供商将 WARP 的落地 IP 视为真实用户的原生 IP 对待,能够解除一些基于 IP 识别的封锁。
⚠️ 需要注意的是双栈流量在默认配置的情况下均被 WARP 接管后就无法连接到服务器了。因此在 IPv4 与 IPv6 之间必须做一个取舍,以防这样的情况发生。
配置方法参考以上两种情况,需要使用 WARP 接管哪一个网络就使用哪种方案。
启用 WireGuard 网络接口
将 WireGuard 配置文件复制到
/etc/wireguard/
并命名为wgcf.conf
。sudo cp wgcf-profile.conf /etc/wireguard/wgcf.conf
开启网络接口(命令中的
wgcf
对应的是配置文件wgcf.conf
的文件名前缀)。sudo wg-quick up wgcf
执行执行
ip a
命令,此时能看到名为
wgcf
的网络接口,类似于下面这张图:
执行以下命令检查是否连通。同时也能看到正在使用的是 Cloudflare 的网络。
# IPv4 Only VPS curl -6 ip.p3terx.com # IPv6 Only VPS curl -4 ip.p3terx.com
测试完成后关闭相关接口,因为这样配置只是临时性的。
sudo wg-quick down wgcf
正式启用 WireGuard 网络接口
# 启用守护进程 sudo systemctl start wg-quick@wgcf # 设置开机启动 sudo systemctl enable wg-quick@wgcf
IPv4 与 IPv6 网络优先级设置
TIPS: 这不是一定要设置的,小伙伴们请根据实际需求来选择。
当访问的网站是双栈且服务器也是双栈,默认情况下 IPv6 优先级高于 IPv4,应用程序优先使用 IPv6 地址。
理论上应该是如下情况:
- IPv4 Only 服务器优先通过新增的 WARP 网络去访问外部网络。
- IPv6 Only 服务器优先通过原来的 IPv6 网络去访问外部网络。
然而 WARP 的情况有点特殊,现实的情况有可能是:
- IPv4 Only 服务器优先通过原来的 IPv4 网络去访问外部网络。
- IPv6 Only 服务器优先通过原来的 IPv6 网络去访问外部网络。
所以根据实际的需求就要手动去设置优先级。
IPv4 优先
编辑 /etc/gai.conf
文件,在末尾添加下面这行配置:
precedence ::ffff:0:0/96 100
一键添加命令如下:
# IPv4 优先
grep -qE '^[ ]*precedence[ ]*::ffff:0:0/96[ ]*100' /etc/gai.conf || echo 'precedence ::ffff:0:0/96 100' | sudo tee -a /etc/gai.conf
IPv6 优先
编辑 /etc/gai.conf
文件,在末尾添加下面这行配置:
label 2002::/16 2
一键添加命令如下:
# IPv6 优先
grep -qE '^[ ]*label[ ]*2002::/16[ ]*2' /etc/gai.conf || echo 'label 2002::/16 2' | sudo tee -a /etc/gai.conf
验证优先级
执行 curl ip.p3terx.com
命令,显示 IPv4 地址则代表 IPv4 优先,否则为 IPv6 优先。
优先级设置在某些使用场景中的局限性
若 VPS 用于科学上网,则还取决于科学上网工具的 DNS 策略。有关科学上网的 DNS 设置有很多资料,小伙伴们可自行咕鸽。每个人的需求不一样,不可能以偏概全,最好是看相关工具的文档,所以博主在这里就不多赘述了。
最需要注意的是某些路由器上的科学上网客户端不会发送 DNS 请求给科学上网服务端进行处理,而是在本地直接处理 DNS ,那么可能因为屏蔽了 AAAA 记录,就只会直接去访问 IPv4 网络。
Cloudflare WARP 网速测试
博主目前暂时还未找到很好的方法来测试指定网络接口的速度,而目前已知 speedtest.net 提供的测速是 IPv4 Only 的,那么就可以使用其提供的 CLI 工具在 IPv6 Only 的 VPS 上来测试通过 WARP 访问外部网络的极限网速。
curl -fsSL git.io/speedtest-cli.sh | sudo bash
- 执行
speedtest
命令测速。
博主测速使用的是 EUserv 德国 IPv6 Only 小鸡,即使使用的是 wireguard-go
其网速依然很猛,几轮测试下来速度都在 500M 上下。可以预见的是这个速度应该远未达到 WARP 的极限。
尾巴
Cloudflare 一直以来为广大人民群众免费提供优秀的网络服务,希望大家善待它,不要肆意滥用。