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>
123 lines
10 KiB
Markdown
123 lines
10 KiB
Markdown
# 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.
|