MENU

自建Switch游戏加速器指南

March 31, 2020 • 极意阅读设置

  最近猛男必玩游戏——《集合啦!动物森友会》风靡全球,几天的蠢蠢欲动之后本宅也入了手,在等发货的时候就在想,家里的网络玩switch一直显示的是网络等级B,即使挂了代理也是一样,原本以为是服务器延迟的问题,但后来想到switch是全球联机,其对游戏的延迟不应该有太高要求才对,所以必然是哪里出了问题,经过一番搜索后发现正常的代理都是tcp代理,而玩游戏跑的是udp流量,这样驴唇不对马嘴,能好使才怪了!

  查阅了一些教程后,发现自建游戏加速器并不难,而且掌握原理后并不只局限于switch,搭建的加速器对所有游戏和平台都适用,网传这样比付费加速器效果还会好一些,毕竟不用和别人挤在同一台加速服务器了,还能有效利用手头的一堆吃灰vps资源~

  在往下看之前,需要一点点前置条件:一台可刷机的路由器(pc玩家可忽略),一台到国内连接状况尚可的vps服务器,以及操作Linux系统的一点小常识~

  如果自认没问题的话就可以往下看了,首先先介绍一下游戏加速器的原理,先以简单一点的UDP加速器为例:

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游戏加速的原理想必对你来说也没有难度了:

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:

  (这里只要是支持刷机或者命令行操作的路由器都可,具体就麻烦你自己折腾啦)

Udpspeeder

  这里根据推荐是将Fec参数设为2 : X,你要觉得效果不好还可以接着增加X值

Udp2raw

  设置好后记得模式选择[3]游戏模式,否则默认是不代理Udp流量的

  现在打开你的switch,如果你的vps线路不是垃圾到爆的话,网络类型应该显示为A了,搞定了!

AAA

  

— 其他: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,所以这步及路由器端的配置我就先不写了~

Leave a Comment

6 Comments
  1. Someone Someone

    ss 代理现在有深度探测,一会儿就被封了。

    1. @Someone这里可以改成其他的方式,端口对应就行了,你要真稳定就上iplc,玩个游戏还要开tls伪装的话感觉太累了.....

  2. suen mahin suen mahin

    博主您好,想问下,1.不要求延迟的情况下,v2ray和trojan是否可以用以上方式加速UDP?2.如果想同时加速TCP和UDP,整个的链路需要怎么部署呢,是否会涉及到端口占用的情况?希望能得到您的回复,谢谢。

    1. @suen mahin1.都是可以的,这些软件只是起到多倍发包和更改类型的作用,和数据包本身是什么无关,另外这些加速本身对延迟影响不大。
      2.一般来说大部分游戏不需要同时用到两种,如果两种都需要加速就是分别设置,不同的数据包过不同的端口加速后再汇入同一个SS端口即可,你稍微捋一下就不会有端口冲突的问题,不复杂的。

  3. grubby grubby

    谢谢大佬,我在网上找了很久,才找到这篇路由UDP加速的文章。和你一样,我也想加速动物之森,但是我路由器是openwrt 木有这2个插件,而且用的还是torjan,请问如何操作呀@(泪)

    1. @grubbySSH登路由器然后命令行操作就行了,不过我现在发现只要线路不是太垃圾,直接用UDP代理就行,不用非要加速的,动森如果不能联机主要是端口映射的问题,如果能联机直接开个UDP代理就足够了