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

QType 65 (HTTPS) 的封锁导致苹果设备 App 和网页访问异常缓慢

  •  1
     
  •   strp · 47 天前 · 2094 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。
    iOS / macOS 已经将 H3 即 QUIC HTTPS 应用到基本上系统各个组件,而第三方 App 调用系统 API 时会在发起 A 或 AAAA 请求后再次发送一个 QType 65 请求,即 HTTPS DNS Lookup ,一般情况下 H3 需要从 http/1.1 或 H2 升级,而服务器是否允许升级除了 Header 外还可以通过 QType 65 查询的方式,因为 QUIC 流量本质是无状态的 UDP ,难以被深度包检测,所以有些用户使用干净的 DNS 访问 Facebook 的时候能够通过未被硬阻断 TCPMUX 的 H2 或 QUIC 的 H3 无墙访问,最近一年大陆已经不再劫持 QType 65 查询,但是很多 DNS 过滤软件和手机上复杂的 Rule-based 代理软件等各自处理 DNS 请求的方式和回应的方式均不一致,苹果在 DNS 服务器返回错误内容的时候也没有正确处理,这可能可以解释为什么有些人将 DNS 模式改为 Fake IP 后比一般模式下使用更快。

    某些 DNS 过滤软件和代理软件在某些用户定义的规则下将 QType 65 请求阻止,而且阻止的方式不是通过 SOA 或者 REFUSED ,而是 SERVFAIL ,问题就出在这里,苹果只认 QType 65 回复 NOERROR 或者 SOA ,其它情况下如 QType 65 超时,REFUSED 或者 SERVFAIL ,很多情况下不会回落到 http/1.1 ,这就会导致某些情况下 App 或者访问的网页龟速,甚至直接出错,这种激进或头脑简单的策略并不能防止中间人,某些公司网络内为了监控员工行为会一刀切阻止 QUIC ,更有甚者直接拦截 QType 65 ,这会导致很多本来没有被阻止的 App 或网站访问异常缓慢,因为应用始终在等待服务器回应,而策略一般是丢包,回应根本不存在,最后只会超时被迫回落,这是最好的情况,最差的情况是很多 assets 在正在尝试升级 H3 的请求队列之后,这会导致网络看上去非常卡。

    包括 SSR++ 在内的 OpenWrt 插件也仍然在采用简单粗暴的 DROP ,这会导致客户端超时响应,在很多情况下尤其是 IM 类 App 内卡顿严重。

    https://github.com/fw876/helloworld/blob/8ab6c0141bcb9abe757e6327157e9057389b642d/luci-app-ssr-plus/root/usr/bin/ssr-rules#L241

    有些苹果用户也许没有注意到这个现象,这是因为苹果有个自带的 DoH ,这个 DoH 在大陆没有被封,有时候这个 DoH 线路龟速会引起其它问题,它在 WiFi 和蜂窝网络中的设置叫做 Limit IP Address Tracking ,这个选项是默认启用的,如果能够连上你的出口会变成 Anycast 最近的 Akamai 出口的 DNS ,对于广移来说是香港,不知道是否 Apple 全权控制。

    对于桌面用户,可以前往如 chrome://flags/#enable-quic 禁用 QUIC 则可以避免浏览器发起 QType 65 查询然后尝试升级 H3 。

    开启 QUIC 的应用会发出 QType 65 请求



    只有回复 NOERROR / SOA 苹果才能正确处理





    大陆不再劫持 QType 65



    向伊朗不存在的 DNS 服务器发起 QType 65 查询反而被 GFW 注入返回了 A 记录
    7 条回复    2025-07-31 23:00:56 +08:00
    johnrosen1
        1
    johnrosen1  
       47 天前
    可还行
    YGBlvcAK
        2
    YGBlvcAK  
       47 天前 via Android
    感谢,现在就改成 SOA
    putaozhenhaochi
        3
    putaozhenhaochi  
       47 天前
    怪不得 有段时间打开网页特别慢 同网络下的安卓就正常.
    感谢楼主解惑
    barnettluo1994
        4
    barnettluo1994  
       47 天前
    我这里目前只允许了授权 dns 其他的全部丢黑洞了并允许返回 icmp 的消息提示 ip 被过滤 这种情况下就不影响运作
    keyfunc
        5
    keyfunc  
       47 天前
    我都是回的 NXDOMAIN
    fuzzsh
        6
    fuzzsh  
       46 天前 via Android
    看 Limit IP Address Tracking 的描述,只对 safari 和 mail 起效啊

    用 ADGuard 挂上 DNS filter 规则:/.*/$dnstype=HTTPS
    DNS Implemention 是用 local pseudo vpn ,非 VPN 选项的 DNS proxy ,应该和翻墙 app 开的 vpn 一样?他会在系统创建 vpn 连接,非 iOS 开发不具体了解 vpn 区别

    蜂窝一直开启 Limit IP Address Tracking ,upstream 是 dnspod 的 DoH ,使用几分钟并无卡顿,几个银行 app/淘宝/京东/贴吧/微信搜索文章/3 大运营商 app ,随便滑点进几个内页/活动页,平时秒开秒加载的还是秒开秒加载,在 activity 中查看
    type: HTTPS
    DNS status: refused
    DNS answer: empty
    接下来保持规则开启使用几天

    block mode 支持改成 NXDOMAIN ,这个拦截也会试用,过几天回来贴使用情况


    我曾经用 shadowrockets 也是遇到过加载转圈的问题,用 Adguard 就没再转圈,后来不再 iOS 上翻墙,自定义选项太少,用来困兽足矣不再折腾
    fuzzsh
        7
    fuzzsh  
       38 天前 via Android
    refused 拦截模式:和不拦截的情况无任何时间的差异
    nxdomain:冷启动 WeChat 小程序打开会白屏几秒,大概和 mmtls 魔改 TLS 原因有关系,其它 app 加载均和不拦截的情况无任何时间的差异

    下一步拦截所有 udp 的测试
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3267 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 11:20 · PVG 19:20 · LAX 04:20 · JFK 07:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.