V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
isukkaw
V2EX  ›  全球工单系统

DNSPod 公共 DNS 的 DoH 与 DoT 的 IPv4 MSS 导致使用 Go 1.23 编写的 DoH/DoT Client 无法正常 TLS 握手

  •  1
     
  •   isukkaw · 4 天前 · 889 次点击

    DNSPod 公共 DNS 的 DoH 与 DoT (1.12.12.12120.53.53.53)对外宣告的 MSS 是 1452 bytes 、而实际上真正最大可接受的数据包体积是 1444 bytes 。怀疑是由于 DNSPod 使用的腾讯云全球应用加速 LB 对外宣告的 MSS 中包含了 8 bytes 的 TOA 导致的,参见腾讯云全球应用加速中关于 TOA 的文档)。

    而在 Go 1.23 中,Go 为 crypto/tls 默认启用 了实验性的「后量子时代加密 Cipher 」X25519Kyber768Draft00参见 Go 1.23 的更新日志X25519Kyber768Draft00 依赖 TLS key_share extension 进行,导致通过 Go 1.23 内置的 TLS 实现进行 TLS 握手时发送的 TLS Client Hello 体积从典型的 252 bytes 激增到 1476 bytes 、恰好触发分包,而 DNSPod 错误的 MSS 导致 TLS 握手失败。

    通过 GODEBUG=tlskyber=0 禁用 Go 1.23 的 X25519Kyber768Draft00 后可以正常完成与 1.12.12.12120.53.53.53 的 TLS 握手;通过 iptables 或类似手段修改 MSS 也可以正常完成 TLS 握手。


    另,AWS 的防火墙(基于 Suricata)也会默认丢弃过长的 TLS Client Hello 、参见 Suricata 社区的用户反馈,因此使用 Go 1.23 编写的应用同样无法访问 AWS API 、参见 terraform-provider-aws 的 Issue hashicorp/terraform-provider-aws#39311

    3 条回复    2024-12-02 19:28:35 +08:00
    yyzh
        1
    yyzh  
       4 天前 via Android
    johnjiang85
        2
    johnjiang85  
       3 天前
    @yyzh 已转发给相关同事排查
    tencentcloud
        3
    tencentcloud  
       2 天前   ❤️ 1
    您好,经升级核实 DNSPod 的 MSS 问题是由于服务内部网络的转发链路存在缺陷,与问题中提到的 TOA 无关。这里我们尽快做修复,具体修复排期待我们明确后再进一步同步,感谢您的关注和反馈。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1069 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:16 · PVG 03:16 · LAX 11:16 · JFK 14:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.