Files
local_machine/docs/connectivity/vpn/SSH_EXIT_MODES.md
ahauimix 0238aa7c02 Add Object B and self-growth canons with Cursor ledger rules; refresh connectivity and VPN runbooks.
Track day metrics/anamnesis HARD rules under .cursor/rules and personal docs so each screening updates days/{KIN}, dynamics, and big-data ledger.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 10:22:56 +08:00

131 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SSH SOCKS: быстрое переключение выхода в интернет
**Операционный ранбук** (старт / сброс / из любой папки): **[RUNBOOK.md](./RUNBOOK.md)**.
Три режима без WireGuard/Shadowsocks: **локальный IP**, **RU-прокси**, **RU → DO** (снаружи виден **IP прод-сервера DO**).
Политика: для выхода с **IP DO** используется **только** цепочка **Mac → RU (`hsites-ahau`) → DO** (`telegram-socks-via-do`). Прямой Mac→DO скрипты не поднимают.
На **macOS** режимы `ru` / `ru-do` по умолчанию включают **системный SOCKS** (`networksetup` на WiFi → `127.0.0.1:10809`), чтобы браузер и приложения выходили с нужным IP. `local` его выключает. Отключить поведение: `SSH_EXIT_SYSTEM_PROXY=0`.
**Ловушка:** если SSH на 10809 умер, а системный SOCKS остался `Enabled: Yes`, приложения с системным прокси (Thunderbird, Safari/Chrome) перестают ходить в сеть при живом `curl`. Почта в TB падает **со всех ящиков**. Мягкий сброс: `networksetup -setsocksfirewallproxystate "Wi-Fi" off` (не трогает Telegram **1081**). Полный: `exit-via-local.sh`. Ранбук: [RUNBOOK.md](./RUNBOOK.md).
---
## Из‑за рубежа: RUсервисы режут иностранный IP
```bash
bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-ru.sh
bash /Users/eternal/code/local_machine/scripts/vpn/ssh-exit-mode.sh verify
```
Сброс при проблемах с сетью:
```bash
bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-local.sh
```
Полный чеклист: [RUNBOOK.md](./RUNBOOK.md).
---
## Ожидаемые IP (проверка «снаружи»)
| Режим | Как проверить | Ожидаемый публичный IP (на момент настройки репо) |
|--------|----------------|-----------------------------------------------------|
| **local** | `curl -sS https://ipinfo.io/ip` | Ваш домашний/мобильный IP |
| **ru** | `curl -sS -x socks5h://127.0.0.1:10809 https://ipinfo.io/ip` | **149.154.64.19** (RU VPS, `ru.hunab.app`) |
| **ru-do** | то же `-x socks5h://127.0.0.1:10809` | **209.38.32.21** (DO, `hunab.app`) |
Если IP у VPS сменился — сверяйте с [PROXY_GUIDE.md](../PROXY_GUIDE.md) / [PROXY_EMERGENCY.md](../PROXY_EMERGENCY.md).
Быстрая проверка одной командой (порт SOCKS по умолчанию **10809**):
```bash
./scripts/vpn/ssh-exit-mode.sh verify
```
После **`ru-do`** в блоке «Через SOCKS» должно быть **209.38.32.21** (или актуальный IP DO). После **`ru`** — **149.154.64.19**.
`curl` **не** использует системный SOCKS macOS — для CLI всегда `-x socks5h://127.0.0.1:10809` или `exit-verify`. Браузер с системным прокси проверяйте на ipinfo.io.
---
## Скрипты (из корня репозитория `local_machine`)
**Один вход:**
```bash
./scripts/vpn/ssh-exit-mode.sh COMMAND
```
**Короткие алиасы** (то же самое):
```bash
./scripts/vpn/exit-via-local.sh # стоп туннелей + системный SOCKS off
./scripts/vpn/exit-via-ru.sh # только RU + системный SOCKS on
./scripts/vpn/exit-via-ru-do.sh # RU → DO (IP DO снаружи)
./scripts/vpn/install-exit-aliases.sh # exit-ru / exit-local в ~/.zshrc
```
| Команда | Действие |
|---------|----------|
| **`local`** \| **`off`** \| **`stop`** | Гасит SSH SOCKS на портах **10809**, **1081**, **1082**; на macOS — системный SOCKS off. Дальше: в **Cursor** уберите `http.proxy` / `https.proxy` при необходимости. |
| **`ru`** | Поднимает SOCKS **`127.0.0.1:10809`** → выход с **RU** (`hsites-ahau`) + системный SOCKS. В Cursor: `socks5://127.0.0.1:10809`. |
| **`ru-do`** | Проверка RU (6 с), затем SOCKS на **10809** через **`telegram-socks-via-do`** + системный SOCKS. Снаружи — **IP DO**. |
| **`status`** | Кто слушает порты + системный SOCKS. |
| **`verify`** | IP без прокси и через SOCKS на `SSH_EXIT_MAIN_PORT`. |
**Переменные:** `SSH_EXIT_MAIN_PORT` (по умолчанию **10809**), `SSH_EXIT_STOP_PORTS`, `SSH_EXIT_RU_HOST` (по умолчанию `hsites-ahau`), `SSH_EXIT_SYSTEM_PROXY` (`1`/`0`), `SSH_EXIT_NET_SERVICE` (по умолчанию `Wi-Fi`).
**`~/.ssh/config`:** `hsites-ahau`, **`telegram-socks-via-do`** с `ProxyJump hsites-ahau` — шаблоны в [PROXY_GUIDE.md](../PROXY_GUIDE.md).
---
## Cursor за 30 секунд
1. **`./scripts/vpn/exit-via-ru-do.sh`** (или `./scripts/vpn/ssh-exit-mode.sh ru-do`).
2. **`./scripts/vpn/ssh-exit-mode.sh verify`** — убедиться, что через SOCKS IP **DO**.
3. В Cursor: **Settings → proxy**`socks5://127.0.0.1:10809`, **`http.proxySupport`: `override`**. **Disable Http2** — выкл. Порт **10809**, не **1090**.
На **локальный IP:** `exit-via-local.sh`, затем в Cursor **обязательно**:
```json
"http.proxy": "",
"http.proxySupport": "off"
```
иначе останется мёртвый SOCKS и Agent/API упадут при живом интернете (типично после смены страны). См. [docs/apps/cursor/RUNBOOK.md](../../apps/cursor/RUNBOOK.md).
---
## Telegram (порт 1081)
Скрипт **`local`** останавливает и **1081**. Если нужен Telegram через DO при том же «полном стопе», после `local` поднимите туннель отдельно: [TELEGRAM_GUIDE.md](../TELEGRAM_GUIDE.md), `telegram-socks-tunnel.sh` / LaunchAgent.
Если проблема только в мёртвом системном SOCKS (TB/браузер), а Telegram на 1081 жив — **не** вызывайте `local`: достаточно `networksetup -setsocksfirewallproxystate "Wi-Fi" off`.
---
## Схема
```mermaid
flowchart LR
subgraph off [local]
A[Приложения без SOCKS] --> NET1[Интернет]
end
subgraph r [ru]
B[SOCKS :10809] --> RU[hsites-ahau]
RU --> NET2[Интернет]
end
subgraph rd [ru-do]
C[SOCKS :10809] --> RU2[hsites-ahau]
RU2 --> DO[DO 209.38.32.21]
DO --> NET3[Интернет]
end
```
---
*Обновлено: 2026-07-22*