Сеть / путь 18 мая 2026

2026-05-18 Кэш DNS и HTTP-клиента после смены региона ProxyMac Mac mini: когда API всё ещё выходят через неверный POP

Инженерная команда ProxyMac 2026-05-18 около 17 мин. чтения

Вы наконец перенесли стандартный SSH с арендованного Mac mini M4 в Токио в Сингапур или крутили SOCKS ssh -D по шаблонам выходного прокси-узла—а панели провайдера всё ещё показывают заголовки POP JP, гистограммы задержки не «едут» на запад, QA утверждает, что «флаг региона не переключился». mini не врёт: резолвер и HTTP-стек ноутбука закэшировали прежнюю вселенную. В этом руководстве (1) фильтр аудитории для команд, которым нужно доказать смену пути, (2) матрица симптомов, отделяющая мифы DNS TTL от тёплых пулов HTTP/2, (3) четыре слоя кэша (ОС, браузер, языковой рантайм, негативный DNS), (4) девятиступенчатый runbook сброса с числовыми ограничителями, (5) готовые к вставке curl --resolve, (6) подводные камни корпоративного HTTP_PROXY в OpenClaw, когда DNS и HTTP_PROXY расходятся, плюс риски HTTPSVC и негативного кэширования. Перед тикетами провайдеру сверьтесь с ошибками split DNS и IPv6 Happy Eyeballs. Выбор пути: MTR по регионам; SKU: цены; шаблоны SSH-доказательств: справка.

Кому после смены региона ProxyMac активно сбрасывать DNS и HTTP-кэши

Тем, чьи критерии успеха включают HTTP-заголовки ответа (cf-ray, x-amz-cf-pop, server-timing), TLS session tickets, привязанные к старому edge, или SaaS-консоли с страной источника, выведенной из пути резолвера—а не только «SSH стал быстрее». Если вы только пинговали mini и ни разу не вызывали публичные API через SOCKS или split-tunnel VPN, можно пропустить гайд; если бенчмаркили CDN или LLM с ноутбука, пока mini переезжала, читайте дальше.

  • Количественный порог: если curl -s https://ipinfo.io/json показывает новую страну, а curl -sI https://api.vendor.example в течение 10 минут всё ещё печатает POP-код прежнего континента—это класс багов клиентского кэша, а не дефект маршрутизации ProxyMac.
  • Автоматизация: CI-раннеры с долгоживущими Node/Python наследуют in-process DNS-пулы; после ротации региона нужен явный перезапуск.
  • Безопасность: корпоративные профили DNS over HTTPS на macOS могут перекрывать перенос mini, пока VPN-клиент не обновит политику—см. статью о резолвере.

Матрица симптомов: неверный POP, но HTTP 200 и «здоровые» пинги

Наблюдение Вероятный слой Первый шаг
dig показывает новый AAAA, заголовок провайдера — старый POP Пул соединений HTTP/2 или кэш TLS-сессии Перезапустить профиль браузера или один раз добавить --http1.1 для нового TCP
dig держит старый RRSet через секунды после истечения TTL mDNSResponder / кэш ОС Сбросить кэш резолвера где разрешено; проверить dscacheutil -q host -a name api.vendor.example
Ошибаются только Java/JVM; curl верен Кэш InetAddress JVM Только для тестовых JVM networkaddress.cache.ttl=0; перезапуск сервиса
Интермиттирующий NXDOMAIN после исправления опечатки Негативный кэш Дождаться негативного TTL или временно сменить резолвер

Слоёный пирог: резолвер ОС против браузера, рантайма и пулов

Современные стеки резолвят имена больше одного раза за жизнь процесса. В macOS mDNSResponder кэширует положительные и отрицательные ответы по TTL RR и политике платформы. Браузеры на Chromium добавляют ещё один уровень и переиспользуют QUIC или HTTP/3, если UDP-путь пережил смену региона. dns.lookup в Node может вызывать getaddrinfo один раз на пул без хуков lookup. Шлюзы OpenClaw с одним пулом fetch или undici несут тот же риск—после переноса mini перезапустите процесс шлюза, чтобы исходящие TLS-handshake перепривязались к новому виду резолвера, особенно вместе с корпоративным HTTP_PROXY в plist.

Дисциплина доказательств: в тикете архивируйте и подробные curl -v, и вывод dig +subnet=0.0.0.0/0—без заголовков «кажется медленно» провайдер отклонит.

Девятиступенчатый runbook сброса кэша

  1. Базовые заголовки: снять curl -sI с трёх эндпоинтов провайдера до любых правок DNS.
  2. Доказать SSH-путь: по SSH выполнить scutil --get ComputerName на нужной mini—не только текст приглашения.
  3. Сброс резолвера: на поддерживаемых сборках macOS выполнить документированную команду сброса, одобренную security—не угадывать пароли админа в тикете.
  4. Холодный старт браузера: полностью выйти из Chromium/Firefox/Safari; на один цикл отключить «восстанавливать окна».
  5. Перепривязка SOCKS: убить старые PID ssh -D; проверить lsof -nP -iTCP:1080 перед новым туннелем по гайду стабильности SSH.
  6. Перезапуск рантайма: в CI перезапустить Node, Python или JVM workers—не только shell шага.
  7. Контрольный эксперимент: curl --resolve (следующий раздел) для доказательства доступности edge с нового класса IP.
  8. Soak: 200 последовательных HTTPS-зондов с 2 r/s и сходимость кодов POP.
  9. Заметка отката: если сбой ломает captive portal—порядок переподключения VPN по гайду гостевого Wi-Fi.
Никогда не вшивайте curl --resolve в продакшен-cron—только временное доказательство, затем уберите override, чтобы не маскировать будущие DNS-инциденты.

Рецепты curl --resolve и dscacheutil

Чтобы обойти устаревшие ответы без правки /etc/hosts, зафиксируйте авторитетный IP для одной команды:

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

Вместе с dscacheutil -q host -a name api.vendor.example на macOS выведите, что userland-кэш считает сейчас. Расхождение с dig @8.8.8.8 означает, что split-tunnel VPN или DoH всё ещё направляет трафик—вернитесь к разбору резолвера.

OpenClaw и исходящие HTTP-клиенты: кэш-ловушки за launchd

LaunchAgents для модельных API часто держат один агент undici или axios часами. После миграции mini между регионами процесс может переиспользовать DNS с момента загрузки, пока не перезапустите worker цикла событий. Сочетайте перезапуск с явной гигиеной NO_PROXY из статьи про HTTP-прокси и launchd, чтобы localhost MCP не наследовал устаревшие корпоративные пути резолвера.

Риски: негативный кэш, записи SVCB/HTTPS и дрейф anycast

NXDOMAIN кэшируется негативно—первая опечатка отравляет автоматизацию на минуты. Новые типы RR HTTPS могут направлять на QUIC, отличный от A-записей; если смотреть только A/AAAA, вы гонитесь за призраками. Anycast-фронты могут держать TCP-сессии на дальнем POP даже при сдвиге BGP—движение доказывает только новое соединение.

dig api.vendor.example HTTPS +short

Вопросы и ответы

Достаточно ли на ProxyMac при JP→SG только ждать DNS TTL? Авторитетный TTL задаёт глобальное распространение, но ноутбук хранит локальные кэши и тёплые HTTP-пулы. Очищайте слои по порядку, а не только TTL.

Почему curl показывает новый регион, а Chrome — старую страну CDN? Разные стеки: curl часто открывает свежий TCP, Chrome переиспользует HTTP/2 или QUIC к старому edge.

Безопасен ли curl --resolve для прод-smoke? Диагностический override на команду—хорош для доказательств, небезопасен в автоматизации без мониторинга ротации.

Почему ProxyMac Mac mini — правильный якорь для кросс-региональных экспериментов с кэшем

Арендованные Mac mini M4 в HK / JP / KR / SG / US дают предсказуемые классы egress IP по регионам для корреляции POP с географией, нативное поведение резолвера macOS как на ноутбуках разработчиков и single-tenant CPU для длинных curl soak без шумных соседей. После валидации математики кэша те же плейбуки можно поднять на второй узел с прозрачными ценами, а не гадать на эфемерных IP CI.

Доказывайте каждую смену региона артефактами

DNS-кэш · пулы HTTP/2 · HK / JP / KR / SG / US