2026: IPv6, AAAA и Happy Eyeballs — когда SSH к ProxyMac Mac mini кажется медленным
Инженеры любят винить «регион Токио», если ssh mini.jp.example перед баннером «дышит» несколько раз, а ssh -4 летит. Современные резолверы отдают и A, и AAAA; стеки делают гонку в духе Happy Eyeballs (RFC 8305), и попытки IPv6 могут зависать достаточно долго, чтобы казаться потерей пакетов, хотя ProxyMac Mac mini в Гонконге, Японии, Корее, Сингапуре или США здорова. Это не агитация за IPv6, а лист решений: матрица симптомов из четырёх строк, переключатели macOS (ssh -4, ssh -6, AddressFamily), квадратные скобки для литерального v6, семишаговый runbook со ссылками на DNS и split horizon, если ответы по VPN отличаются, PMTUD, если крупные TCP-сегменты пропадают, и keepalive, когда семейство адресов ясно. Если политика сначала всё гонит через Zero Trust, прочитайте маршрутизацию VPN, прежде чем охотиться на призраки AAAA.
С mini всё в порядке, но первый SSH «колеблется»
Три семейства: (1) фиксированная пауза в несколько секунд только на первой TCP-попытке каждую минуту; (2) рывки, связанные с истечением TTL DNS; (3) затычки от размера полезной нагрузки (SCP), а не от рукопожатия. Семейство 1 кричит о гонке семейств адресов; 3 чаще не про IPv6 — переходите к MTU, не читая страницу дважды.
- Всегда фиксируйте метки времени
ssh -vvvмеждуConnectingиConnection established. - Сравните то же имя со стеком по умолчанию и с
ssh -4— если медленен только дефолт, гипотеза v6 стоит проверки. - Литеральный IPv6 требует скобок:
ssh user@[2001:db8::1], чтобы парсер не принял двоеточия за порт.
Матрица симптомов A vs AAAA (первый шаг триажа)
| Ощущение | Вероятный слой | Первая команда | Углубление |
|---|---|---|---|
Пауза 2–5 с, потом быстрая сессия; ssh -4 убирает паузу | Сломанный или hairpin IPv6 | dig AAAA hostname +time=2 | Эта статья + гайд DNS |
| По цифровому IP работает, по имени — нет | Порядок резолверов / split DNS | scutil --dns | head -n 80 | гайд DNS |
| Интерактив ок, SCP умирает в середине | PMTUD / middlebox | Скан размеров пакетов | гайд MTU |
| Разрыв после десятков минут простоя | Таймеры NAT | Зонды ServerAlive | гайд keepalive |
dig A и dig AAAA и одну строку, изменил ли ssh -4 настенное время до баннера — без этих двух диффов сетевые команды игнорируют простыни текста.
Гонка в духе Happy Eyeballs на MacBook (что наследует OpenSSH)
Приложения, резолвящие dual-stack имена, могут запускать параллельные подключения и предпочитать то, что завершится первым. Когда IPv6 почти верен — маршрутизатор анонсирует префиксы, а выше фильтруют ICMPv6 — вы платите налогом задержки без ясного «connection refused». Зафиксируйте дельту VPN вкл/выкл: многие ZTNA-клиенты переставляют резолверы или вставляют виртуальные IPv6-маршруты, отличные от кафе Wi‑Fi.
Флаги OpenSSH, ~/.ssh/config и ответственное закрепление семейства адресов
Используйте ssh -4 и ssh -6 как диагностические переключатели, затем закодируйте победивший вариант в секции Host с AddressFamily inet или inet6, когда политика согласна. Избегайте постоянного -4 на ноутбуках, которые ходят между «чистым» v6 в кампусе и отелями только v4, без охраны Match exec — раздельные конфиги снижают сюрпризы.
Host proxymac-jp-stable
HostName mini.example.jp
User build
AddressFamily inet
ServerAliveInterval 30
ServerAliveCountMax 4
Что должна отдавать арендованная mini (и что вы всё равно проверяете сами)
ProxyMac даёт предсказуемые точки входа SSH, но авторитетный DNS для ваших имён может остаться у регистратора без делегирования. Проверьте, публикует ли зона только A, только AAAA или оба — и не вырезают ли корпоративные резолверы ответы AAAA «ради безопасности». Если IT режет AAAA, ноутбук не изобретёт IPv6; наоборот, при живом AAAA и сломанном uplink клиент всё равно может сначала пробовать v6.
Семь шагов до просьбы «перенесите mini»
- Снимок:
dig A/dig AAAAиз офиса, VPN и дома. - Замер:
ssh -vvvпротивssh -4 -vvvна то же имя — разница >1 с подозрительна. - Проверка: порядок
scutil --dnsпри переключении VPN; кривые search-домены маскируются под IPv6. - Исключить MTU по связанному гайду, если bulk-копия падает, а shell живой.
- Наложить keepalive, когда семейство адресов стабильно.
- Задокументировать финальную секцию
Hostв Git рядом с тикетами файрвола. - Только потом сравнивать регионы по MTR, а не по ощущениям.
FAQ
Отключать IPv6 на mini? Лучше чинить путь; глобальное отключение v6 может сломать легитимный dual-stack мониторинг.
Screen Sharing наследует ту же гонку? Часто да — без QUIC это всё ещё TCP; проверьте DNS и семейство адресов до обвинений кодека.
Меняет ли CGNAT картину? Меняет ритм NAT-портов, не гонку DNS — сочетайте с корпоративным CONNECT SSH, если наружу только 443.
Почему ProxyMac Mac mini остаётся правильным якорем, когда DNS и dual-stack понятны
Apple Silicon M4 mini в HK / JP / KR / SG / US дают имя для реальных измерений: сегодняшний dig должен читаться так же завтра. Когда правда резолвера совпадает с политикой маршрутизации, агенты автоматизации, CI и люди бьют в тот же металл, который уже одобрил финансы. Бронируйте регионы на странице цен, держите SSH-сниппеты из справки рядом с runbook и уходите на VNC, когда macOS требует GUI-свидетеля для TCC.
Арендуйте железо там, где правда DNS совпадает с RTT
HK / JP / KR / SG / US · дружественный к dual-stack SSH