2026-05-18 Кэш DNS и HTTP-клиента после смены региона ProxyMac Mac mini: когда API всё ещё выходят через неверный POP
Вы наконец перенесли стандартный 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 сброса кэша
- Базовые заголовки: снять
curl -sIс трёх эндпоинтов провайдера до любых правок DNS. - Доказать SSH-путь: по SSH выполнить
scutil --get ComputerNameна нужной mini—не только текст приглашения. - Сброс резолвера: на поддерживаемых сборках macOS выполнить документированную команду сброса, одобренную security—не угадывать пароли админа в тикете.
- Холодный старт браузера: полностью выйти из Chromium/Firefox/Safari; на один цикл отключить «восстанавливать окна».
- Перепривязка SOCKS: убить старые PID
ssh -D; проверитьlsof -nP -iTCP:1080перед новым туннелем по гайду стабильности SSH. - Перезапуск рантайма: в CI перезапустить Node, Python или JVM workers—не только shell шага.
- Контрольный эксперимент:
curl --resolve(следующий раздел) для доказательства доступности edge с нового класса IP. - Soak: 200 последовательных HTTPS-зондов с 2 r/s и сходимость кодов POP.
- Заметка отката: если сбой ломает 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