我似乎找到原因了,所以自己来APPEND一下。
在之前的尝试中,根据各种情况下的表现,我推测是ijk播放器的问题,但其实这是虚假的表象引导我走向了一个误区。
在浅显地研究了安卓VpnService后发现,安卓的VpnService是基于TUN的,但从API29开始,可以为VPN附加一个HTTP代理,也就是说,如果应用支持系统代理,便会走系统代理,否则便会走TUN。
此时我灵光一闪:会不是是系统浏览器支持系统代理,而tvbox的ijk不支持系统代理从而走了TUN导致的现象不一致呢?于是我到Clash Meta的设置里,关闭了"为VpnService附加HTTP代理"的选项,然后在系统浏览器输入了IPV6的地址,果然此时浏览器也无法访问该地址了。
于是我得到了一个新的结论:CMFA的TUN不支持ipv6,至少不支持直接ipv6地址的访问。
那么我能不能为CMFA添加上ipv6的支持呢,依然本着自己动手丰衣足食的精神,说干就干,clone了CMFA的源码,随后在浅显地了解了Android VpnService的相关API后,我猜测是没有调用addAdress添加ipv6的地址,导致系统认为该TUN不支持ipv6,直接返回了No Route to host错误,于是我找到addAdress调用的地方,硬编码添加了ipv6的参数来验证我的猜测:addAddress(TUN6_GATEWAY, TUN6_SUBNET_PREFIX)
。
编译运行一气呵成,打开tvbox验证想法,果然成功了?!
不过理想很丰满,现实很骨感,在我打开了clash的log之后,重新验证,发现虽然看起来一起正常了,但是clash的log里面依然没有找个这个ipv6的相关日志,这表明也许流量并没有真正进入clash的内核。想要CMFA真正支持ipv6,也许还有很多工作要做。
后续的话我可能会提个issue给CMFA,毕竟我对安卓开发、梯子APP的开发也确实没什么兴趣,而我花了不少时间在这上面,只是试图去找到一个真相。
1
gunner168 189 天前 via iPhone
mumu 好像不支持 ipv6
|
2
javalaw2010 OP @gunner168 验证了,好像确实如此,mumu 不支持 ipv6 。
|
3
KissingTheFire 131 天前 via Android
@javalaw2010 遇到同样问题,先是 cmfa 观看不了 tvbox 的 ipv6 直播源,换 box4magisk 的 mihomo 内核还是一样,日志一堆 connection refused ,然后搜到这个 https://zhmoegirl.com/posts/e98ecfc2afd5 ,纠结要不要换回 singbox ,但 singbox 又不支持负载均衡。
|
5
KissingTheFire 130 天前 via Android
@javalaw2010 自己折腾解决了,tun 模式的问题,box4magisk 换 tproxy 模式全部正常了。
|