# 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.