免费的Euserv IPv6 Only VPS虽可用DNS64+NAT64间接访问IPv4网址,但是无法访问IPv4的IP且速度比较慢。最新黑科技是OpenVZ或LXC虚拟化类型的 IPv6 Only VPS可以通过WireGuard-Go连接CloudFlare WARP为服务器添加IPv4网络环境。
WARP是CloudFlare提供的一项基于WireGuard的网络流量安全及加速服务,能够让你通过连接到CloudFlare的边缘节点实现隐私保护及链路优化。
其连接入口为双栈(IPv4/IPv6均可),且连接后能够获取到由CF提供基于NAT的IPv4和IPv6地址,因此我们的单栈服务器可以尝试连接到WARP来获取额外的网络连通性支持。这样我们就可以让仅具有IPv6的服务器访问IPv4,也能让仅具有IPv4的服务器获得IPv6的访问能力。
WARP 对外访问网络的 IP 被很多网站视为真实用户,即所谓的 “原生” IP,可以解除某些网站基于 IP 的封锁限制:
- 解锁 Netflix 非自制剧
- 跳过 Google 验证码
- 解除 Google 学术访问限制
- 解除 YouTube Premium 定位漂移和地区限制
下面我们以免费德国EUserv IPv6 only VPS Debian 10系统来演示配置CloudFlare WARP方法。
一、使用 wgcf 生成 WireGuard 配置文件
首先我们需要通过WGCF注册WARP账户并提取为WG配置文件。
1、下载WGCF
WGCF是一个基于Go语言编写的WARP管理程序,也是Cloudflare WARP的非官方 CLI 工具。它可以模拟 WARP 客户端注册账号,并生成通用的 WireGuard 配置文件。
项目地址:https://github.com/ViRb3/wgcf
前往release页面选择自己便于使用的平台对应的预编译程序,考虑到与CloudFlare通信的顺畅我选择的是位于境外的VPS进行操作,本地的话因为CloudFlare这项服务的特殊性很可能是不行的。
#弄个文件夹方便管理相关文件mkdir wgcfcd wgcf#下载对应程序wget -O wgcf https://github.com/ViRb3/wgcf/releases/download/v2.1.4/wgcf_2.1.4_linux_amd64#添加执行权限chmod +x wgcf
二、修改配置文件
初次使用首先就是注册个用户并生成配置文件:
#注册WARP账户./wgcf register#生成WireGuard配置文件./wgcf generate
可能会出现429 Too Many Requests报错,在wgcf register执行之后看到目录里生成wgcf-account.toml即可,然后多次执行wgcf generate直至正常生成即可。
随后你就可以在程序目录中找到wgcf-account.toml和wgcf-profile.conf两个新生成的文件。前者是你的WARP账户信息,如果你有WARP+账户可以替换成你自己的账户;后者就是WireGuard的配置文件了,下载到本地保存。
以上第一、二步的目标是获取到如下图所示的wgcf-profile.conf
[Interface]PrivateKey = sG6u80cQnKNNgvxREYn8OI0bVT9jIiNQoe301TU1TlQ=Address = 172.16.0.2/32Address = fd01:5ca1:ab1e:8ccd:9db0:342f:c59e:3a0e/128DNS = 1.1.1.1MTU = 1280[Peer]PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=AllowedIPs = 0.0.0.0/0AllowedIPs = ::/0Endpoint = engage.cloudflareclient.com:2408
修改:对wgcf-profile.conf中11行engage.cloudflareclient.com:2408修改为[2606:4700:d0::a29f:c001]:2408,删除掉第10行AllowedIPs = ::/0 接管本地IPv6路由的配置。保存好用于第四步的wireguard配置文件。
原理:AllowedIPs = 0.0.0.0/0参数使得 IPv4 的流量均被 WireGuard 接管,让 IPv4 的流量通过 WARP IPv6 节点以 NAT 的方式访问外部 IPv4 网络。
修改原因:
- 要让它纯使用IPv6,所以把engage.cloudflareclient.com替换成IP,我测试的解析结果是2606:4700:d0::a29f:c001
- 掉第10行AllowedIPs = ::/0 接管本地IPv6路由的配置。由于AllowedIPs = 0.0.0.0/0的参数使得IPv4的流量均被WARP网卡接管,实现了让IPv4的流量通过WARP访问外部网络
二、安装wireguard-go
WireGuard是内核级别的工具,来自官方的包需要加载内核模块,所以在安装前请保证你的服务器是KVM/HyperV/XEN HVM这样完全虚拟化的服务器。
OpenVZ和LXC因为不具有内核权限,需要装WireGuard-Go作为内核模块的替代,其提供的文档要求配置go环境进行编译。
WG主程序在检测不到内核的模块时会fallback到go的模块启动程序;同时这个也可以解决部分人不想给内核加载模块的问题,只是效率略低。
在这之前我们要检查一下你的服务器是否开启了TUN支持,如果未开启的话需要联系你的服务商开启。EUserv Debian 10 系统默认已开启了TUN。
#检查TUN模块加载是否正常lsmod | grep tun
这里为减少步骤,避免不必要的错误,使用别人编译好的64位的WireGuard-Go。使用自己编译的话需要go语言版本高于1.13才可以。
#进入/usr/bincd /usr/bin#下载二进制文件wget https://github.com/bernardkkt/wg-go-builder/releases/latest/download/wireguard-go#添加执行权限chmod +x /usr/bin/wireguard-go#检查执行是否正常wireguard-go
Go模块安装正确后,还需在Debian上安装wireguard-tools。
[v_tips]上面安装的WireGuard-Go,只是将WireGuard的内核部分 (wireguard.ko) 编译完成了,我们还需要安装WireGuard主程序 (wg 和 wg-quick),才能使得WireGuard能够正常使用,所以还需要安装wireguard-tools。[/v_tips]
三、安装wireguard-tools
下面我们通过Debian的unstable源来安装wireguard-tools,从而不用自己编译。安装前先安装依赖,避免resolvconf报错。
#安装依赖apt-get install sudo net-tools openresolv -y
安装主程序,Debian需要添加unstable源:
#Debian添加unstable源echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.listprintf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable#更新源并安装apt-get updateapt-get install wireguard-tools -y
四、启动wireguard
resolv.conf需要自己编辑一下DNS,改成Google或Cloudfalre IPv6 DNS的就可以,因为LXC系统缺少一些权限。
#编辑DNS改成CF DNS IPv6echo -e "nameserver 2606:4700:4700::1111" > /etc/resolv.conf
从第一步中你需要的配置文件拿出来,把配置文件目录传到/etc/wireguard下。比如我选择命名为wgcf.conf,则开启与关闭命令与配置文件对应。测试完成后关闭相关接口,因为这样配置只是临时性的。
#开启隧道wg-quick up wgcf
#关闭隧道 wg-quick down wgcf
正式启用 WireGuard 网络接口
# 启用守护进程# 正式启用 WireGuard 网络接口sudo systemctl start wg-quick@wgcf# 设置开机启动sudo systemctl enable wg-quick@wgcf
安装成功后返回以下信息:
INFO: (wgcf) 2021/02/08 04:02:39 Starting wireguard-go version 0.0.20201118[#] wg setconf wgcf /dev/fd/63[#] ip -4 address add 172.16.0.2/32 dev wgcf[#] ip -6 address add fd01:5ca1:ab1e:8ccd:9db0:342f:c59e:3a0e/128 dev wgcf[#] ip link set mtu 1280 up dev wgcf[#] resolvconf -a wgcf -m 0 -xToo few arguments.Too few arguments.[#] wg set wgcf fwmark 51820[#] ip -4 route add 0.0.0.0/0 dev wgcf table 51820[#] ip -4 rule add not fwmark 51820 table 51820[#] ip -4 rule add table main suppress_prefixlength 0[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1[#] iptables-restore -n
开启后可通过ifconfig命令,看到名称为你配置文件的WARP虚拟网卡,如下wgcf虚拟网卡就是wireguard生成的虚拟网卡。此时便可以通过WARP进行外部访问了。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 2a02:180:6:1::11d2 prefixlen 128 scopeid 0x0 inet6 fe80::284:edff:fe4b:b1dd prefixlen 64 scopeid 0x20 ether 00:84:ed:4b:b1:dd txqueuelen 1000 (Ethernet) RX packets 102932 bytes 135947988 (129.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 33967 bytes 3732318 (3.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 6 bytes 768 (768.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6 bytes 768 (768.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0wgcf: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1280 inet 172.16.0.2 netmask 255.255.255.255 destination 172.16.0.2 inet6 fe80::c546:b163:f99a:e7b5 prefixlen 64 scopeid 0x20 inet6 fd01:5ca1:ab1e:8ccd:9db0:342f:c59e:3a0e prefixlen 128 scopeid 0x0 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6 bytes 288 (288.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
至此OpenVZ和LXC类型VPS安装WireGuard连接CloudFlare WARP为服务器添加IPv4网络完毕。实测效果是非常不错的。相比于DNS64等方案,CloudFlare提供的网络非常优秀。
如果是KVM/HyperV/XEN HVM这样完全虚拟化的服务器的Debian 10 用 wireguard-dkms来替代wireguard-go。
第三步的apt-get install wireguard-tools -y 改为如下
apt-get install wireguard-dkms wireguard-tools -y
Cloudflare WARP 一键配置脚本
如果嫌手动配置麻烦,可使用Cloudflare WARP 一键配置脚本。它支持 WARP 官方客户端和 WireGuard 两种主流 WARP 使用方式,适用于 IPv4/IPv6 单双栈各类的网络环境,操作系统、 CPU 架构和虚拟化平台支持全面。
#脚本来自:https://github.com/P3TERX/warp.shbash <(curl -fsSL git.io/warp.sh) menu