如何避免 Brook 连接 IPv6 失败

https://www.txthinking.com/talks/
Updated at: 2023-05-14
cloud@txthinking.com

x

目前互联网中 IPv6 的比重

Google 数据 IPv6 流量已经接近 40%。

Brook 对 IPv6 态度

Brook 对 IPv6 的态度是积极的。比如当客户端填写的服务器地址是域名又没有指定 address 时,会先尝试解析使用 IPv6 地址;也会尽量尝试设置双栈环境;IPv6 系统 DNS 等

如果你本地和服务端均支持 IPv6,那么不会遇到问题。

操作系统对 IPv6 态度

操作系统也是 IPv6 优先。不同应用也有自己的 fallback 机制,比如 Chrome 就会认为是双栈环境失败后不会回退,而相同网络环境下,Safari 就会回退成功。

代理隧道

代理隧道无论是通过 IPv4 还是 IPv6 建立,都可以传输代理 IPv4 和 IPv6 的目的地。参考上图。

本地或服务端不支持 IPv6

如果确保虚拟 DNS 有效的情况下

但是如果 IPv6 IP 被规则绕过了,也就是本地直连了,便会失败,因为本地不支持 IPv6 也就无法连接 IPv6 IP

解决方法就是避免解析出 IPv6 IP,也就是阻断 AAAA

方案一

Brook 客户端系统 DNS 配置自动阻断 AAAA 的 DNS,比如用 brook 自建

brook dnsserver -l :53 --disableAAAA

Brook 客户端绕过 DNS 配置自动阻断 AAAA 的 DNS,比如用 brook 自建

brook dnsserver -l :53 --disableAAAA

Brook 客户端绕过 DNS 配置自动阻断 AAAA 的 DOH,比如用 brook 自建

brook dohserver ... --disableAAAA

方案二

也可以用脚本阻断 AAAA 解析

f := func() {
    if in_dnsquery {
        if in_dnsquery.type == "AAAA" {
            return {"block": true}
        }
        return
    }
}
out := f()

这里有例子


评论