在 VPS 上使用 Cloudflare Warp 提升媒体解锁能力 & 路由解决办法
## 为什么要用 Warp
play余额充多了没处花买了warp+,warp 可以有效拯救服务器的媒体解锁能力,妈妈再也不怕咕噜咕噜(非洲方言:指咕鸽)把我给 `Region: CN` 了
而且还能顺便处理掉咕噜咕噜天天弹点选消失型验证码让我搜一次点一年的优异体验
(和群友吹水顺手测了下梯子落地鸡的 [RegionRestrictionCheck](https://github.com/lmc999/RegionRestrictionCheck),看到花了不大价钱买的 Youtube Premium 不能用,感觉像吃了屎一样,正好从记忆的角落翻出来了 warp 这个东西 想起来跟着龟龟白嫖了warp+的流量,就顺手试试)
## 效果预览
![](https://vip2.loli.io/2021/07/31/y9NU1VZEQ5ljie4.png)
## 安装 Wireguard
因为 warp 使用 wireguard 协议,所以我们需要安装 wg 的客服合一p2p端软件
[Instruction 参见](https://www.wireguard.com/install/)
rh 系都进 epel 了,除了 rh 系都进官方源了,我真想不出还有什么再在这件事上多费口舌的必要
![算了](https://vip1.loli.io/2021/07/31/uNeLJ5o7zVk4ajE.png)
## 其他系统需求
本文基于 Debian 10,所使用的 `ipproto`这个 selector 在 18 年底才 [被引入 iproute2](https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=b2e8bf158460568ec5b48cba69f657f95891c901) ,Debian 的速度当然是还算快的,但是对于[19年11月 前的 RHEL](https://bugzilla.redhat.com/show_bug.cgi?id=1678111) / [200428 前的 CentOS](https://git.centos.org/rpms/iproute/c/72258cdf3818ca898511fda04947914f6a11bea3.patch) ,该教程使用的取巧策略是没法用的,请结合 [这篇 iptables 相关教程](https://unix.stackexchange.com/questions/453509/route-traffic-on-certain-port-through-certain-interface#456898) 食用
## 使用 wgcf 获取配置文件
wgcf:https://github.com/ViRb3/wgcf ,下载装进PATH即可,不装进PATH也可,给cwd加个PATH也可,不想用用别的类似工具也可
首先将 warp+ 注册到 vps 上(没有 warp+ 的就不用执行第二句的连接授权了,整了也是白整),然后获取配置文件:
```bash
# 注册设备
wgcf register
# 将手机客户端的 设置-账户-按键 (这谁的机翻跑出来了)内容复制,并注册到此设备
WGCF_LICENSE_KEY="你的按键" wgcf update
# 获取并生成配置文件
wgcf generate
```
配置文件会被写入到工作目录的`wgcf-profile.conf`,现在你应该有一个下面这样的配置文件了,我们做出一些修改来保证不会被他自动拉走路由搞到 vps 无法访问:
```
[Interface]
PrivateKey = 一坨 base64
Address = 一个 ipv4
Address = 一个 ipv6
DNS = 1.1.1.1
MTU = 1280
++++++++++ 此处插入
Table = 99
PostUp = /etc/wireguard/cfup
PreDown = /etc/wireguard/cfdown
++++++++++ 插入结束
[Peer]
PublicKey = 一坨 base64
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
Endpoint = engage.cloudflareclient.com:2408
```
将这个文件复制到 `/etc/wireguard/cf.conf` ,或者你想起个别的什么名都好
## 处理路由问题
通过在 conf 中添加 `Table = 99` 这一行,我们已经让他不会拦截所有流量了(因为覆盖了默认的 `auto` 选项),接下来让我们需要的流量进入到 wg 的接口中去
比如这里我们需要 http(s) 流量走 warp:
`/etc/wireguard/cfup`:
```sh
#!/bin/sh
ip rule add ipproto tcp dport 80 table 99
ip rule add ipproto tcp dport 443 table 99
ip -6 rule add ipproto tcp dport 80 table 99
ip -6 rule add ipproto tcp dport 443 table 99
```
`/etc/wireguard/cfdown`:
```sh
#!/bin/sh
ip rule del ipproto tcp dport 80 table 99
ip rule del ipproto tcp dport 443 table 99
ip -6 rule del ipproto tcp dport 80 table 99
ip -6 rule del ipproto tcp dport 443 table 99
```
别忘记添加下执行权限:` chmod a+x /etc/wireguard/cfup /etc/wireguard/cfdown`
## 运行
此时 `wg-quick up cf`即可,日志类似下面的样子:
```shell
root@machine:~# wg-quick up cf
[#] ip link add cf type wireguard
[#] wg setconf cf /dev/fd/63
[#] ip -4 address add 172.16.0.2/32 dev cf
[#] ip -6 address add [something]/128 dev cf
[#] ip link set mtu 1280 up dev cf
[#] resolvconf -a tun.cf -m 0 -x
[#] ip -6 route add ::/0 dev cf table 99
[#] ip -4 route add 0.0.0.0/0 dev cf table 99
[#] /etc/wireguard/cfup
```
关闭 `wg-quick down cf`
可以通过运行 `wgcf trace`来检查是否有在正常工作:
```shell
root@kvmvps1921-z4awd:~# wgcf trace
2021/07/30 15:11:19 Using config file: wgcf-account.toml
2021/07/30 15:11:19 Trace result:
fl=*****
h=cloudflare.com
ip=*********
ts=*******
visit_scheme=https
uag=Go-http-client/2.0
colo=***
http=http/2
loc=**
tls=TLSv1.3
sni=plaintext
==== warp=plus ==== 此处可以为 off(未使用warp),on(使用warp),plus(使用warp+)
gateway=off
```
## 效果再览
![](https://vip2.loli.io/2021/07/31/y9NU1VZEQ5ljie4.png)
## 开机自启
不建议,如果你不想某一天突然配炸然后不得不vnc的话
## 参考文献
https://github.com/ViRb3/wgcf
man:wg-quick(8) [online](https://manpages.debian.org/unstable/wireguard-tools/wg-quick.8.en.html)
man:ip-rule(8) [online](https://manpages.debian.org/unstable/iproute2/ip-rule.8.en.html)
谢谢您!另外,这么让这些域名不走warp的443呢?减少消耗warp流量的"googlevideo.com","wzip.ru","ttvnw.net",
回复删除"googlevideo.com"