V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
terrytw
V2EX  ›  宽带症候群

关于 Encrypted client hello(ECH)的一个小提醒

  •  
  •   terrytw · 1 天前 · 840 次点击

    近期 cloudflare 为 free 用户逐步开启了 ECH, V2 也已经开启, 有人在讨论 https://v2ex.com/t/1076154

    有一个自己遇到的小问题, 提示各位一下

    ECH 大体上是依赖三个部分, 服务端(如 nignx)的设置, 客户端(如浏览器)的设置, 以及 DNS 的设置

    DNS 是依赖 HTTPS 记录(type 65)来提供服务端的 public key 和 outer SNI 的, 比如 v2 的 DNS 记录:

    https://dns.google/query?name=v2ex.com&rr_type=HTTPS&ecs=

    可以看到包含ech=AEX+DQBB4gAgACDmyFU4oeqVH/jutZB8Nu5Ve9dGQ5OnELvHv/Z7yR+ZbgAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA=

    对于 chrome 来说, 即使上游是 UDP 的 DNS, 只要可以提供正确的 HTTPS 记录, 并且 chrome 自身开启了 ECH, 服务端开启了 ECH, 这三个条件满足, 就可以使用 ECH

    那么这里有一个巨大的坑, 就是 cache....

    dnsmasq 旧版本只能缓存常见类型如 A 和 AAAA, 只有在最新版 2.90 才提供了缓存其他类型记录的选项, 并且默认是不开启的, 所以后果就是, 第一次访问的时候, 你会使用 ECH, 但是如果再次访问, 命中了 DNS 缓存, 返回记录不再包含 HTTPS 记录, 就不再使用 ECH 了

    所以如果你用了 dnsmasq 作为本地 DNS forwarder(比如 Openwrt), 那么请在 conf 里加上--cache-rr=ANY或者自己手动加上多行--cache-rr=来设置所需的缓存类型

    5 条回复    2024-10-16 14:47:05 +08:00
    dzdh
        1
    dzdh  
       1 天前
    想知道这个 ech 是的公钥私钥怎么生成的 nginx 需要怎么配置 其他语言如 go/rust 做 server 怎么适配。
    terrytw
        2
    terrytw  
    OP
       1 天前
    @dzdh 技术细节请参照 https://datatracker.ietf.org/doc/draft-ietf-tls-esni/
    简单介绍请见 https://blog.cloudflare.com/announcing-encrypted-client-hello/
    nginx 好像已经支持了, 细节未知, 因为我不用
    go 的话, Google 那边的 Roland 在写, 1.24 会上
    rust 不清楚
    dreamk
        3
    dreamk  
       18 小时 51 分钟前
    baraja
        4
    baraja  
       2 小时 39 分钟前
    我测下来结果是
    linux 下,firefox 和 chrome 不开 doh 依然有 ech 。
    然而 windows 下,firefox 可以不开 doh ,chrome 不开 doh 就没有 ech ,挺奇怪的
    Cusmate
        5
    Cusmate  
       2 小时 0 分钟前
    如果 udp dns 返回有 HTTPS 记录并且有 ECH 数据但是 A 记录和 AAAA 记录是被污染的 IP 地址,Chrome 能打开网站吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5565 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:47 · PVG 16:47 · LAX 01:47 · JFK 04:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.