Files
Rus_VPS/README.md
T
saturnandClaude Opus 5.5 f436657745 README: hub architecture draft, recon results, hub-to-exit transport findings
Rus_VPS (rus.noren.ru) as single RU entry with split routing to the foreign
fleet. From ADMINVPS every TCP transport to foreign hosting except SSH is cut
by TSPU; AmneziaWG v2 (UDP) to Hetzner carries ~150 Mbit/s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 12:14:50 +03:00

123 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.
# Rus_VPS
Единая российская точка входа для клиентов к нашему зарубежному парку VPS.
Клиент получает конфиг только до Rus_VPS. Российский трафик уходит с хаба напрямую,
зарубежный — по VLESS-туннелям на выбранную для клиента зарубежную VPS
(Hetzner, Финляндия, …). Протоколы входа: VLESS, AmneziaWG, HTTP(S)-прокси для
браузера, MTProto.
> Профили хостов, диагностика и история изменений ведутся в ops-knowledge
> (`vps/adminvps-russia.md`, `vps/hetzner-big-helsinki.md`,
> `diagnostics/2026-10-21-vps-rus-noren-hub-recon.md`). Здесь — архитектура, конфиги
> (без секретов) и runbook'и хаба.
## Хосты
| Роль | Хост | IP | Состояние на 2026-10-21 |
|---|---|---|---|
| Хаб (вход) | `rus.noren.ru`, ADMINVPS, Москва | `168.113.171.130` | Ubuntu 24.04, чистая база: только sshd + zabbix-agent2. IPv6 нет. `ip_forward=0` |
| Тестовый выход | `big-helsinki`, Hetzner, Хельсинки | `46.62.192.219` | **Боевой многоарендный хост** (telemt, AmneziaWG ×2, OpenClaw, Nordway; клиенты 39/47). `:443` занят nginx SNI-роутером |
## Результаты разведки (2026-10-21)
- Канал хаб → big-helsinki: RTT 64 мс. 20 МБ по SSH прошли за 5,2 с, «заморозки после
15–20 КБ» нет. Зарубежный TLS в целом работает: Cloudflare 10 МБ ≈ 237 Мбит/с.
С настоящим VLESS/REALITY ещё не проверяли.
- `hel1/fsn1-speed.hetzner.com` с хаба не открываются (0 байт, таймаут). Как контроль
их не использовать.
- **GeoIP хаба расходится.** MaxMind считает `168.113.171.130` адресом в **США**,
ip-api и ipinfo — в РФ. Российские сайты с гео-фильтрацией по MaxMind могут
посчитать «прямой» трафик с хаба зарубежным.
- Локальный DNS — `195.208.4.1` (НСДИ). Заблокированные домены (YouTube, Instagram)
через него не резолвятся. Зарубежные имена нужно резолвить через туннель или DoH.
- На хабе есть AES-NI, модуль WireGuard и `/dev/net/tun`. Для хаба нужно включить
форвардинг и BBR.
- Безопасность: root по паролю, файрвола нет, fail2ban нет. Закрыть до запуска.
## Канал хаб → выходы: проверено 2026-10-21
Из сети ADMINVPS любой TCP до зарубежных хостингов, кроме SSH, режется ТСПУ: обрыв на
~16 КБ или ноль данных. Проверено на Hetzner и на CLOUDVPS (FI) для REALITY,
TLS и raw VLESS Encryption. Тот же REALITY-клиент с HOSTKEY RU (ru-relay) работает
на ~116 Мбит/с.
**AmneziaWG v2 (UDP) до Hetzner работает чисто:** ~150 Мбит/с вниз, ~118 вверх, без
обрывов. Поэтому плечи «хаб → выход» делаем на AWG. Xray на хабе остаётся
маршрутизатором и отправляет трафик каждого выхода в его AWG-интерфейс
(`sockopt.interface` или метка + policy route). DNS для зарубежных имён — тоже через
туннель.
## Предлагаемая архитектура (черновик)
```
клиенты ──► rus.noren.ru (168.113.171.130)
├─ VLESS+REALITY :443 ─┐
├─ HTTPS-прокси │
├─ MTProto (FakeTLS) ├─► Xray (маршрутизатор)
└─ AmneziaWG (UDP) ────┘ ├─ geosite/geoip RU ──► direct (с IP хаба)
(TPROXY в Xray) ├─ клиент A ──► VLESS → big-helsinki
├─ клиент B ──► VLESS → FI-VPS
└─ группа C ──► balancer(A,B) с observatory
```
1. **Один Xray-core как маршрутизатор на хабе.** Схема уже обкатана на `ru-relay`:
VLESS+REALITY+Vision наружу, AmneziaWG/IKEv2 заводятся в Xray через TPROXY,
раздельная маршрутизация внутри Xray. Берём тот же стек, а не sing-box: опыт и
грабли уже записаны в ops-knowledge (`VLESSNONE`, `IPIfNonMatch`).
2. **Клиента определяем по учётным данным, а не по домену.** Правило маршрутизации
Xray `user` (email у UUID VLESS, логин HTTP-прокси) или `inboundTag`. У AmneziaWG —
по подсети или пиру, у MTProto — по отдельному инбаунду/секрету на группу. Домены
`p.ukiz.ru`, `p.noren.ru` полезны как адрес в конфиге: хаб можно переносить без
перевыпуска конфигов, и клиенты разделены визуально. Но у REALITY в SNI стоит
маска-домен (чужой сайт), а не наш, поэтому домен как ключ маршрутизации там не
работает. Работает он только для TLS с нашими сертификатами (XHTTP/WS,
HTTPS-прокси).
3. **Что считать «RU».** `geosite:category-ru` + `geoip:ru` из
`runetfreedom/russia-v2ray-rules-dat` (обновляется ежедневно), плюс `.ru/.su/.рф`.
Всё остальное идёт в туннель. Обязательно проверить с хаба банки, Госуслуги и
маркетплейсы клиентов: см. GeoIP=US выше.
4. **Туннели хаб → выходы.** Основной — VLESS+REALITY+Vision (TCP), резервный — XHTTP.
Каждый выход — отдельный outbound. Для групп клиентов — `balancer` + `observatory`,
чтобы при падении выхода переключаться автоматически.
5. **Выход на big-helsinki.** Порт `:443` занят nginx (stream `ssl_preread`).
Варианты: (а) добавить SNI-маршрут в существующий nginx на локальный инбаунд Xray
(REALITY за `ssl_preread` работает); (б) отдельный порт. Вариант (а) незаметнее, но
правит боевой nginx арендатора — согласовать. Принимать соединения только с
`168.113.171.130`.
6. **MTProto.** telemt на хабе ходит к DC Telegram через туннель: с хаба
`api.telegram.org` даёт таймаут. Проверить, умеет ли текущий telemt upstream
SOCKS5. Если нет — клиентский FakeTLS принимать на хабе и через VLESS-туннель
пробрасывать в telemt на выходе.
7. **HTTP-прокси для браузера.** Только с TLS (HTTPS-прокси) и аутентификацией: обычный
HTTP-прокси передаёт логин открытым текстом по сети РФ.
8. **DNS.** Встроенный DNS Xray: RU-домены — через `77.88.8.8` напрямую, остальные —
DoH через туннель. Время по chrony: REALITY чувствителен к сдвигу часов.
9. **Общее.** nftables по умолчанию drop, открыты только порты хаба. SSH — только по
ключу. Метрики Xray (stats API) по пользователям — в Zabbix. Конфиги хранятся в этом
репо шаблонами, секреты — вне git.
## Риски
- Хаб — единая точка отказа и единая точка блокировки для всех клиентов. Нужен второй
RU-вход (хотя бы холодный) и короткий TTL у клиентских `p.*` имён.
- Мобильные «белые списки»: ради них во многом и нужен российский вход. Доступность
`168.113.171.130` с мобильных операторов в режиме ограничений нужно проверить
отдельно, со стороны клиента.
- Из-за MaxMind=US часть «прямого» RU-трафика может видеться сайтам как зарубежный.
## Открытые вопросы
- Можно ли ставить Xray-выход на боевой big-helsinki, и каким способом: через nginx
SNI или на отдельном порту?
- Какие клиенты/домены переезжают первыми, и какие выходы за ними закреплены?
- Устраивает ли, что RU-трафик всех клиентов выходит с одного IP хаба?
## Ближайшие шаги
1. Хаб: hardening (ключи, nftables, fail2ban), `ip_forward`, BBR, chrony.
2. Xray на хабе + один VLESS-туннель до big-helsinki. Проверить реальный REALITY-канал
на объёме.
3. Первый инбаунд (VLESS) для тестового клиента, проверить split: RU напрямую, остальное
через Хельсинки.
4. Затем AmneziaWG → TPROXY, HTTPS-прокси, MTProto.