SSH / Удалённый доступ 28 апреля 2026 г.

2026: сон MacBook, закрытие крышки, роуминг Wi‑Fi и разрывы SSH к Mac mini ProxyMac

Инженерная команда ProxyMac 28 апреля 2026 г. ~11 мин чтения

Инженеры, арендующие мини‑компьютеры Apple Silicon M4 в Гонконге, Японии, Корее, Сингапуре и США, часто слышат: «SSH в Токио отваливается, когда я пересекаю офис.» Хост ProxyMac здоров — MacBook‑клиент усыпил Wi‑Fi‑радиомодуль, сменил точку доступа или перескочил с офисного SSID на модем. Этот гайд отвечает: (1) как сон и роуминг 802.11 ломают состояние TCP, (2) как отделить эту историю от буферблота Wi‑Fi или WAN‑таймаутов keepalive, (3) матрицу из четырёх строк для вставки в тикеты и (4) ранбук из шести шагов плюс готовый блок ~/.ssh/config. Если тетеринг вводит CGNAT, продолжайте обратными SSH‑туннелями; если стопорят только крупные передачи, смотрите PMTUD.

Многие команды сначала крутят межрегиональную задержку, хотя первопричина локальна: SSH — это сквозной контракт между вашим сетевым стеком и мини‑сервером. Пока вы не разведёте события сна, смены BSSID и NAT‑таймауты, легко мигрировать нагрузку в Сингапур, хотя достаточно трёх строк OpenSSH. Ниже — механическое разделение: каждый абзац добавляет наблюдаемый признак, команду или ссылку на узкий гайд этого блога.

Почему симптом обычно начинается на ноутбуке, а не в датацентре

SSH — долгоживущее TCP‑соединение: оба конца кэшируют IP, окна и ключи. Когда macOS закрывает крышку или роумит на другой BSSID, драйвер Wi‑Fi может гасить радио на десятки миллисекунд — достаточно, чтобы пакеты в полёте не уложились в бюджеты ретрансляции при мелких буферах AP. Со стороны сервера в HK / JP / KR / SG / US сессия просто перестаёт говорить; у вас оболочка «зависает», пока TCP не сдастся. Это не то же самое, что высокий RTT (см. гайд по межрегиональной задержке), где пакеты приходят поздно, но ритмично.

  • Сон: политики питания ставят очереди NIC на паузу; пробуждение гоняется с обновлением ARP и DNS.
  • Роуминг: быстрые переходы могут сохранить IP, но сменить L2‑путь; в корпоративных WLAN иногда сбрасываются stateful‑записи файрвола.
  • Тетеринг: LTE‑attach меняет публичный IP под CGNAT, мгновенно инвалидируя существующие TCP‑четвёрки.

Фиксируйте локальное время, процент батареи и SSID в момент обрыва. Этих трёх полей часто хватает, чтобы убедить сетевого инженера, что тикет не «нестабильный Токио», а «агрессивный роуминг на пятом этаже». ProxyMac не видит вашу радиочасть — доказательства даёт только клиентский журнал.

TCP и UDP на фоне сна, App Nap и роуминга Wi‑Fi

OpenSSH уже шлёт периодический прикладной трафик при заданном ServerAliveInterval; без него защищают только TCP‑keepalive (часто раз в два часа на простое). Ноутбуки Apple ещё включают App Nap для фоновых терминалов, если не отключить его для приложения — симптом похож на «SSH завис, пока не переключился обратно в Terminal». Вместе с агрессивной экономией Wi‑Fi на батарее это даёт долю обрывов выше 12 % за восьмичасовой день с частым роумингом в синтетических тестах на трёх вендорах WLAN (цифры плавают; считайте их мотивацией инструментировать, а не SLA).

Если у вас параллельно крутятся launchd‑джобы, будите их пачками после сна — кратковременная нагрузка на шлюз может выглядеть как «SSH умер», хотя мини по‑прежнему отвечает ICMP с другого хоста. Всегда изолируйте интерактивную сессию от пакетной нагрузки, прежде чем закрывать инцидент.

Не путайте с IPv6 Happy Eyeballs. Если пауза бывает и сидя за столом, сначала гонка AAAA, а не роуминг.

Матрица симптомов из четырёх строк: классифицируйте, прежде чем винить Сингапур

Наблюдаемый паттернВероятный слойБыстрая пробаГлубокая ссылка
Разрыв в течение 30 с после закрытия крышкиСон / power assertionОтключить сон на время теста через caffeinate -dimsuЭта статья + настройки энергии
Разрыв, когда RSSI пересекает −75 дБм между APРоуминг Wi‑Fi / липкий клиентЛогировать смены BSSID в диагностике Wi‑FiГайд по буферблоту Wi‑Fi
Только на хотспоте iPhoneCGNAT / таймеры оператораСравнить публичный IP до и после обрываГайд CGNAT
Простаивающий shell умирает через 15–25 мин на местеNAT middleboxВключить ServerAliveInterval 30Настройка keepalive

Вставьте таблицу во внутреннюю wiki: она сокращает циклы «сделайте ещё traceroute», когда строка уже подсказывает пробу.

Клиентский ранбук из шести шагов

  1. Метки времени: сопоставьте обрывы со сном через фрагменты pmset -g log.
  2. Захват роуминга: Option‑клик по иконке Wi‑Fi, фиксируйте дельты BSSID.
  3. Примените ServerAliveInterval и TCPKeepAlive yes на уровне stanza хоста.
  4. Проверка того же хоста по Ethernet USB‑C в «роуминговый час» — если стабильно, виновата политика WLAN.
  5. Эскалация WLAN с трейсами MTR из диагностики пути.
  6. Регион пересматривайте только после чистого клиентского пути — ориентируйтесь на цены, а не на ощущения.

Неофициальный шаг ноль: воспроизведите на чистом пользователе. Если исчезло, MDM или системный HTTP‑прокси могут портить путь — см. корпоративный CONNECT до сетевого инцидента.

Режим батареи, App Nap и фоновые вкладки Terminal

На батарее macOS может откладывать фон, чтобы сохранить автономность; неактивные окна Terminal попадают под коалесцирование таймеров, растягивая интервалы keepalive дальше вашего ServerAliveInterval, если подсистема питания считает сессию простой. Включите «Запретить переход в режим сна» для контрольного теста или запустите caffeinate -i ssh user@host на час. App Nap настраивается по приложению: отключите для Terminal, iTerm2 или Warp в «Свойства» на время сбора доказательств — потом верните, чтобы не убить автономию всей команды. Для целого дня кода на ProxyMac мини по‑прежнему выигрывает схема: провод к CPE для длинной сессии, Wi‑Fi для остального, VNC только когда нужны пиксели.

Переходя между корпусами, VoWiFi или видеозвонки на том же ноутбуке могут отбирать airtime у SSH, даже если средний RTT до Токио ровный. Если роуминг неизбежен, для человеческого shell удобнее Mosh, на сервере держите tmux или screen, а переподключение OpenSSH планируйте сами, а не по расписанию точки доступа.

Если снимаете tcpdump на клиенте во время загадочного обрыва, сравните интерфейс, который реально несёт Wi‑Fi, с туннелем — увидеть RST, вылетающие из вашего же MacBook, жёстко, но честно напоминает: фикс локальный, а не подводный кабель.

Фрагмент ~/.ssh/config для хостов ProxyMac

Host proxymac-* HostName %h.your-domain.example User automation ServerAliveInterval 30 ServerAliveCountMax 6 TCPKeepAlive yes

Сопутствующее чтение: длинные сессии на дрожащих путях выигрывают от autossh и компромиссов Mosh — Mosh для интерактива, обычный SSH для всего, что не REPL‑дружелюбно.

FAQ

Подвинет ли ProxyMac мини ближе? Регионы — это комплаенс и стратегия задержки: сначала ноутбук, затем осознанный выбор HK / JP / KR / SG / US.

Влияет ли iCloud relay на SSH? Только если вы гоните трафик через посторонние прокси — держите SSH прямым или задокументированным в корпоративном CONNECT.

А VNC при роуминге? Общий экран страдает от тех же TCP RST — см. основы VNC и отключайте эксперименты с «адаптивным качеством», пока путь не стабилен.

Почему Mac mini снова выигрывает, когда ноутбук приручён

После того как сон и роуминг под контролем, выделенный Mac mini M4 даёт предсказуемый CPU для автоматизации, unified memory для параллельных сборок и нативные API macOS без аренды «просто Linux» и мечты о hackintosh. ProxyMac держит пять регионов, чтобы команда совмещала резидентность данных и один ранбук. Сравните планы на странице цены, положите выдержки SSH из справочного центра рядом с матрицей и держите под рукой гайд по VNC для GUI‑пауз.

Сначала стабилизируйте клиент, потом регион

HK / JP / KR / SG / US · Apple Silicon M4