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>
This commit is contained in:
@@ -1,2 +1,122 @@
|
||||
# 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.
|
||||
|
||||
Reference in New Issue
Block a user