Sonatta: 生活小栈

利用 ClashX Pro,加速你的 Switch

2022-08-10 · 9 min read
Switch Clash 优化 Mac

注:理论上下文内容同样适用于 PlayStation、Xbox 等主机。

前言

作为一个不怎么打游戏的人,做梦也不会想到我会在 2022 年入坑一台 2017 年发布的游戏机,并死心塌地了给任地狱上供了不少钱,但是随着玩的越发深入,非国行 Switch 的许多问题也暴露出来(为什么我一定要强调非国行,难道真的有人买国行吗……),总之,本文旨在针对其中最大的痛点之一,也就是网络连接的问题提出一些解决方法,希望对各位有所帮助。

原因

原因其实不必多说,作为一款国行与非国行有着明显差异的主机,自然没有考虑到国内的网络环境,再加上任地狱的联机方式基本都是P2P(为了省服务器的钱真是太拼了.jpg),导致体验非常差,这种体验差主要体现在两方面:

  • 游戏下载速度过慢
  • 线上联机体验差

大部分国内玩家遇到这种问题基本都是花钱买加速器解决,但是迫于囊中羞涩,我肯定是不会买买不起加速器的,不过我很快找到了方法解决这个问题。

分析

想要解决这两个问题还是比较简单的,思路就是只要能让电脑的代理工具代理 Switch 的网络,那不就跟在国外用 Switch 一个体验了吗,也就是说,只要我们让担当旁路由一职就可以了。

在开始之前多说两句,线上联机体验如何,一个重要指标就是 NAT(Network address translation),Switch 设置里用等级表示,例如我家中的辣鸡移动网直连,NAT 类型显示为 C

根据说明,C 型属于能连但是体验不好的等级。一般来说,想要有良好的联机体验需要 NAT 类型为 A 型或 B 型(A 型最佳),具体可以看官方说明(腾讯),这也就是我们今天的目标,本文不做原理说明,只展示如何操作。

首先需要确保你的节点支持 UDP 转发,本文用 Mac 上的 ClashX Pro 进行演示,如果你是 Windows 用户,据说 Netch 是更好的选择,或者使用 CFW 理论上可以达到同样的效果。

启用 TUN 模式下的 UDP 转发

想要提升联机体验,最关键的便是实现 UDP 转发,为此我们先启用 ClashX Pro 的增强模式(Enhanced Mode)。

注:如果只是想把电脑作为旁路由,并不需要修改配置文件,这样做的具体原因会在后文说明。

打开配置文件夹,添加 yaml 文件头(如果机场的给定的配置文件里有类似内容则只需确保添加 tun: 及其以下内容即可):

dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  nameserver:
    - 119.29.29.29
    - 223.5.5.5
    - 1.1.1.1
    - tls://dns.rubyfish.cn:853
  fallback:
    - tls://1.1.1.1:853
    - tls://1.0.0.1:853
    - tls://dns.google:853

tun:
  enable: true
  macOS-auto-route: true
  macOS-auto-detect-interface: true

下拉到规则部分,添加一行规则:

- SRC-IP-CIDR,ns-lan-ip/32,Proxy

将 ns-lan-ip 部分替换为 Switch 的 IP 地址,可以在设置-互联网页面看到:

Proxy 部分则替换为对应的代理即可,保存,更新一下配置文件,此时在 Connections 下应该可以看到出现了一个 198.18.0.1 的地址,这里是因为我们使用 fake-ip 的结果,重点看 Type 一栏,显示为 TUN,这证明我们已经成功启用了 TUN 模式。

Switch 下的配置

Switch 下打开设置-互联网-互联网设置-选择对应 Wi-Fi -更改设置,将 IP 地址设置、DNS 设置两项改为手动,其中 IP 地址填 Switch 的 IP 地址,子网掩码保持默认的 255.255.255.0,网关和首选 DNS 均填电脑的 IP 地址,备选 DNS 随意填(因为用不到)。

如果你不知道电脑的 IP 地址,可以从 ClashX Pro 下查看

保存,退出,这时 Switch 应该已经自动连接 Wi-Fi 成功,如果没自动连上手动选择连接此网络。连接成功后看电脑端 ClashX Pro 的 Connections 页面,出现了 Switch 的 IP 地址,Host 部分可见 nintendo.net 字样,可见 Clash 已经成功接管了 Switch 流量,Type 一栏同样显示为 TUN,到这里代表我们应该已经成功。我们跑一下 Switch 的连接测试,此时 NAT 应该已经变为 B 以上……

嗯?怎么 NAT 从 C 变成 F 了……我们一通操作,联机体验怎么反而还下降了……

vmess 协议背大锅

这里我们的操作理论上是没有问题的,但是为什么 NAT 等级下降了?经过一番查找,答案是如果你的节点是 vmess 协议,在这个环节就会出问题,据说是 UDP 转发有问题,看上去除了 vmess 的其他几个协议(Trojan、SS、SSR)都是可以的,于是我立刻换用 SSR 协议的节点,再次跑一下 Switch 连接测试:

可以看到 NAT 成功变为最高的 A 级,这也代表我们成功改善了联机体验,无论是 NAT 等级还是上传下载速度皆有很大提升。

这就是为什么在上文我有一个修改 config 文件的操作,主要是因为我的常用节点都是 vmess 协议的,同时用特定规则 SRC-IP-CIDR 实现了让 Switch 一个设备走 SSR + fake-ip( 规则 SRC-IP-CIDR 后加 Switch IP 地址,通过这样的方式指定 Switch 设备。具体见下图,可以看到 Switch 流量走了 SRC-IP-CIDR 规则),当然如果你觉得改 config 文件太麻烦可以跳过不做,只要满足上述条件同样可以实现 NAT B+。

哦对了,拿 Mac 做旁路由还有一个好处,那就是性能管够,这一部分应该是不会掉链子的,如果体验不畅大概率是节点背锅,不过也有可能是无线连接不太行,可以给 Mac 接网线试试。以及说白了加速器大致也是类似的原理嘛,没必要花两份钱,这不是冤大头嘛。

另一种方法

感觉内容稍微有点少,这里补充另一种更简单的方法,也就是设置代理服务器的方法,这也是网上提到最多的方法,思路很简单,且同样可以通过 ClashX Pro 实现,但是它也是有缺点的,这种方法只能改善网络的传输速度,并不能挽救你的联机体验。

同样打开 ClashX Pro,这时打开的不是增强模式(Enhanced Mode),而是打开允许通过 LAN 连接(Allow connect from Lan),电脑端的操作就结束了,这时打开 Switch,同样进入互联网设置,将代理服务器设置改为开启,填入电脑的 IP 地址和端口

同样,不知道电脑的 IP 地址和端口号的可以从 ClashX Pro 下查看。

跑一下网络测试,可以看到上传下载速度均有提升,但是 NAT 等级岿然不动。

因此这种方法只能用来提升游戏的下载速度,个人是不太推荐的,不过这个方法对节点没什么要求,节点不合要求的可以用这种方法。

总结

虽然这篇文章是 8 月 10 号写的,但是因为忘了写惯例的总结,所以这里是 11 号写的,说实话……感觉没有什么可以总结的,昨晚任地狱也是开了 Splatoon 3 的迷你直面会,还有大概两周多的时间 Splatoon 3 的前夜祭(试玩)就要开了现在感觉全身有鱿鱼在爬,感觉这篇文章写的时间很不错,总之希望本文能够帮到你。

2023 年 5 月 9 日更新: 最近逛论坛的时候看到有人提到优化 Splatoon 3 的一种思路,可以有效优化联机体验,操作如下:

打开配置文件夹,修改对应配置文件,在规则部分添加如下规则:

- DOMAIN-SUFFIX,npln.srv.nintendo.net,DIRECT
- DOMAIN-SUFFIX,n.n.srv.nintendo.net,DIRECT
- DOMAIN-SUFFIX,nintendo.net,Proxy

其实思路很简单,联网检查(nintendo.net)流量走代理,而 P2P 流量不走代理,这样可以既保证不掉线又不提高游戏延迟,确实是很巧妙的做法。而且本方法应该不需要节点的 UDP 转发,不挑节点。

最后骂一句任地狱,猜到喷 3 联机体验会差,没有想到这么差,修修你那破网吧任天堂!

参考:

请教TUN模式下UDP转发 · Issue #971 · Dreamacro/clash

TUN下以及兼容模式打开UDP转发下,Switch NAT F · Issue #1997 · vernesong/OpenClash

PS4 怪物猎人 无法联机 · Issue #1076 · vernesong/OpenClash