测试 UDP 时,发现 Clash 始终报错 listen udp 0 An invaid argument was supplied
查到一些相关资料,但应该也不是禁用了 IPv6 背锅,并且 clash 后续版本也修复了这个问题
https://github.com/Dreamacro/clash/issues/1872
https://github.com/Dreamacro/clash/issues/971
系统通过注册表方式彻底禁用了 IPv6,并检查了网卡适配器所有 IPv6 支持已经停用,Clash 版本 v0.20.18,订阅配置、clash 设置均已禁用了 IPv6,节点也是支持 UDP,订阅的配置文件也设置开启了 UDP 转发
port: 7890
mixed-port: 7890
allow-lan: true
bind-address: "*"
mode: rule
ipv6: false
external-controller: 0.0.0.0:9090
secret: 123456
clash-for-android:
append-system-dns: false
cfw-latency-timeout: 5000
clash 规则策略也没什么问题,就是发起连接直接报 UDP dial failed
,An invaid argument was supplied 翻译一下,提供了无效参数
实在找不到问题,死马当活马医了,换了多个说支持 UDP 的节点,最后在换到某个节点,成功发起 UDP 连接
这里是很奇怪的,我是使用了 Netch 的全局模式 和 Clash TUN 做的对比测试,同样的节点,Netch 上面 UDP 检测通过,并且实际游戏也正常使用 UDP 连接,在 Netch 的 控制台检查日志也是正常实现了 UDP 通讯,游戏也没有异常
相同的节点,Clash TUN 模式下却报错,也的确在游戏中出现异常
唯一个细节是,测试的失败节点都是使用了 shadowsocksR 协议,成功的那个是 Vmess,且不知道上游使用的什么 v2ray 内核、版本实现的,因手头也没其他节点测试了,将就用着了
而且好像也不是标准实现的通讯, 在 RFC 3489 范畴里,尽管 UDP 打洞成功,却不知道 NAT 类型是不是 Full Cone
好在游戏没那么报错,延迟也正常,不管了