感觉这会是个蠢问题,但还是要问一下……
用的 Clash for Windows(System Proxy)。
network.trr.mode=3
network.trr.custom_uri = https://doh.dns.sb/dns-query
network.trr.uri= https://doh.dns.sb/dns-query
network.trr.enable_when_proxy_detected = true
network.security.esni.enabled = true
关闭 System Proxy 后,访问 https://www.cloudflare.com/cdn-cgi/trace 。 其中
sni=encrypted
说明 ESNI 设置生效。 开启 System Proxy 后,
sni=plaintext
说明 ESNi 设置未生效,访问 about:networking#dns 确认 DoH 生效。
对传输这块理解不是很透彻,就是不太明白为什么会破坏这个加密状态。还望大手子可以解惑一下。
1
DefoliationM 2020-06-03 13:01:33 +08:00 1
因为启用 esni 需要使用 dns 协商来获取加密公钥,但是正常情况下代理并不会在本地进行 dns 查询,因为在本地查询因为 cdn 的关系会返回距离本地较近的 ip 地址,这样会使代理变慢,甚至绕一大圈。
当然可以设置 subnet 来获取距离 subnet 较近的 ip,但是如果代理有中转服务器,就不行只凭代理的 ip 或解析代理域名所得到的 ip 来当做 subnet 了。 当然如果是 doh 或是直接代理 udp 获取 dns 也行,但是如果代理服务器启用了 dns 解锁的服务(比如 netflix,abematv 这一类的),这样获取的 ip 就不好使了,并不能起到解锁的效果。 所以总结来说,代理客户端会把代理的域名发到代理服务器去解析获取 ip,如果代理服务器启用了 dnssec,可能本地 esni 就有效了,但是如果代理服务器只是使用最原始的 dns,甚至连 EDNS 都不支持,那 esni 肯定就不会启用啦。 |