OverRainbow

Switch借助xray透明代理达成NAT full cone

☕️ 1 min read

你可以从本文了解到

背景

switch联机游戏大多是p2p方式,之前经常会遇到NAT穿越失败的问题,有时候不得不用加速器才能连接成功。

当时也是有点困惑,我已经用vps代理了,而且vps是有公网独立ipv4地址,按说不应该会存在NAT穿越失败问题。当时也没有深入去想这个事情,就在我心里一直是一个bug。

而最近我在看到xray的一些更新历史的内容中提到了NAT相关的内容,比如下面这些。

如何实现full cone呢

1.3.0更新内容

总之就是说v2ray在NAT上有bug,而xray修复改进了这个问题。

话不多说下面就讲讲如何从v2ray迁移到xray。

从v2ray到xray

服务端

由于xray是fork的v2ray,因此在协议上是基本兼容的。

如果之前用的是vmess协议,我们切换到时候基本上可以复用v2ray的配置。

需要做下面几个事情(下面都是以root权限)

1、运行自动安装脚本

# bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

2、把v2ray的配置json复制到xray

cp /usr/local/etc/v2ray/config.json /usr/local/etc/xray/config.json

3、停掉v2ray,启用xray

systemctl stop v2ray
systemctl restart xray

4、自己用客户端进行连接测试,如果ok,则禁用v2ray的自启动服务,改成用xray

systemctl disable v2ray
systemctl enable xray

客户端

我这边试验下来,如果客户端之前是小火箭、v2rayN、树莓派,那完全就是兼容的,不需要升级。

走向NAT full cone

这里需要注意的是,如果客户端是基于v2ray-core,那就不能实现full cone,必须用xray-core。

因此,我的树莓派是作为家庭透明代理网关的,我的switch如果要用NAT full cone就得将v2ray替换成xray。

linux的无论是客户端还是服务端替换方法是一毛一样的,这里就不赘述了。区别只是json配置文件的内容不一样而已。

至此,switch连上树莓派的透明代理之后,就可以做到NAT full cone了。不会再有遇到明明是nat类型是B却连不到其他玩家的情况。

总之一句话就是:xray+透明代理。

补充几个测试结论

1、vps端 在开warp的nat类型是B。(主要取决于vps的网络环境) 不开warp使用原生ip的nat类型是A。

2、树莓派和ns 树莓派开xray,ns通过pi的透明代理,nat类型与vps的nat类型一致(与加速器效果类似) 树莓派开v2ray,nat类型b,有大概率nat穿越失败。

ns不通过透明代理,直接配http代理,(不管是xray还是v2ray)nat类型是b,有大概率nat穿越失败。

结论 最佳配置:xray+透明代理+warp 既能p2p,又能看netflix,相对比较完美啦。

在ns运动里尝试了可以直接和大多数玩家稳定联机,以后就不需要加速器了。