Is your feature request related to a problem?
目前 tun2socks 支持 双栈 ip 地址,但却不支持 双栈 ip fallback,具体表现为,当配置 双栈 ip 之后,如果本地路由配置是 ipv6 优先,但某个网站的 ipv6 地址无法连接(上游不支持 ipv6 ,或者网站本身 ipv6 坏了),这个网站就无法开启,浏览器不会 fallback 到 ipv4 。
复现可以使用 https://ipv6-test.com/ 网站,用 direct:// 作为上游即可。
# 假设物理网卡为 eth0,有双栈 ip
tun2socks -device tun://tun0 -proxy direct:// -interface eth0
ip addr add 10.0.0.1/24 dev tun0
ip -6 addr add 2001:db8::1/64 dev tun0
ip link set dev tun0 up
ip route add default dev tun0
ip -6 route add default dev tun0
看右边的 Default 和 Fallback 项。
这个网站测试 Fallback 使用的域名是 http://fallback-v6.ipv6-test.com 和 http://fallback-v4.ipv6-test.com ,这两个域名都有双栈解析,但其中一栈对应的 ip 的 80 端口是个黑洞,浏览器必须能够 fallback 到另一栈才能正常访问。
Describe the solution you'd like
不太确定这个功能技术上能否实现。
想要实现这个功能,需要改变建立连接的机制,必须当上游建立连接成功,并开始传输数据之后,下游才能建立连接,当上游建立连接 失败,下游则不建立连接。此时,浏览器会 fallback 到别的地址。
现在的 tun2socks 的机制是,下游发起连接之后,tun2socks 就立即和下游建立连接,然后才去连接上游,当上游建立连接失败,下游建立的连接就关闭。此时,由于下游的连接是已经正常建立并关闭的,浏览器就不会再去 fallback 到别的地址。
Describe alternatives you've considered
无
Additional context
Is your feature request related to a problem?
目前 tun2socks 支持 双栈 ip 地址,但却不支持 双栈 ip fallback,具体表现为,当配置 双栈 ip 之后,如果本地路由配置是 ipv6 优先,但某个网站的 ipv6 地址无法连接(上游不支持 ipv6 ,或者网站本身 ipv6 坏了),这个网站就无法开启,浏览器不会 fallback 到 ipv4 。
复现可以使用 https://ipv6-test.com/ 网站,用 direct:// 作为上游即可。
看右边的 Default 和 Fallback 项。
这个网站测试 Fallback 使用的域名是 http://fallback-v6.ipv6-test.com 和 http://fallback-v4.ipv6-test.com ,这两个域名都有双栈解析,但其中一栈对应的 ip 的 80 端口是个黑洞,浏览器必须能够 fallback 到另一栈才能正常访问。
Describe the solution you'd like
不太确定这个功能技术上能否实现。
想要实现这个功能,需要改变建立连接的机制,必须当上游建立连接成功,并开始传输数据之后,下游才能建立连接,当上游建立连接 失败,下游则不建立连接。此时,浏览器会 fallback 到别的地址。
现在的 tun2socks 的机制是,下游发起连接之后,tun2socks 就立即和下游建立连接,然后才去连接上游,当上游建立连接失败,下游建立的连接就关闭。此时,由于下游的连接是已经正常建立并关闭的,浏览器就不会再去 fallback 到别的地址。
Describe alternatives you've considered
无
Additional context