0%

Switch自建加速终章

Switch自建加速终章

短时间内不会再研究这个东西了,到最后感觉还是竹篮打水一场空。。。但是发现之前写的东西似乎有一点问题,订正一下然后最后总结一下这几天都干了什么奇怪的事情

2022.2.12 update

写在前面
套娃操作实际意义不大,起码我目前从未见识过所谓的UDP断流等情形,switch联机的P2P性质使得游戏体验在理论上由几个因素决定:1.NAT类型,NAT类型决定了联机进入房间的成功率,NAT到A只要丢包不严重你就是人上人;2.出口点之间的网络环境,比如你开个加速器飞去美国,然后国内裸连卡比就等于是从国内连你,还是卡,但是你们俩都飞美国或者都在国内,可能就很顺畅了。比如我和我大哥直接校园网畅快联机。。。3.网络链路质量,正常人一般使用的都是家用网络,总是能在网上看到说这个机房去程xx线路回程xx线路的。如果是很好的线路应该就不用考虑丢包延迟问题了,因此自建时服务器所使用的链路应该影响也很大。
还是推荐一下后来更新的较稳定方案
且该套娃方案可能由于工具本身的问题,会导致NAT类型的退化,不建议用于Switch P2P联机加速,反而可能对某些PC端CS类型游戏有效
Switch自建NAT优化指北

—————原文章内容分割线————–

前言

想要获得直接的加速体验请直接出门左拐UU/灵缇,本教程并不能保证获得更好的游戏体验,完全只是出于兴趣成功搭建起了一个奇怪的代理
复习一下之前说过的东西,因为任天堂不提供游戏服务器,无论是动森还是MH这些游戏,虽然说是房主当Server,但是实质上还是类似P2P,反正都是玩家之间互相联机,所以和绝大多数PC网游的加速流程有略微的区别。
NAT类型只决定两个玩家之间的网络可达性,当两个玩家之间达到了可达的最低要求成功联机之后,联机的体验取决于两个玩家之间网络链路的延时情况,服务质量,丢包情况等。主要的影响因素有UDP本身的不可靠性,互联网运营商对在网络拥塞时对UDP的断流(好像在南京没遇到过,晚上网络高峰也不怎么丢,但是我家里小县城好像有点严重),电信联通移动运营商之间互相卡脖子,出网误伤等。
自建服务器顶多使得NAT类型从垃圾校园网的C,D提升到B(能用就行)并不能太多的改善网络通路情况,并且真的好麻烦。。。网络垃圾学了好久才搞懂,如果是不怎么使用计算机的小白想搞定就更麻烦了,总的来说,完全不值得,我完全是出于一种奇怪的兴趣而在这个上面花费了这么多时间。

最直接的解决方案,UU,灵缇一键搞定(结一下这个月的广告费谢谢),他们都是搭的专线并且软件订制稳定靠谱,自建时需要的服务器也是一笔开支,如果是就着机场的节点可能会由于机场自身的限制NAT-type变得更为拉跨,如果是自己买的vps地区和好友开的加速器节点位置诡异也会异常的尴尬
比如我其实是用阿里云的上海VPS加速,还没试过和各地联机效果(理论上应该是国内联机效果应该比较好,然后就算是好友开外国节点上海出网应该也还能用?)

正文

clash网关接管失败

之前通过PC和Switch连入同一个WiFi,再将Switch手动把网关设置到PC,clash开启ServiceMode接管所有网卡流量,可以做到对Switch的全局流量接管转发UDP。但是,一个寒假回来忘记之前的操作是怎么做的了,现在Switch连接同一个WiFi设置网关为PC会报错DNS解析失败,连不上去。wireshark抓包完全没看到Switch和PC的通信,不知道是哪里出问题了呜呜。

超简易NAT-type提升方案

但是,clash经过几次更新似乎在某个版本修复了同时启动TUN模式和热点会导致出现网络回环原地爆炸的问题,现在可以在启动TUN模式的同时开一个热点,去网络适配器选项里面选中Clash网卡,选中”共享”选项,共享的网卡填开出来热点的那块网卡,Switch连热点同样能做到全局流量接管,在vps上配一个酸酸乳(后面优化要用),clash里面自己写个节点进去连上,NAT类型成功从校园网锁定的C或D提升至B(但是上下行流量速度并不怎么样,5M小水管是这样的,能用就行.jpg),用机场的节点NAT类型变成了F。。。所以还是自己的机子靠谱,机场不知道上了什么限制

至此,NAT类型到B就起码拥有呼吸权了,接下来就想办法看看怎么优化一下流畅程度什么的?

why SSR?

理论上v2ray和Trojan都能套这个,出云巨佬和我说过这事但是那个时候的我什么都不懂嘻嘻,所以就没学,好像说v2怎么个反正就是不适用?要套就套Trojan,不过好像酸酸乳比较古老比较成熟,网上教程也一搜一把,并且也没钱买路由器刷固件搞Trojan,进入拉倒状态。本身机子就在国内,酸酸乳也不出墙,应该不会被封吧呜呜
然后就是这个用酸酸乳能减轻VPS本身位于国外时的出口干扰(虽然我的VPS在国内所以好像没什么意义。。。直接用Socks5好像也行)

udp2raw+udpspeeder

理论上是用来防止运营商断流和改善UDP的不可靠性两个工具,配置起来也不难,就是不知道是不是真的有用
udp2raw将udp流量伪装成tcp流量,目的是阻止运营商断UDP的流,需要一个客户端一个服务端,客户端加密流量服务端解密流量,服务端出去的还不是UDP,只能说防的是地方运营商但是配出来之后感觉并没有得到什么改善,可能南京这边比较靠谱
udpspeeder通过发送冗余流量降低丢包率,网络拥塞时丢失的包能够通过冗余包恢复,具体情况可以去GitHub上看作者写的解释。同样一个客户端一个服务端,客户端发冗余服务端解冗余,所以客户端和服务端需要进行套娃

安装步骤简单的不行,都是编译好的二进制文件,所谓的开箱即用
套娃命令如下
服务端

./speederv2_amd64 -s -l127.0.0.1:port  -r127.0.0.1:ssr_port --mode 0 -f4:2 --timeout 1
./udp2raw_amd64 -s -l0.0.0.0:server_port -r127.0.0.1:port -k "passwd" --raw-mode faketcp -a

客户端

speederv2.exe -c -l0.0.0.0:client_port -r127.0.0.1:port --mode 0 -f4:2 --timeout 1
udp2raw_mp.exe -c -l127.0.0.1:port -rserverip:service_port -k "passwd" --raw-mode faketcp

因为两个工具都是同一个大哥写的,所以参数含义都一样
简要说一下参数-s标记自身为服务端,-c标记自身为客户端,-l提供一个监听的ip:port,-r把自己处理的数据转发到指定的ip:port
udpspeeder的-f参数指定冗余情况,4:2就是指每四个包冗余两个,冗余越多丢包率越低,10:5的冗余是一样的,但是消耗的CPU会多,但是4:2的话6个包发一次又有点频繁,总之就是自己看网络情况决定了,udp2raw的-k参数指定加密密钥,好像没有什么安全性要求。。。这两个参数客户端和服务端要一致

再套一个端口映射服务,具体可以看文末参考链接

套娃过程

客户端启动SSR客户端(可以是clash,sstap之类能接管全流量且支持酸酸乳的任意软件),把代理设置为本地的client_port,udpspeeder监听client_port,把收到的酸酸乳加密流量变成冗余过的udp流量发到port,udp2raw监听的也就是port,所以冗余过的流量就传给了udp2raw,udp2raw再把伪造成tcp的流量发到远端vps的server_port
vps上反过来,先是udp2raw接收到我们本地发过来的伪造tcp流量,解回udp之后转发到自己的port上,而udpspeeder监听本地的port,拿到还原回来的冗余流量,处理出来之后转发到本地的ssr_port,发到我们的酸酸乳服务端,酸酸乳服务端再解密转发出去完成代理
整个就是 酸酸乳客户端->udpspeeder客户端->udp2raw客户端->udp2raw服务端->udpspeeder服务端->酸酸乳服务端

小bug

udp2raw客户端跑不起来,报如下错,搜了一下,说是npcap没装(事实上我之前装nmap还是啥的时候就装了1.0版本的,后来换了一个1.2的重装一下就成了)

[INFO]avaliable deives(device name: ip address ; description):
[FATAL]no matched device found for ip: [10.203.240.119]

使用套娃方式需要代理目的地位于本机,clash又会出现TUN模式下的流量回环,上行流量爆炸且CPU跑满只能任务管理器退掉

SSTap test

使用替代品SSTap做实验ing

SSTap在选择全局流量转发时也会进入回环状态上行流量爆炸且CPU跑满,如果不开全局,随便选一个其他规则就能正常三重套娃,但是偶尔UDP转发不能过,有时候又能过,反复在本地重启套娃服务偶尔能成(未找到具体原因)

感觉娃套起来之后好像也没见带宽变好。。。可能南京这块链路质量比较好?
还有一个奇怪的事情,SSTap并不能改善NAT类型,甚至恶化了,使用SSTap会导致NAT类型铁定为D,即使使用情况与clash完全一致。而clash会将NAT类型从C/D提升至B。
原因未知,但SSTap+Udp2raw+udpspeeder本身就是设计用来为PC游戏进行加速的,服务器本身就是游戏公司的公网服务器,因此不需要考虑NAT类型(可能是这个原因),而Switch要将就着这些东西用就很拉跨了

客户端服务端套娃服务先起,然后SSTap把酸酸乳服务器指向本地udpspeeder监听的端口就能完成套娃全套服务的实现了,就是完全没感受到套娃和不套的区别。。。

misc

一些遇到的乱七八糟的问题

需要先开TUN再开热点,在没有东西连进来的时候选择将TUN网卡的网络共享给热点网卡才能保证不出现逻辑错误产生回环

似乎开热点的时候默认将出口网卡(我这里是WLAN)与其共享使之能正常上网,虽然在网络适配器里面不会直接显示出来,但是的确因为sstap修改了我的共享情况导致之后连接热点无IP分配而连不上,先让WiFi和热点共享一下再把clash和热点共享就又能恢复正常并全局接管了

DNS解析失败问题,似乎是clash的奇怪设置,时好时坏,最后把配置改成了这样,又能行了,电脑开热点的好处是IP和DNS都可以自动获取,少了一个手动分配IP地址什么的,还蛮方便的

mixin:
  dns:
    enable: true
    enhanced-mode: redir-host
    nameserver:
      - 8.8.8.8
      - 114.114.114.114
  tun:
    enable: true
    stack: gvisor
    dns-hijack:
      - 198.18.0.2:53
    macOS-auto-route: true
    interface-name: WLAN

后记

一开始是想做NAT穿透进行类似端口映射之类的,但是由于switch往外通信时的通信端口是不固定的,而常规的端口映射软件都是将内网一个固定的IP映射到公网上,计划不通。
还想过利用公网服务器做转发,利用阿里云商业网的链路可能稍微能提升一点网路质量,避开家用网络之类的,但是感觉南京这的网络整体也挺好的,转发也没什么用,倒是用Clash进行Socks转发NAT惊人的提升到了B类,原理未知
之后又看了奇怪的教程,想要进行UDP流量的优化,这种事情倒是网上一搜一把,很经典的UDP冗余额外校验和UDP伪装成TCP防止断流,可能在我老家小县城的运营商确实会做这些事情,但是还是只能说南京这边网络好像挺好的。。。
折腾到最后UDP加速套娃并不能带来太好的体验,甚至将NAT类型降级为D,主要原因还是PC游戏是有游戏公司的服务器,不是Switch这种玩家做服务器的实质上是P2P的模式,所以常用套路套在switch上并不适用。并且由于各种软件在本地环路上的处理,经常出现环路流量闭合自爆的情况,最后费时费力发现能用的也就是一开始的socks5转发能提升一个NAT类型,UDP优化在南京没什么用,回家之后不知道有没有意义。

说到底,费时费力搞了差不多一个星期,最后也没什么意义嘛。解决了一堆乱七八糟的没什么意义的问题倒是真的
也许回去之后也会直接买个UU一把梭,享受专线直通尊贵服务呢?

参考链接

UDPSpeeder+Udp2raw使用教程,并配合SSTap加速优化网络游戏
一键安装最新内核并开启 BBR 脚本
UDPspeeder推荐设置
ShadowsocksR+UDPSpeeder+Udp2raw+KCP实现网游加速