# Экстренное восстановление: прокси ru.hunab.app и SSH Одна страница на случай, когда «всё слетело». Полная схема, безопасность и нюансы `~/.ssh/config`: [PROXY_GUIDE.md](./PROXY_GUIDE.md). **Сеть / хотспот (интернет есть только после перезагрузки):** чаще всего **Manual IPv4 на Wi‑Fi (Joplin)** при смене подсети Android + битые маршруты; также PAC **1089** / SOCKS **1080** без клиента. Пошагово: **[HOTSPOT_NETWORK_EMERGENCY.md](./HOTSPOT_NETWORK_EMERGENCY.md)**. **RU‑сервисы режут доступ из‑за рубежа:** ранбук **[vpn/RUNBOOK.md](./vpn/RUNBOOK.md)** — старт `exit-via-ru.sh`, сброс `exit-via-local.sh` (абсолютные пути). **Thunderbird / браузер / «все приложения» не ходят в сеть при живом `curl`:** системный SOCKS на **`127.0.0.1:10809`**, а SSH-туннель на 10809 уже мёртв (после `exit-via-ru` / `exit-via-ru-do`). Почта падает **со всех ящиков сразу** — TB берёт системный прокси. См. раздел ниже и **[vpn/RUNBOOK.md](./vpn/RUNBOOK.md)**. --- ## Константы (запомнить / вставить в заметки) | Что | Значение | |-----|----------| | RU-прокси (SSH) | **149.154.64.19**, пользователь **ahau**, порт **22** | | Домен прокси | **ru.hunab.app** | | Прод (DO) | **209.38.32.21**, SSH **2222**, пользователь **hunab** (или **root**) | | Прод (веб) | **hunab.app** | **Ключи (типично):** - RU (ahau): `~/.ssh/id_ed25519` - RU root: `~/.ssh/hsites_new_deploy_key` → хост **`hsites-new`** - Прод: `~/.ssh/hunab_deploy_key` --- ## Порядок проверки (2 минуты) 1. **Интернет и DNS:** открыть в браузере `https://ru.hunab.app/proxy-health` и `https://ru.hunab.app/api/health`. 2. **RU SSH:** `ssh -o ConnectTimeout=10 hsites-ahau "echo RU_OK"` Без алиаса: `ssh -o ConnectTimeout=10 -i ~/.ssh/id_ed25519 ahau@149.154.64.19 "echo RU_OK"` 3. **Прод через RU:** `ssh -o ConnectTimeout=15 hunab-prod "echo PROD_OK"` 4. **Прод напрямую** (если RU мёртв): `ssh -o ConnectTimeout=15 hunab-prod-direct "echo PROD_DIRECT_OK"` Если шаг 2 падает — цепочка через прокси недоступна; используйте **прямой** доступ к DO (шаг 4) и SOCKS «через DO» (ниже). --- ## Минимальные блоки `~/.ssh/config` (восстановить вручную) **Важно:** `hunab-prod` и `hunab-prod-root` — **разные** блоки `Host` (разный `User`). Не объединять в одну строку `Host`. ```sshconfig Host hsites-ahau HostName 149.154.64.19 User ahau IdentityFile ~/.ssh/id_ed25519 StrictHostKeyChecking accept-new ServerAliveInterval 30 ServerAliveCountMax 8 Host hunab-prod hunab-prod-via-ahau HostName 209.38.32.21 User hunab Port 2222 IdentityFile ~/.ssh/hunab_deploy_key ProxyJump hsites-ahau StrictHostKeyChecking accept-new IdentitiesOnly yes ServerAliveInterval 30 ServerAliveCountMax 8 Host hunab-prod-direct HostName 209.38.32.21 User hunab Port 2222 IdentityFile ~/.ssh/hunab_deploy_key StrictHostKeyChecking accept-new IdentitiesOnly yes ServerAliveInterval 30 ServerAliveCountMax 8 ``` При необходимости root на проде — отдельный блок `Host hunab-prod-root` / `hunab-prod-root-direct` с `User root` (см. [PROXY_GUIDE.md](./PROXY_GUIDE.md)). **Зависший master-сокет:** `ssh -O exit hunab-prod 2>/dev/null; ssh -O exit hunab-prod-direct 2>/dev/null; rm -f ~/.ssh/cm-hunab-*` --- ## SOCKS для Telegram (порт **1081**) **Только RU (если достаточно выхода с 149.154.64.19):** ```bash ssh -D 1081 -N ahau@149.154.64.19 ``` **RU → прод → интернет** (когда с RU до Telegram не проходит): ```bash ssh -D 1081 -N -J hsites-ahau -i ~/.ssh/hunab_deploy_key -p 2222 hunab@209.38.32.21 ``` **Без RU, только DO:** ```bash ssh -D 1081 -N -i ~/.ssh/hunab_deploy_key -p 2222 hunab@209.38.32.21 ``` Проверка (второй терминал): ```bash curl -x socks5h://127.0.0.1:1081 -sI https://api.telegram.org | head -3 ``` В Telegram: **SOCKS5**, **127.0.0.1**, **1081**. Скрипты и launchd: [launchd/README.md](./launchd/README.md), [scripts/telegram-socks-tunnel.sh](./scripts/telegram-socks-tunnel.sh). --- ## scp на прод через RU (если нужен файл «прямо сейчас») ```bash PROXY_CMD="ssh -i $HOME/.ssh/id_ed25519 -o StrictHostKeyChecking=accept-new -W %h:%p hsites-ahau" scp -i ~/.ssh/hunab_deploy_key -o ProxyCommand="$PROXY_CMD" -o ServerAliveInterval=15 \ /path/to/file hunab@209.38.32.21:/home/hunab/ ``` --- ## Мёртвый системный SOCKS **10809** (Thunderbird, браузер) **Симптом (проверено 2026-07-22):** `curl https://…` OK, порты IMAP/POP до серверов OK, а Thunderbird не загружает почту **ни с одного** ящика; Safari/Chrome тоже могут «висеть». **RCA:** `exit-via-ru.sh` / `exit-via-ru-do.sh` включают системный SOCKS Wi‑Fi → `127.0.0.1:10809`. SSH на 10809 умер, а `Enabled: Yes` остался. Приложения с системным прокси (Thunderbird по умолчанию) стучатся в никуда. **Диагностика:** ```bash networksetup -getsocksfirewallproxy "Wi-Fi" # Enabled: Yes + Port: 10809 при пустом слушателе = баг lsof -nP -iTCP:10809 -sTCP:LISTEN || echo "10809: nothing" nc -z -G 2 127.0.0.1 10809 || echo "10809 closed" ``` **Мягкий сброс** (системный SOCKS off, **не** трогает Telegram на **1081**): ```bash networksetup -setsocksfirewallproxystate "Wi-Fi" off ``` **Полный сброс** (гасит и 10809, и 1081/1082): ```bash bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-local.sh ``` После сброса в Thunderbird — «Получить сообщения» (или перезапуск). Если снова нужен RU/DO: `exit-via-ru.sh` / `exit-via-ru-do.sh` + `ssh-exit-mode.sh verify`. Подробнее: [vpn/RUNBOOK.md](./vpn/RUNBOOK.md). **Отдельно:** ящик cock.li в TB может быть на локальном туннеле `127.0.0.1:9143` — это не системный SOCKS; см. `docs/firemail/COCKLI_THUNDERBIRD_SETUP.md`. --- ## Cursor не подключается **Смена страны / интернет OK, Cursor мёртв:** сначала проверь `settings.json` на мёртвый SOCKS (`127.0.0.1:1090` или **10809** + `http.proxySupport: override`). Отключение прокси помогало. Runbook: **[docs/apps/cursor/RUNBOOK.md](../apps/cursor/RUNBOOK.md)**. **PING timeout из РФ:** SOCKS **10809** — [docs/apps/cursor/README.md](../apps/cursor/README.md), скрипт `docs/apps/cursor/scripts/cursor-socks-tunnel.sh` (`CURSOR_SOCKS_VIA_DO=1` → Mac→RU→DO). Не путать с **1081** (Telegram) и устаревшим **1090**. Тот же порт использует `scripts/vpn/ssh-exit-mode.sh` (режимы `ru` / `ru-do`). --- ## Скрипт выбора маршрута к проду Из репозитория: [scripts/ssh-hunab-prod.sh](./scripts/ssh-hunab-prod.sh) - `HUNAB_PROD_FORCE_VIA=1` — сразу через RU - `HUNAB_PROD_FORCE_DIRECT=1` — только прямой DO --- *Краткая версия от PROXY_GUIDE; при расхождении правьте сначала основной гайд.* --- ## Как сейчас на этой машине (проверено: **2026-04-07**) **Среда:** macOS, пользователь **`eternal`**, имя хоста **`Eternals.local`**. ### `~/.ssh/config` - В начале файла: **`Include ~/.colima/ssh_config`** (Colima). - **RU → прод (основной путь):** `hunab-prod` и `hunab-prod-via-ahau` → `209.38.32.21:2222`, пользователь **`hunab`**, ключ **`~/.ssh/hunab_deploy_key`**, **`ProxyJump hsites-ahau`**, плюс **ControlMaster** / **`ControlPath ~/.ssh/cm-hunab-prod-%C`**, **ControlPersist 30m**, keepalive, **UseKeychain**. - **Прод без RU:** `hunab-prod-direct`, root-вариант **`hunab-prod-root-direct`** — те же порт/ключ, без `ProxyJump`, свой **`ControlPath`** (`cm-hunab-direct-*` / `cm-hunab-direct-root-*`). - **Root через RU:** `hunab-prod-root`, `hunab-prod-root-via-ahau` — как `hunab-prod`, но **`User root`** и **`cm-hunab-prod-root-%C`**. - **RU SSH (ahau):** **`hsites-ahau`** → **`149.154.64.19`**, **`~/.ssh/id_ed25519`**, keepalive, **UseKeychain** / **AddKeysToAgent**. - **RU SSH (root):** **`hsites-new`** → тот же IP, **`~/.ssh/hsites_new_deploy_key`**. - **Альтернатива через root на RU:** **`prod-ru`**, **`hunab-prod-via-ru`** — **`ProxyJump hsites-new`** (не `hsites-ahau`). В конфиге блок **`Host prod-ru` продублирован дважды** — лишнее можно схлопнуть при правке. - **Туннель через локальный SOCKS 1090:** **`prod-tunnel`** — `ProxyCommand nc -X 5 -x 127.0.0.1:1090 %h %p`. - **SOCKS для Telegram:** только **`telegram-socks-via-do`** (Mac→RU→DO). **`telegram-socks-direct-do`** — опционально для ручного SSH к DO без RU, не для автозамены SOCKS. - Дополнительно в файле: старые хосты **`hsites` / `hsites.hunab`**, **`ahau@ru.hunab`**, боты **`hunab-bot` / `hunab.bots`**, алиас **`tunnel`** на `149.154.64.19`. **Ключи на диске (есть):** `~/.ssh/id_ed25519`, `~/.ssh/hunab_deploy_key`, `~/.ssh/hsites_new_deploy_key`. ### Автозапуск SOCKS **1081** (Telegram) - **LaunchAgent:** `~/Library/LaunchAgents/com.hunab.telegram-socks-via-do.plist` — **RunAtLoad**, **KeepAlive**, лог **`/tmp/telegram-socks-tunnel-via-do.log`**. - **Скрипт:** `~/Library/Application Support/hunab/telegram-socks-launch.sh` — всегда **`ssh -D 1081 -N telegram-socks-via-do`** (Mac→RU→DO). - Состояние на момент проверки: задание в **launchctl** в статусе **running**; при обрыве цепочки SSH в логе сыплются ошибки до следующего успешного подключения (смотреть хвост лога). ### Ручной запуск из репозитория - Скрипт: **`docs/connectivity/scripts/telegram-socks-tunnel.sh`** — порт **1081**; без `TELEGRAM_SOCKS_VIA_DO` — только RU; с **`TELEGRAM_SOCKS_VIA_DO=1`** — только Mac→RU→DO (`telegram-socks-via-do`), как LaunchAgent. ### Прочее на машине - В **launchctl** также видны **Shadowsocks** (`com.shadowsocks.local`, `com.qiuyuzhou.shadowsocksX-NG.local`) — к hunab-прокси не относятся, но могут влиять на маршрутизацию, если включены. *Порт **1081** и SSH в момент автоматической проверки из среды агента могли быть пустыми или с ошибками сети; ориентируйтесь на `lsof -i :1081` и лог выше.*