最近猛男必玩游戏——《集合啦!动物森友会》风靡全球,几天的蠢蠢欲动之后本宅也入了手,在等发货的时候就在想,家里的网络玩switch一直显示的是网络等级B,即使挂了代理也是一样,原本以为是服务器延迟的问题,但后来想到switch是全球联机,其对游戏的延迟不应该有太高要求才对,所以必然是哪里出了问题,经过一番搜索后发现正常的代理都是tcp代理,而玩游戏跑的是udp流量,这样驴唇不对马嘴,能好使才怪了!
查阅了一些教程后,发现自建游戏加速器并不难,而且掌握原理后并不只局限于switch,搭建的加速器对所有游戏和平台都适用,网传这样比付费加速器效果还会好一些,毕竟不用和别人挤在同一台加速服务器了,还能有效利用手头的一堆吃灰vps资源~
在往下看之前,需要一点点前置条件:一台可刷机的路由器(pc玩家可忽略),一台到国内连接状况尚可的vps服务器,以及操作Linux系统的一点小常识~
如果自认没问题的话就可以往下看了,首先先介绍一下游戏加速器的原理,先以简单一点的UDP加速器为例:
graph LR
id0((udp)) --> id1{UdpSpeeder}
subgraph 路由器 Router
id1 --> id2((udp)) --Udp2raw --> id3(tcp)
id1 --> id21((udp)) --Udp2raw --> id31(tcp)
end
subgraph 加速服务器 Server
id3(tcp)--Udp2raw-->id4((udp)) --> id5{UdpSpeeder}
id31(tcp)--Udp2raw-->id41((udp)) --> id5{UdpSpeeder}
id5{UdpSpeeder} --> id6((udp))--> id7(proxy)
end
id7 --> id8>Nintendo]
当你打开switch,switch向路由器发出一个udp数据包后,首先我们使用Udpspeeder这个软件进行多倍发包,这样是为了降低丢包率,只要这几个包中有一个包到达就可以继续游戏,之后,我们利用Udp2raw这个软件将udp包转换为tcp包,这一步是为了防止电信运营商的Qos:目前由于未知原因,只要运营商发现你跑udp流量就会实行降速丢包,如果你不想每隔一两天就要路由重新拨号的话,建议使用此方法来规避Qos。
当你的数据包抵达你的服务器后,首先抵达的是Udp2raw监听的端口,Udp2raw会将tcp流量包转换为udp包,然后转发给UdpSpeeder,由其整合收到的数据包恢复完整,然后转发给你的代理软件,然后代理软件转发给任天堂实现代理上网。
如果你能看懂这个的话,那tcp游戏加速的原理想必对你来说也没有难度了:
graph LR
id0(tcp) --> id1{KCP}
subgraph 路由器 Router
id1{KCP} --> id2((udp)) --Udp2raw --> id3(tcp)
id1{KCP} --> id21((udp)) --Udp2raw --> id31(tcp)
end
subgraph 加速服务器 Server
id3(tcp)--Udp2raw-->id4((udp)) --> id5{KCP}
id31(tcp)--Udp2raw-->id41((udp)) --> id5
id5 --> id6(tcp)--> id7(proxy)
end
id7 --> id8>Nintendo]
tcp加速和udp加速只有一点区别,udp的多倍发包使用的是UdpSpeeder这个软件,而tcp的多倍发包是利用Kcptun实现的,其他并无区别,但就这一点区别导致了tcp流量鬼畜套娃式的游戏加速:一个tcp流量在加速过程经历了四次转换!
希望你到这里还没有蒙圈,可能因为理科生的缘故,我倾向把一个事情的原理和逻辑尽可能地讲清楚,当然如果你就是没有看懂也没有关系,可以无脑按照下面的代码执行就可以了
— 服务端搭建 —
首先现在服务器端安装软件:
apt -y update
apt -y install shadowsocks-libev supervisor wget nano
下载Udp2raw:
mkdir -p /opt/udp2raw && cd /opt/udp2raw
wget https://github.com/wangyu-/udp2raw-tunnel/releases/download/20190716.test.0/udp2raw_binaries.tar.gz
tar -xzvf udp2raw_binaries.tar.gz
chmod +x udp2raw_amd64
下载UdpSpeeder:
mkdir -p /opt/udpspeeder && cd /opt/udpspeeder
wget https://github.com/wangyu-/UDPspeeder/releases/download/20190121.0/speederv2_binaries.tar.gz
tar -xzvf speederv2_binaries.tar.gz
chmod +x speederv2_amd64
编辑ss的配置文件:
nano /etc/shadowsocks-libev/config.json
#----------修改为如下内容,记得设置密码-------------
{
"server": "0.0.0.0",
"mode":"tcp_and_udp",
"server_port":30003,
"local_port":1080,
"password":"设置你的ss密码",
"timeout":60,
"method":"chacha20-ietf-poly1305"
}
重启ss以及设置ss开机自启:
systemctl restart shadowsocks-libev
systemctl enable shadowsocks-libev
新建一个udp2raw的supervisor配置文件
nano /etc/supervisor/conf.d/udp2raw.conf
#----------修改为如下内容,记得设置密码-------------
[program:udp2raw]
user=root
priority=1
directory=/opt/udp2raw
command=/opt/udp2raw/udp2raw_amd64 -s -l 0.0.0.0:30001 -r 127.0.0.1:30002 --raw-mode faketcp -a -k "记得设置密码"
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/udp2raw.log
再新建一个udp2speeder的supervisor配置文件
nano /etc/supervisor/conf.d/udpspeeder.conf
#----------修改为如下内容,记得设置密码-------------
[program:udpspeeder]
user=root
priority=1
directory=/opt/udpspeeder
command=/opt/udpspeeder/speederv2_amd64 -s -l 0.0.0.0:30002 -r 127.0.0.1:30003 -k "密码同上" --mode 0 -f 2:2 --timeout 0
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/udpspeeder.log
更新supervisor配置/开机自启:
supervisorctl update
systemctl enable supervisor
— 客户端搭建 —
下面进入客户端配置,我这里用的是Koolshare修改的梅林版本,软件商店中带科学上网插件,进入插件中Udp加速部分,可以直接设置Udpspeeder和Udp2raw:
(这里只要是支持刷机或者命令行操作的路由器都可,具体就麻烦你自己折腾啦)
这里根据推荐是将Fec参数设为2 : X,你要觉得效果不好还可以接着增加X值
设置好后记得模式选择[3]游戏模式,否则默认是不代理Udp流量的
现在打开你的switch,如果你的vps线路不是垃圾到爆的话,网络类型应该显示为A了,搞定了!
— 其他:Tcp游戏加速 —
Tcp无非就是把Udpspeeder换成tcp即可:
下载kcptun:
mkdir -p /opt/kcptun && cd /opt/kcptun
wget https://github.com/xtaci/kcptun/releases/download/v20200201/kcptun-linux-amd64-20200201.tar.gz
tar -xzvf kcptun-linux-amd64-20200201.tar.gz
chmod +x server_linux_amd64
新建kcptun配置文件:
nano /opt/kcptun/server-config.json
写入如下配置(MTU设置为1300或者更小):
{
"listen": ":30000",
"target": "127.0.0.1:30003",
"key": "设置一个密码",
"crypt": "salsa20",
"mode": "fast3",
"mtu": 1300,
"sndwnd": 1024,
"rcvwnd": 1024,
"datashard": 2,
"parityshard": 2,
"dscp": 46,
"nocomp": true
}
注:这套是游戏加速的配置,如果是看Youtube视频等大流量应用,需要把datashard以及parityshard适当增大。
新建一个kcptun的supervisor配置文件:
nano /etc/supervisor/conf.d/kcptun.conf
写入:
[program:kcptun]
priority=1
directory=/opt/kcptun
command=/opt/kcptun/server_linux_amd64 -c /opt/kcptun/server-config.json
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/kcptun.log
如果你是Tcp加速的话,记得把Udp2raw中转发的端口从30002改为KcpTun监听的30000端口,因为我的路由不支持双开udp2raw,所以这步及路由器端的配置我就先不写了~