Warp是什么?

Warp诞生于2018年4月1日,也就是愚人节。

WARP是建立在Cloudflare 1.1.1.1的免费DNS服务器上。从技术上讲,Warp本质上就是一款VPN服务,Warp使用来自1.1.1.1的DNS服务器,并对它们之间的所有流量进行加密。

通常,当你访问Baidu.com时,URL会被翻译成网站所在服务器的IP地址,由ISP的DNS服务器托管。当你使用Warp时,Warp将手机上的DNS服务器固定为1.1.1.1。因此,所有请求都转到Cloudflare的安全服务器。

Warp在此基础上增加了一个额外的流程,使得设备和Cloudflare服务器之间的所有流量都是加密流量。

但Warp是基于WireGuard隧道的UDP协议,中国大陆绝大部分运营商都会对这类流量进行惩罚式、限速式的限制策略,导致Warp在大陆使用上突发很高,但均速很低。再加上Cloudflare的许多IP被国内Block,使得Warp在大陆接近一个不可用的状态。

如何安装Warp?

Warp服务在Linux下有以下三种实现方式

  1. 使用Warp-cli(CloudFlare官方客户端)进行实现
  2. 使用WireGuard进行实现
  3. 使用WireGuard-go进行实现

以上三种仅推荐第一种和第二种,第三种由于是基于用户空间的WireGuard,因此性能方面并不占优,故不过多介绍了。




安装前准备

apt update
apt upgrade -y
apt install sudo




使用Warp-cli实现Warp代理

首先进行安装Warp-cli前的准备

apt install gpg lsb-release -y

接下来安装Warp-cli;官方安装流程:https://pkg.cloudflareclient.com/install

# 安装Warp-cli GPG密钥:
curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg

# 添加Warp-cli源:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list

# 更新APT缓存:
apt update

# 安装Warp-cli:
apt install cloudflare-warp

# 注册WARP:
warp-cli register

# 设置为Socks代理模式(十分重要,如果直接连接会导致shell失联):
warp-cli set-mode proxy

# 连接Warp-cli:
warp-cli connect

# 查询代理后的IP地址:
curl ifconfig.me --proxy socks5://127.0.0.1:40000

上方设置Socks代理模式如果无法完成,则需要去到CloudFlare的ZeroTrust设置中的设备管理进行代理模式的修改。

如果要加入ZeroTrust网络,则需要进行如下操作:

1.通过登录团队域将 WARP 转换为ZeroTrust

warp-cli teams-enroll [你的团队域]

2.将Shell中的域名复制到浏览器,按照流程登录

A browser window should open at the following URL:
https://[你的团队域].cloudflareaccess.com/warp 
If the browser fails to open, please visit the URL above directly in your browser.

3.按照以下步骤获取Token并返回给Warp-cli

warp-cli teams-enroll [team-domain]

Token需要在刚刚在浏览器登录的页面中提取,有效时间很短。在已登陆的页面右键—检查,以下部分的内容是你需要获取的Token。

将其提取并在Shell中导入

warp-cli teams-enroll-token com.cloudflare.warp://[team-domain].cloudflareaccess.com/auth?token=[token]

如果时间超时导致Token失效,则会返回以下

Error: Invalid JWT provided.

操作完成后,可以连接Warp客户端进行使用了。

warp-cli connect
warp-cli status -> Must show "Status update: Connected"
warp-cli account -> will show if connecting to account was successful

最后附Warp-cli常用的部分命令

warp-cli register //注册warp账户
warp-cli delete //删除warp账户
warp-cli account //查看当前warp账户
warp-cli set-license //使用warp+ key登入
warp-cli status //warp状态
warp-cli connect //连接warp网络
warp-cli set-custom-endpoint //设置warp接入点(优选IP)




使用WireGuard实现Warp代理

首先进行安装WireGuard前的准备

apt install lsb-release -y

#添加backports源
echo "deb http://deb.debian.org/debian $(lsb_release -sc)-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
apt update

安装WireGuard前,先执行uname -r查看内核版本,5.6及以上的内核已经集成了WireGuard,因此无需再重复安装了。

安装WireGuard

sudo apt install wireguard-dkms -y

安装完成后reboot进行重启,随后执行命令将WireGuard加载到内核

modprobe wireguard

最后检查WireGuard是否被加载

lsmod | grep wireguard

当WireGuard安装完成后,会在/etc/wireguard创建一个用于存放WireGuard配置文件的目录,我们在启用WireGuard前需要将配置文件导入进WireGuard。

不过,在导入前,我们需要先对配置文件进行修改,以防止WireGuard全接管流量导致机器失联。

[Interface]
PrivateKey = [Warp 私钥]
Address = 172.16.0.2/32
Address = [Warp ipv6]
DNS = 1.1.1.1
MTU = 1280
PostUp = ip rule add from [本机 IP] lookup main
PostDown = ip rule delete from [本机 IP] lookup main
[Peer]
PublicKey = [Warp 公钥]
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
Endpoint = engage.cloudflareclient.com:2408

以上的PustUpPostDown十分重要,请务必根据ifconfig中的本机ip来进行填写。

文件配置完成后,即可保存并将名称修改为 *.conf,这里以 wgcf.conf 为示例;并将其导入/etc/wireguard

# 启动wireguard
wg-quick up wgcf

如果没有报错,我们接下来输入ip a就可以看到wgcf的网络接口了。接下来我们需要为WireGuard创建守护进程,确保WireGuard保持运行并开机启动。

# 停止wireguard
wg-quick down wgcf
# 设置守护进程
systemctl start wg-quick@wgcf
# 设置开机启动
systemctl enable wg-quick@wgcf
# 查看守护状态
systemctl status wg-quick@wgcf
# 停止
systemctl stop wg-quick@wgcf
# 重启
systemctl restart wg-quick@wgcf

当WireGuard运行后,我们也可以通过以下命令查看Warp的ipv4/6地址

# IPv4 
wget -qO- ip.gs
# IPv6 Only VPS
wget -qO- -6 ip.gs




最后再来说一下关于WireGuard的配置文件。默认配置应该如下:

[Interface]
PrivateKey = [Warp 私钥]
Address = 172.16.0.2/32
Address = [Warp ipv6]
DNS = 1.1.1.1
MTU = 1280
[Peer]
PublicKey = [Warp 公钥]
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
Endpoint = engage.cloudflareclient.com:2408

可以根据需求自行修改

[Interface]
PrivateKey = [Warp 私钥]
Address = 172.16.0.2/32
Address = [Warp ipv6]
DNS = 1.1.1.1
# MTU可以修改成1420
MTU = 1280
PostUp = ip rule add from [本机 IP] lookup main
PostDown = ip rule delete from [本机 IP] lookup main
[Peer]
PublicKey = [Warp 公钥]
# AllowedIPs 这里如果两个都保留,那么就是使用ipv4和ipv6;如果删除 AllowedIPs = 0.0.0.0/0,那么就是仅使用warp的ipv6地址,并保留本机ipv4;删除 AllowedIPs = ::/0,那么就是使用warp的ipv4
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
# 这里的对端可以使用优选IP工具进行筛选,可以替换成筛选到的最优IP地址
Endpoint = engage.cloudflareclient.com:2408