网络与路径 2026 年 5 月 18 日

2026-05-18 切换 ProxyMac Mac mini 区域后的 DNS 与 HTTP 客户端缓存:为何 API 仍从旧 POP 出网

ProxyMac 工程团队 2026-05-18 约 17 分钟阅读

你终于把默认 SSH 从租在 东京Mac mini M4 换到 新加坡,或按 代理出口节点模式 轮换了 ssh -D SOCKS—可供应商控制台仍显示 JP 的 POP 响应头,延迟直方图不肯向西移动,QA 坚称「区域标记没翻」。mini 没有撒谎:笔记本侧的解析器与 HTTP 栈仍缓存着旧宇宙。 本文交付 (1) 必须证明路径变更的受众筛选、(2) 区分 DNS TTL 迷思与温热 HTTP/2 池的症状矩阵(3) 四层缓存蛋糕(操作系统、浏览器、语言运行时、否定 DNS)、(4) 带数值护栏的九步清理手册(5) 可粘贴的 curl --resolve 取证、(6) 当 DNS 与 OpenClaw 企业 HTTP_PROXY 不一致时的坑,以及 HTTPSVC 与否定缓存陷阱。开工单前请先对照 分割 DNS 解析失败IPv6 Happy Eyeballs。路径选型见 MTR 区域诊断;规格见 定价页;SSH 取证模板见 帮助中心

谁必须在变更 ProxyMac 区域后主动清理 DNS 与 HTTP 缓存

成功标准包含 HTTP 响应头cf-rayx-amz-cf-popserver-timing)、绑定旧边缘的 TLS 会话票据,或 SaaS 管理台按解析路径推断的来源国家—而不仅是「SSH 延迟下降」。若你只 ping 过 mini、从未经 SOCKS 或分割隧道 VPN 调用公网 API,可略过本文;若你在笔记本侧对 CDN 或 LLM 边缘做基准测试而 mini 已迁移,请继续读。

  • 量化门槛:curl -s https://ipinfo.io/json 已是新国家,而 curl -sI https://api.vendor.example10 分钟内仍打印旧大陆的 POP 码,属于客户端缓存类问题,而非 ProxyMac 路由缺陷。
  • 自动化门槛:复用长生命周期的 Node 或 Python 进程的 CI Runner 会继承进程内 DNS 池;区域轮换后必须显式回收进程。
  • 安全门槛:企业 DNS over HTTPS 描述文件在 VPN 客户端刷新策略前可能覆盖你的 mini 迁移—参见 解析器文章

症状矩阵:POP 错误但 HTTP 200 且 ping「健康」

可观测现象 可能层级 第一动作
dig 已是新 AAAA,供应商头仍是旧 POP HTTP/2 连接池或 TLS 会话缓存 重启浏览器配置或单次加 --http1.1 强制新 TCP
TTL 过期数秒后 dig 仍显示旧 RRSet mDNSResponder / 系统缓存 在获准前提下刷新解析器缓存;用 dscacheutil -q host -a name api.vendor.example 验证
仅 Java/JVM 服务错误;curl 正确 JVM InetAddress 缓存 仅在测试 JVM 设 networkaddress.cache.ttl=0;重启服务
修正拼写后仍间歇 NXDOMAIN 否定缓存 等待否定 TTL 或临时切换解析器

分层蛋糕:系统解析器 vs 浏览器 vs 运行时 vs 连接池

现代栈在进程生命周期内会多次解析主机名。在 macOS 上,mDNSResponder 按 RR TTL 与平台策略缓存肯定与否定答案。Chromium 系浏览器再叠一层缓存,并在 UDP 路径存活于区域变更时复用 QUIC 或 HTTP/3 会话。Node 的 dns.lookup 除非配置 lookup 钩子,否则可能每个池只调一次 getaddrinfo。复用单个 fetch 或 undici 池的 OpenClaw 网关同样危险—迁移 mini 后应重启网关进程,使出站 TLS 重新绑定到新的解析视图,尤其与 企业 HTTP_PROXY plist 编码 联用时。

取证纪律:工单中同时归档 curl -v 详细日志与 dig +subnet=0.0.0.0/0 输出—没有响应头证据供应商会驳回「感觉慢」。

九步缓存清理手册

  1. 基线响应头:动 DNS 前对三个供应商端点执行 curl -sI
  2. 证明 SSH 路径:通过 SSH 执行 scutil --get ComputerName 确认目标 mini—不要只看提示符文案。
  3. 解析器刷新:在支持的 macOS 版本上运行安全团队批准的刷新命令—切勿在工单里猜测管理员密码。
  4. 浏览器冷启动:完全退出 Chromium/Firefox/Safari;关闭一轮「重新打开窗口」。
  5. SOCKS 重绑:结束旧 ssh -D PID;用 lsof -nP -iTCP:1080 确认后再开新隧道,参见 SSH 稳定性指南
  6. 运行时回收:在 CI 中重启 Node、Python 或 JVM Worker—不仅是 job 步骤 shell。
  7. 对照实验:用下一节的 curl --resolve 证明新 IP 段可达供应商边缘。
  8. 浸泡:2 rps 跑 200 次顺序 HTTPS 探测,确认 POP 码收敛。
  9. 回滚注记:若刷新破坏强制门户,按 访客 Wi-Fi 指南 记录 VPN 重连顺序。
切勿curl --resolve 写进生产 cron—仅作临时取证,排障后移除覆盖以免掩盖未来 DNS 事故。

curl --resolve 与 dscacheutil 配方

若需在不动 /etc/hosts 的情况下绕过陈旧答案,可为单次命令固定权威 IP:

curl -v --resolve api.vendor.example:443:203.0.113.44 https://api.vendor.example/healthz

在 macOS 上与 dscacheutil -q host -a name api.vendor.example 对照用户态缓存当前认知。若 dscacheutil 与 dig @8.8.8.8 不一致,分割隧道 VPN 或 DoH 客户端仍在 steering—回到 解析器分流

OpenClaw 与出站 HTTP 客户端:launchd 背后的缓存坑

调用模型 API 的 LaunchAgent 常把 单个 undici 或 axios agent 保持数小时。在区域间迁移 mini 后,除非回收事件循环 Worker,进程仍可能复用启动时取得的 DNS 答案。回收时与 HTTP 代理 launchd 文章 中的 NO_PROXY 卫生一致,避免 localhost MCP 流量继承陈旧的企业解析路径。

坑:否定缓存、SVCB/HTTPS 记录与 anycast 漂移

NXDOMAIN 会被否定缓存—首次拼写错误可在数分钟内毒害自动化。新 HTTPS RR 类型可把客户端导向与 A 记录不同的 QUIC 端点;若工具只盯 A/AAAA 会追幽灵。Anycast 前缘在 BGP 切换后仍可能把 TCP 会话钉在远端 POP—只有新连接能证明迁移。

dig api.vendor.example HTTPS +short

常见问题

从 JP 迁到 SG 是否只需等 DNS TTL?权威 TTL 管全球传播,但笔记本仍保留本地缓存与温热 HTTP 池。应按层清理,而非只等墙钟 TTL。

为何 curl 已是新区而 Chrome CDN 国家仍旧?栈不同:curl 常开新 TCP,而 Chrome 复用绑定旧 anycast 的 HTTP/2 或 QUIC 会话。

curl --resolve 能否用于生产冒烟?适合单次命令取证;若写入自动化且无轮换监控,会掩盖未来 DNS 事故。

为何 ProxyMac Mac mini 适合作为跨区域缓存实验锚点

租用在 HK / JP / KR / SG / USMac mini M4 提供可预期的区域出口 IP 段,便于把 POP 头与地理关联;原生 macOS 解析行为与开发者笔记本一致;单租户 CPU 适合长时间 curl 浸泡而无邻居噪声。在此验证缓存算术后,可按 定价 透明增加第二台节点,而非在短命 CI IP 上猜测。

用取证证明每次区域切换

DNS 缓存 · HTTP/2 池 · HK / JP / KR / SG / US