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