0%

Switch自建NAT优化指北

Switch自建NAT优化指北

之前有一篇Switch的NAT自建加速方案遇到很多大哥和我讨论,在交流的过程中又学习了一些新的东西,很有意思。再订正一下之前写的东西,提供一个自建加速器的基本使用方案,因为纯软件实现方案总是不怎么靠谱,所以就把名字叫指北吧,借鉴自不知道什么时候看到的一个大哥写的教程的名字

本文仅提供纯软件解决方案,买个路由器刷固件理论上为最稳定方案,本文不做考虑

本文仅提供NAT类型优化方案,不一定能提升速度和联机质量,有说不清楚的地方可能在之前几篇相关文章中提到过了

目前的方案已经亲测可用了,(应该)不会出现之前的问题了吧。。。
之前的一些研究。。。
tag Switch

Clash流量接管

之前提到过,switch的代理设置只对TCP流量进行代理,就是Eshop下载和看新闻之类的功能,游戏大多使用的是UDP流量,所以不能仅通过Switch自带的代理设置加速游戏,场面上大部分的游戏都是UDP通信的,所以很多游戏加速器都是通过网络层接管流量进行代理
使用Clash for windows进行网络层的流量接管,照着百度配Service mode,新建一个Clash网卡开启TUN模式全局接管流量,具体表现形式为QQ登录地点变得诡异等

Clash流量接管有两种方式,都需要Clash启动Service mode。
一种是设置Switch和PC连接同一WiFi,把Switch的网关设置为PC,但是这个方案在后来使用的时候Switch一直报DNS解析失败,开启PC路由转发之后clash内存跑满CPU跑满也不能用。后来也忘了当初配置是咋调的了。。。。(就是一个旁路由方案,产生记忆紊乱?作者提到了windows下clash无法作为网关使用。。。直接放弃该方案)
clash windows tun模式 作为网关 没有转发其他设备的请求 #1865
第二种是PC再开一个热点,Switch直接连接热点,在网络适配器设置那把Clash的虚拟网卡和热点网卡进行共享,同样能接管Switch流量,但缺点在于switch联机的时候最好是代理全局,这样子TUN会把不仅是switch,以及PC上的全部流量进行代理。麻

2022.2.12 update

发现了优雅的解决方案
由于上述两种方案均需要clash启动service mode,即通过新建TUN设备的方式接管整台机器的流量。要么就规则难写,要么把QQ之类的代理了也很尴尬。
用GitHub上的这个项目,看到这里的时候我才真正理解了UU等加速器的实际实现原理以及我所需要的是什么样的一个解决方案。

说到底,我需要的是能够代理switch的流量,而switch本身不支持设置代理UDP流量。因此需要通过网关的方式来强行获取到switch的流量并进行转发。因此路由器刷固件是最优方案,而这里的临时方案使用PC来代替路由器,就会出现规则难写或者奇怪的网络问题崩盘或是PC流量全局被代理等问题。

而实际上UU等加速器要求你填一个网关,实际上应该是通过ARP欺骗的方式来把流量拐过来,再监听网卡把对应IP发来的流量按照代理规则进行转发。而不是直接把网关填PC让PC充当路由再配合全局代理把网络搞炸。。。

那么,这个解决方案不需要进行全局的代理,使用GitHub的这个项目即可,原理如上所述
所需工具 clash + pcap2socks
不熟练的用户可以配套使用其GUI图形界面,启用图形界面可以通过clash的UWP loopback功能,在桌面应用web查看器那栏勾上保存即可

使用图形界面的时候有一个测速和测延迟功能,会导致其一直向代理服务器发udp数据包,抓包研究的时候就很不方便,直接命令行启动也行
.\pcap2socks -s 172.24.2.102 -p 172.24.1.102 -d 127.0.0.1:7890 -i 网卡名

此时clash不需要启动TUN模式,这是我非常喜欢的一点,如果你选用pcap2socks图形化界面基本上一路下一步就行了。。。网卡选择上网的那块网卡,一般来说就是WIFI那块。最后的服务器直接填localhost:7890(7890为clash默认本地代理端口),就等于是把switch的流量捕获起来转发到clash了。然后clash中配好自己的服务器随意切换,快乐起来了。一般来说机场节点是有额外限制的,所以机场节点的链路质量虽然高,但绝大多数的NAT类型都极差,无法使用,有的机场可能提供游戏节点,也许就能拿来试试。

原理证明

用wireshark抓包看看是不是通过arp欺骗的方式来诱骗流量然后监听网卡进行转发的
这个是其生成的配置项
config.png

然后在switch上填好,wireshark抓包
arp.png
可以很显然的看到,switch认为自己的IP就是172.24.2.102(屁话),并开始寻找他的网关,172.24.1.102,而此时我们的PC就给他回了一个消息,说我就是172.24.1.102,这样switch的流量就会转发到PC上来了。

接下来switch正正常常的直接向其目的地发送请求,从172.24.2.102->8.8.8.8
被我们捕获下来,经过本地的环回发到7890的clash端口上,再从clash发出去,变成了192.168.1.102->代理服务器地址,然后再从代理服务器返回回来,最后由pcap2socks捏一个8.8.8.8->172.24.2.102的包返回去,完成一次交互
traffic.png

但这里PC是不能开启路由转发的,因为这个流量实际上是pcap2socks监听网卡来捕获,再重新转发出去的,开启路由可能导致不可预期的错误(说起来最上面的被弃置的方案1,可能又是因为没有开启路由转发导致了虽然设置了网关,但无法进行转发所以无法连接,但设置了路由转发,可能会因为出口网卡和Clash网卡产生环回流量而爆炸,因此该计划完全失败)

NAT类型提升

在自己的VPS上搭一个酸酸服务端(因为酸酸开销小,虽然理论上来说安全性不是很靠谱?),具体过程百度,自己写一个Clash规则添加VPS上去,Clash开全局代理
使用pcap2socks也可实现NAT类型改善
至于联机质量么。还是看你的机器用的线路以及和你联机的人的情况

一开始连校园网的垃圾网络
D.jpg
接上自己的小水管NAT类型就变成B了,如图
B.jpg
一开始还纳闷过公网VPS的NAT应该直接是A才对,后来思考了一下发现是阿里云自带的防火墙的问题,再把端口全开就能把NAT类型提升至A,如图
A.jpg
但是网络速度并没有什么太大的提升。。。

这里我一直想研究一下能不能区别Switch流量和PC的流量,毕竟开全局总是不怎么好。阿里云小水管的带宽也很有限,PC分一下感觉会亏很多,并且还会导致很多软件表现奇怪,比如QQ的香港登录。。。要不就得把PC上的东西都关掉(我现在就是这么做的)

但是使用强有力的pcap2socks就不用考虑流量分流了,不开全局,优雅,我爱
接下来的文章内容可忽略

代理流量分流

Clash是可以运行在路由器上的,所以规则也提供了SRC-IP-CIDR这种类型的规则,我身处的校园网网段是直接一个大的10.0.0.0/8,而开热点是在一个192.168.137.0/24,那么能不能设置一个SRC-IP-CIDR?
wireshark启动,抓包,分别抓了WiFi网卡和热点网卡的流量,发现热点网卡上确实显示的是192网段对外部发出了请求,而WiFi网卡上则把这个请求一样是当做本机的请求发出了,显示的是本机10网段上发出的。也就是PC开热点并不能让自己成为一个路由器,而是再进行一层NAT。NAT出来之后还是认为是PC本身发出去,不能通过源IP的形式进行判断

同理,指定进程代理和指定目的地址或目的端口代理也不行。如果Windows的热点是一个单独的进程还好说,目前没找到。Switch通信时的IP因为是P2P类似的模型,不能确认,同样端口也是高位端口随机抽取,所以目的端口也不行。

评论区某不知名大哥的建议

使用小米随身WiFi时,小米随身WiFi有专门的软件,经过小米WiFi的流量会全部经过这个软件,就可以用proxifier,netch这类的工具直接进行软件的流量代理,做到定向的流量接管,买一个十几块钱,但是还是懒的搞。并且作用也就是将全局代理替换到了固定代理,用处不一定大

找到了一个360免费WiFi,纯软件开热点,可能就能做到小米WiFi的效果而不用买东西?但是360的产品不太放心呢。。。。

用outline全局接管,和Clash感觉没什么区别,不过那个大哥说outline稳定一点?暂时感觉好像没什么区别,clash现在好像也挺稳的

路由器刷固件,应该就很多教程,神仙写的超级固件也功能齐全,自带UDP转TCP伪装加密冗余各种功能,不过我写的Switch简陋自建加速器这一堆东西的初始出发点就是纯软件实现不买东西,所以也就算啦

网速测定

怎么样来查看自己的机子网络质量如何呢?
我现在才发现原来站长之家这么好用。。。
可以比较显式的看出来自建的服务器和全国各地的连接情况,能(理论上的)判断自建代理到全国各地联机的流畅情况
一个全球ip ping测速,发现我的阿里云小水管到全国各地的网速都不错,到香港日本的速度也不错,不过到美国加拿大那边就不太行了。国内联机的话整体就没什么问题了,好友开个加速器挂香港日本节点应该也不会卡
还有一个路由线路追踪,也蛮好用的,比直接traceroute自己一个个查ip舒服多了,唯一缺点就是他提供的起点有限,还是和自己traceroute的路由跳不太一致

综合测定就是阿里云小水管行!服务质量整体靠谱,延迟不错丢包率低,已经不止是能用就行的级别了(就是带宽小了点,不过打个switch小游戏小带宽也能用)