首先必须要承认,我标题党了,ping值是很难救的,物理距离带来的延迟是什么加速器都救不了的(或许我们可以期待一下疯子马斯克能够超越光速的奇思妙想)。不过对于普通家庭宽带,加速器还是可以有很大的优化空间的。
家庭宽带线路一般都比较差,连接海外服务器会有比较高的延迟,除了物理距离,还有线路的差异,从国内到美西最短情况下可以做到130ms的ping延迟,但是家庭宽带和服务器之间的线路很少能够达到。还有就是,由于方校长的存在,海外连接QoS极差,千兆的家宽连一张图片都要加载很久,或者是连接时断时续。这就是加速器的两个目的:一是优化网络链路,降低延迟;二就是保证连接能够有比较高的带宽和稳定性保证。话说玩游戏的应该都知道这些吧,就不过多赘述,下面直接进入正文。
其实之前也写过全局透明代理网关的教程,那篇博客主要解决的是无需配置,让客户端科学上网。使用了redsocks来做协议的转换,解决了从无到有的问题。不过由于redsocks是设计用于转发TCP流量的,很多游戏为了保证延迟,采用了UDP协议,所以那个实现无法加速游戏。
除了游戏加速器之外,本教程还有另外一个目的,就是把代理变成全局透明代理,目前访问互联网的方式主要分成两种,一种是VPN,例如PPTP、L2TP、OpenVPN等等;另一种是代理,例如shadowsocks、v2ray等等。VPN会接管全局流量,应用无感知,但是缺点很明显,就是VPN的目的是为了安全,而不是伪装,所以识别率很高,容易受到干扰。而具有特色的代理则是为了伪装而生,在使用上不及VPN那么方便,需要针对每个应用单独设置,而有的应用不支持设置代理,这篇教程可以解决这种问题。
以下进入正题。
本文会涉及到的技术有Virtual Box(用VPS、个人PC替代都可以)、V2ray、iptables,有一定的技术难度。如果对Linux系统的使用还停留在一键脚本的程度,这篇教程可能写的还是不够详细,花钱比自己折腾要容易许多。
一台独立的机器(中继节点)
虽然可以在本地部署,不过鉴于大多数人都不会使用Linux作为自己的主系统,再加上修改了本地流量,可能还是会有一些影响的,所以推荐使用一台独立的电脑,安装Linux操作系统,硬件要求不高,比路由器强那么一点就行,比如树莓派,比如斐讯N1都可以,或者你有VPS的话就更好了。
如果是游戏加速器目的,建议使用VPS,提供商推荐阿里云上海/北京/深圳,挑一个离你最近的城市,这样路由不会绕路。阿里云的机器路由优化的都还不错,不过流量价钱也很贵,建议切换到按量计费模式,然后带宽开大一点。如果觉得0.8¥/G的流量费太贵的话,也可以使用自己的小主机,但是性能可能会差一点。
这里如果你使用了单独的电脑,或者是VPS,就可以直接跳到下一部分了,毕竟安装操作系统不是本文的内容之一。
如果你身边没有小主机,也不想花大价钱买VPS,推荐virtual box,虚拟一个机器出来。至于virtual box的概念、安装、基本使用,这里不过多涉及,只有一个地方需要注意,就是默认情况下网络是NAT模式,需要改成桥接/bridge模式,并且只需要这一个网卡。
安装VPN(全局流量)
前面我们说了VPN的伪装性很差,那么这里为什么还要使用呢?有一点要指出,那些设备都是部署在出国骨干网上,国内间的流量还是比较宽松的,我们用VPN连接到中继节点上,然后在中继节点上进行流量的转换,再用正常的流量出国。实现了本机全局+流量伪装的目的。
VPN有很多,我们本文使用wireguard,因为对比了几个,wireguard在安装上是最简单的。下面以Debian Buster系统为例,其他系统可以换成类似的命令。不同系统的安装方式可见WireGuard官网。
为了方便起见,以下都是使用root用户操作。由普通用户切换成root用户时,推荐使用su -
命令,否则可能出现命令不存在的错误。
1 2 3 4 5 6 7
| echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
apt update apt install -y resolvconf wireguard vim curl linux-headers-$(uname -r)
|
如果在最后一步安装提示linux-headers-$(uname -r)
不存在,说明你的内核可能有点旧了,需要升级,在尝试的过程中,失败率还是很高的,建议直接安装最新版本。
1 2 3 4
| sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
|
下面开始配置WireGuard。
1 2 3
| wg genkey | tee server.key | wg pubkey > server.pub wg genkey | tee client.key | wg pubkey > client.pub
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
echo " [Interface] PrivateKey = $(cat server.key) Address = 10.0.0.1/24 PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ListenPort = 50814 MTU = 1420
[Peer] PublicKey = $(cat client.pub) AllowedIPs = 10.0.0.2/32 " > /etc/wireguard/wg0.conf
|
配置文件里本来有一个DNS设置,我删掉了,因为后续会劫持DNS流量再做分流。
1 2 3 4 5 6 7 8 9 10 11 12 13
| echo " [Interface] PrivateKey = $(cat client.key) Address = 10.0.0.2/24 DNS = 114.114.114.114 MTU = 1420
[Peer] PublicKey = $(cat server.pub) Endpoint = 12.34.56.78:50814 AllowedIPs = 0.0.0.0/0, ::0/0 PersistentKeepalive = 25 "
|
这里需要修改Endpoint
为你的中继节点地址,VPS的话需要设置成公网IP。然后把输出复制粘贴到客户端配置中。
在客户端上点击激活/activate,如果一切顺利的话,打开IPIP就可以发现IP变成了VPS的地址。或者通过观察连接状态里的流量发送和接收数据,如果一直在增长,并且本机可以上网,说明配置正常。使用命令 wg
来检查连接状态。
一般来说VPS的路由比较好的话,就已经可以实现加速器的效果了,可以尝试打开游戏测试一下,如果对结果满意,后面就不需要了,毕竟挺复杂的。
代理安装(流量出国)
本文选取的是V2ray,因为它支持承载UDP协议,ss似乎也可以,但是配置就不太会了。根据相关法律法规,跳过安装步骤。
配置文件太长,以链接的形式给出。
config.transparent.json
需要修改其中的服务器配置,其中域名部分需要修改两次,仔细查找一下serveradd.com
。
修改了其中暴露服务的监听地址,其中dokodemo-door
设置成本地会出错,所以只能监听所有网卡,建议用外部防火墙过滤掉12345端口。
其中的dns国内解析使用了阿里的,如果使用本地DNS,需要修改路由。
流量拦截与转发
添加/usr/local/global.sh
文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -N V2RAY iptables -t mangle -A V2RAY -d 0.0.0.0/8 -j RETURN iptables -t mangle -A V2RAY -d 10.0.0.1/8 -p tcp -j RETURN iptables -t mangle -A V2RAY -d 10.0.0.1/8 -p udp ! --dport 53 -j RETURN iptables -t mangle -A V2RAY -d 127.0.0.1/32 -j RETURN iptables -t mangle -A V2RAY -d 169.254.0.0/16 -j RETURN iptables -t mangle -A V2RAY -d 172.16.0.0/12 -j RETURN iptables -t mangle -A V2RAY -d 192.168.0.1/16 -p tcp -j RETURN iptables -t mangle -A V2RAY -d 192.168.0.1/16 -p udp ! --dport 53 -j RETURN iptables -t mangle -A V2RAY -d 224.0.0.0/4 -j RETURN iptables -t mangle -A V2RAY -d 240.0.0.0/4 -j RETURN iptables -t mangle -A V2RAY -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A V2RAY -d 主网卡的IP段 -j RETURN iptables -t mangle -A V2RAY -s 主网卡的IP段 -j RETURN iptables -t mangle -A V2RAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A V2RAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A PREROUTING -j V2RAY
iptables -t mangle -N V2RAY_MASK iptables -t mangle -A V2RAY_MASK -d 0.0.0.0/8 -j RETURN iptables -t mangle -A V2RAY_MASK -d 10.0.0.1/8 -p tcp -j RETURN iptables -t mangle -A V2RAY_MASK -d 10.0.0.1/8 -p udp ! --dport 53 -j RETURN iptables -t mangle -A V2RAY_MASK -d 127.0.0.1/32 -j RETURN iptables -t mangle -A V2RAY_MASK -d 169.254.0.0/16 -j RETURN iptables -t mangle -A V2RAY_MASK -d 172.16.0.0/12 -j RETURN iptables -t mangle -A V2RAY_MASK -d 192.168.0.1/16 -p tcp -j RETURN iptables -t mangle -A V2RAY_MASK -d 192.168.0.1/16 -p udp ! --dport 53 -j RETURN iptables -t mangle -A V2RAY_MASK -d 224.0.0.0/4 -j RETURN iptables -t mangle -A V2RAY_MASK -d 240.0.0.0/4 -j RETURN iptables -t mangle -A V2RAY_MASK -d 255.255.255.255/32 -j RETURN
iptables -t mangle -A V2RAY_MASK -d 主网卡的IP段 -j RETURN iptables -t mangle -A V2RAY_MASK -s 主网卡的IP段 -j RETURN iptables -t mangle -A V2RAY_MASK -j RETURN -m mark --mark 0xff iptables -t mangle -A V2RAY_MASK -p udp -j MARK --set-mark 1 iptables -t mangle -A V2RAY_MASK -p tcp -j MARK --set-mark 1 iptables -t mangle -A OUTPUT -j V2RAY_MASK
|
iptables可以采用持久化的形式,不过因为容易出错,我一般倾向于在脚本里写。
1 2 3
| chmod +x /usr/local/global.sh
bash /usr/local/global.sh
|
不出意外的话,此时访问ipify就会显示代理的地址了。
加速器搭建成功~
开机自动启动
在 /etc/rc.local
文件中加上以下几行,以后开机就可以自动开启服务了。
1 2 3 4 5
| wg-quick up wg0
sleep 5
bash /usr/local/global.sh
|
这里有一点需要注意,如果你的中继节点ip不是固定的,需要自己在ip变更的情况下修改客户端配置。
结语
以上,就是自建游戏加速器的全部教程。
有看官可能要问了:折腾得这么麻烦,我直接买现成的加速器不好么?没错,有句话叫“世界加钱可及”,能用钱解决的问题,为啥还要花时间自己来折腾呢,况且省不了多少钱。其实我不玩那些FPS游戏,换了macOS之后对游戏也只能望洋兴叹,不过最近发现了GeForce Now这个宝贝,但是本地网络不佳,加上不是每一个应用都能设置代理,Proxifier又太贵了,实在是不觉得那玩意能值这么多钱。除此之外吧,自建加速器如果舍得花钱,可以比商业加速器得到更高的加速效果,而且不会因为使用人数太多带来质量下降;再有就是,不是所有游戏和终端都能用加速器加速,比如说不知名的小游戏,比如说switch。最后么,自建一个加速器还能睁开眼看看外面的世界,多么划算。
折腾了这么多,不由的有两个想法:外国的月亮就是更圆;有钱真好。真希望有一天,这片土地上不会再出现乐乐所说的真是闲的,花那么多钱搞自己人
。愿世界和平~
如果有对顶着国内高延迟玩Geforce Now是一种什么样的体验感兴趣的话,可以看一下我在油管贴的视频。文中使用了阿里云进行中转,国外使用了cn2gia线路。
Play The Elder Scrolls On GeForce Now
参考
透明代理
WireGuard
WireGuard 搭建和使用折腾小记
WireGuard 配置和上网流量优化
Debian 10 add rc.local
how-to-disable-ipv6-on-debian