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

68 天前
 strp
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 记录
2197 次点击
所在节点    宽带症候群
7 条回复
johnrosen1
67 天前
可还行
YGBlvcAK
67 天前
感谢,现在就改成 SOA
putaozhenhaochi
67 天前
怪不得 有段时间打开网页特别慢 同网络下的安卓就正常.
感谢楼主解惑
barnettluo1994
67 天前
我这里目前只允许了授权 dns 其他的全部丢黑洞了并允许返回 icmp 的消息提示 ip 被过滤 这种情况下就不影响运作
keyfunc
67 天前
我都是回的 NXDOMAIN
pingdog
66 天前
看 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 上翻墙,自定义选项太少,用来困兽足矣不再折腾
pingdog
59 天前
refused 拦截模式:和不拦截的情况无任何时间的差异
nxdomain:冷启动 WeChat 小程序打开会白屏几秒,大概和 mmtls 魔改 TLS 原因有关系,其它 app 加载均和不拦截的情况无任何时间的差异

下一步拦截所有 udp 的测试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1147004

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX