Files
local_machine/docs/connectivity/vpn/RUNBOOK.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

258 lines
10 KiB
Markdown
Raw 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.
# Runbook: выход в интернет через RU-хостинг (SSH SOCKS)
Симптом: **RU-сервисы режут доступ из‑за рубежа** (бан иностранного IP). Нужен выход с IP `ru.hunab.app` (**149.154.64.19**).
Команды ниже — **из любой папки** (абсолютные пути).
Корень репо: `/Users/eternal/code/local_machine`
---
## Быстрый старт (включить RU)
```bash
bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-ru.sh
```
Что делает: SOCKS `127.0.0.1:10809``hsites-ahau` + **системный SOCKS** на WiFi.
Проверка:
```bash
bash /Users/eternal/code/local_machine/scripts/vpn/ssh-exit-mode.sh verify
```
Ожидание в блоке «Через SOCKS»: **149.154.64.19**, `country: RU`.
В браузере: https://ipinfo.io → RU.
Статус портов / системного прокси:
```bash
bash /Users/eternal/code/local_machine/scripts/vpn/ssh-exit-mode.sh status
```
---
## Другие режимы
| Цель | Команда |
|------|---------|
| Выход с **IP RU** | `bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-ru.sh` |
| Выход с **IP DO** (через RU) | `bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-ru-do.sh` |
| Снять туннели + системный SOCKS | `bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-local.sh` |
---
## Мёртвый системный SOCKS 10809
**Симптомы:** `curl` / `nc` до почтовых серверов OK, но Thunderbird не качает **все** ящики; браузер «висит»; Cursor с `socks5://127.0.0.1:10809` мёртв.
**RCA (2026-07-22):** после `exit-via-ru` / `exit-via-ru-do` системный SOCKS WiFi остаётся на `127.0.0.1:10809`, а SSH-туннель на порту уже не слушает. Thunderbird (и др.) используют системный прокси → отказ сразу на всех аккаунтах.
**Проверка:**
```bash
networksetup -getsocksfirewallproxy "Wi-Fi"
lsof -nP -iTCP:10809 -sTCP:LISTEN || echo "10809: nothing"
bash /Users/eternal/code/local_machine/scripts/vpn/ssh-exit-mode.sh status
```
Паттерн: `Enabled: Yes`, Port `10809`, а `lsof` пустой.
---
## Сброс при проблемах с интернетом
Если после `exit-via-ru` «пропал интернет», браузер не грузит, Thunderbird молчит при живом `curl`, или туннель умер при включённом системном SOCKS — **сначала снять мёртвый системный SOCKS**, потом при необходимости recover хотспота.
### 0. Мягкий сброс (сохранить Telegram на 1081)
Только выключить системный SOCKS — **не** убивает LaunchAgent / SSH на **1081**:
```bash
networksetup -setsocksfirewallproxystate "Wi-Fi" off
networksetup -getsocksfirewallproxy "Wi-Fi" # Enabled: No
```
После этого в Thunderbird — «Получить сообщения».
### 1. Полный сброс SSH-exit
```bash
bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-local.sh
```
Снимает SSH SOCKS на **10809 / 1081 / 1082** и выключает системный SOCKS на WiFi. Telegram через 1081 после этого нужно поднять снова (LaunchAgent или `telegram-socks-tunnel.sh`).
Проверка, что системный SOCKS выключен:
```bash
networksetup -getsocksfirewallproxy "Wi-Fi"
```
Ожидание: `Enabled: No`.
Быстрый тест сети без прокси:
```bash
curl -sS --max-time 8 https://1.1.1.1
curl -sS --max-time 8 https://ipinfo.io/ip
```
### 2. Если интернет всё ещё мёртв (хотспот / stale Manual / route)
```bash
bash /Users/eternal/code/local_machine/docs/connectivity/scripts/macos-hotspot-network-recover.sh recover
```
Запросит sudo. Подробно: [HOTSPOT_NETWORK_EMERGENCY.md](../HOTSPOT_NETWORK_EMERGENCY.md).
### 3. Ядерный сброс прокси вручную (если скрипт недоступен)
```bash
networksetup -setautoproxystate "Wi-Fi" off
networksetup -setsocksfirewallproxystate "Wi-Fi" off
pkill -f 'ssh.*-D 10809' 2>/dev/null || true
pkill -f 'ssh.*-D 1081' 2>/dev/null || true
pkill -f 'ssh.*-D 1082' 2>/dev/null || true
curl -sS --max-time 8 https://ipinfo.io/ip
```
### 4. Снова включить RU (после рабочего интернета)
```bash
curl -sS --max-time 8 https://1.1.1.1 && \
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
```
Не поднимайте `exit-via-ru`, пока не работает обычный `curl https://1.1.1.1`.
---
## WireGuard на телефоне (выход через RU `149.154.64.19`)
На RU уже крутится **wg-quick@wg0**, UDP **51820**, full-tunnel (`AllowedIPs = 0.0.0.0/0`) → снаружи IP **RU**.
### Установка
1. App Store / Google Play → **WireGuard**
2. **+** → **Create from QR code** (или «Создать из файла»)
3. Сканируйте QR peer3 (неиспользуемый слот `192.168.15.3`) — файл: `/tmp/wg-ru-mobile-peer3-qr.png`
Пересоздать QR:
```bash
ssh -o BatchMode=yes hsites-ahau 'sudo -n cat /etc/wireguard/peer3.conf' | qrencode -t PNG -s 8 -o /tmp/wg-ru-mobile-peer3-qr.png && open /tmp/wg-ru-mobile-peer3-qr.png
```
4. Имя туннеля: например `ru-hunab`
5. Включить туннель → в браузене https://ipinfo.io → **RU** / `149.154.64.19`
### Файл вместо QR
```bash
ssh -o BatchMode=yes hsites-ahau 'sudo -n cat /etc/wireguard/peer3.conf' > /tmp/wg-ru-mobile.conf
```
Импорт в WireGuard: **+** → Create from file → `/tmp/wg-ru-mobile.conf`.
### Важно
| | |
|--|--|
| Endpoint | `149.154.64.19:51820` |
| peer3 | свободен (не подключался); peer2 уже использовался |
| Не коммитьте | `.conf` / QR с PrivateKey в git |
| Kill switch | в приложении WireGuard (Android) при необходимости |
Если handshake не идёт: UDP **51820** до RU не доходит (оператор/WiFi режет) — проверьте с другой сети.
---
## Brave не открывает tbank.ru (Chrome открывает)
Туннель OK (`curl -x socks5h://127.0.0.1:10809` → 200), Chrome с системным SOCKS проходит, **Brave** — нет.
**Причина:** у Brave включён **Secure DNS (DoH)** на Cloudflare (`mode: secure`). Запросы DNS/часть трафика идут мимо SOCKS → с зарубежного IP до `tbank.ru` таймаут. У Chrome DoH обычно выключен.
### В Brave (UI, 30 секунд)
1. `brave://settings/security`**Use secure DNS****Off**
2. `brave://settings/system`**Use system proxy settings when available****On**
3. (если всё ещё тупит) `brave://flags/#enable-quic`**Disabled** → Relaunch
4. Проверка: https://ipinfo.io → должно быть **RU** / `149.154.64.19`, затем https://www.tbank.ru/
### Если правили prefs скриптом
Brave должен быть **закрыт**, иначе перезапишет `Local State`.
```bash
osascript -e 'quit app "Brave Browser"' 2>/dev/null || true
sleep 2
python3 - <<'PY'
import json
from pathlib import Path
p = Path.home() / "Library/Application Support/BraveSoftware/Brave-Browser/Local State"
st = json.loads(p.read_text())
st["dns_over_https"] = {"mode": "off"}
p.write_text(json.dumps(st, separators=(",", ":")))
print("Brave Secure DNS → off")
PY
open -a "Brave Browser"
```
---
## Диагностика
| Признак | Что делать |
|---------|------------|
| Thunderbird не грузит **все** ящики, `curl` OK | Системный SOCKS на мёртвом **10809** → мягкий off (шаг 0) или `exit-via-local.sh` |
| `Enabled: Yes` / Port 10809, `lsof :10809` пусто | То же: снять системный SOCKS; при нужде снова `exit-via-ru.sh` |
| SOCKS verify = RU, браузер всё ещё «за рубежом» | Системный SOCKS off → снова `exit-via-ru.sh`; в Chrome: «Use system proxy» |
| Chrome OK, Brave нет (tbank и т.п.) | Выключить Secure DNS в Brave — см. выше |
| `verify` — «нет ответа» | `exit-via-local.sh`, затем `exit-via-ru.sh`; `ssh -o ConnectTimeout=10 hsites-ahau 'echo OK'` |
| Интернет умер после RU | `exit-via-local.sh` → при необходимости hotspot `recover` |
| Cursor мёртв при живой сети | Снять мёртвый proxy в settings; [apps/cursor/RUNBOOK.md](../../apps/cursor/RUNBOOK.md) |
| Только CLI нужен RU, без системного SOCKS | `SSH_EXIT_SYSTEM_PROXY=0 bash /Users/eternal/code/local_machine/scripts/vpn/exit-via-ru.sh` |
Проверка SSH до RU:
```bash
ssh -o BatchMode=yes -o ConnectTimeout=10 hsites-ahau 'echo RU_OK'
```
Без алиаса:
```bash
ssh -o BatchMode=yes -o ConnectTimeout=10 -i ~/.ssh/id_ed25519 ahau@149.154.64.19 'echo RU_OK'
```
---
## Cursor (опционально)
Тот же порт **10809**:
```json
"http.proxy": "socks5://127.0.0.1:10809",
"http.proxySupport": "override"
```
На локальный выход: `exit-via-local.sh` **и** в Cursor `"http.proxy": ""`, `"http.proxySupport": "off"`.
---
## Связанные документы
| Документ | Зачем |
|----------|--------|
| [SSH_EXIT_MODES.md](./SSH_EXIT_MODES.md) | Режимы local / ru / ru-do, схема |
| [HOTSPOT_NETWORK_EMERGENCY.md](../HOTSPOT_NETWORK_EMERGENCY.md) | Сеть после reconnect хотспота |
| [PROXY_EMERGENCY.md](../PROXY_EMERGENCY.md) | SSH / прокси «всё слетело» |
| [apps/cursor/RUNBOOK.md](../../apps/cursor/RUNBOOK.md) | Cursor + мёртвый SOCKS |
---
*Обновлено: 2026-07-22*