# SSH SOCKS: быстрое переключение выхода в интернет

Три режима без WireGuard/Shadowsocks: **локальный IP**, **RU-прокси**, **RU → DO** (снаружи виден **IP прод-сервера DO**).

Политика: для выхода с **IP DO** используется **только** цепочка **Mac → RU (`hsites-ahau`) → DO** (`telegram-socks-via-do`). Прямой Mac→DO скрипты не поднимают.

---

## Ожидаемые 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**.

---

## Скрипты (из корня репозитория `local_machine`)

**Один вход:**

```bash
./scripts/vpn/ssh-exit-mode.sh COMMAND
```

**Короткие алиасы** (то же самое):

```bash
./scripts/vpn/exit-via-local.sh      # стоп туннелей
./scripts/vpn/exit-via-ru.sh         # только RU
./scripts/vpn/exit-via-ru-do.sh      # RU → DO (IP DO снаружи)
```

| Команда | Действие |
|---------|----------|
| **`local`** \| **`off`** \| **`stop`** | Гасит SSH SOCKS на портах **10809**, **1081**, **1082**. Дальше: в **Cursor** уберите `http.proxy` / `https.proxy` (или отключите системный SOCKS) — трафик пойдёт с **локального публичного IP**. |
| **`ru`** | Поднимает SOCKS **`127.0.0.1:10809`** → выход с **RU** (`hsites-ahau`). В Cursor: `socks5://127.0.0.1:10809`. |
| **`ru-do`** | Проверка RU (6 с), затем SOCKS на **10809** через **`telegram-socks-via-do`**. Снаружи — **IP DO**. В Cursor: тот же `socks5://127.0.0.1:10809`. |
| **`status`** | Кто слушает порты из списка остановки. |
| **`verify`** | IP без прокси и через SOCKS на `SSH_EXIT_MAIN_PORT`. |

**Переменные:** `SSH_EXIT_MAIN_PORT` (по умолчанию **10809**), `SSH_EXIT_STOP_PORTS`, `SSH_EXIT_RU_HOST` (по умолчанию `hsites-ahau`).

**`~/.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` (и для HTTPS то же). **Disable Http2** — выкл.

На **локальный IP:** `exit-via-local.sh`, затем в Cursor **убрать** proxy.

---

## Telegram (порт 1081)

Скрипт **`local`** останавливает и **1081**. Если нужен Telegram через DO при том же «полном стопе», после `local` поднимите туннель отдельно: [TELEGRAM_GUIDE.md](../TELEGRAM_GUIDE.md), `telegram-socks-tunnel.sh` / LaunchAgent.

---

## Схема

```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-04-08*
