Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 (вечер) |
|---|---|---|---|
| Хаб (вход), новый | Миран, Санкт-Петербург (hostname тоже rus.noren.ru) |
91.142.94.196 |
Ubuntu 22.04, обновлена. Docker CE, Tailscale-клиент 00-miran-ru, Zabbix Agent 2, fail2ban, nftables. TCP 1080/3128 снаружи доходят. UDP 500 режется у Мирана, поэтому IKEv2 здесь невозможен (решили, что не нужен). Профиль: vps/miran-russia.md |
| Хаб, отказались | rus.noren.ru, ADMINVPS, Москва |
168.113.171.130 |
ТСПУ режет TCP до зарубежных хостингов. ADMINVPS не пропускает входящие TCP 1080/3128. На нём развёрнут стек p.noren.ru (/opt/p-noren), но снаружи он недоступен |
| Выходы | Tailscale exit nodes парка | — | По тесту коллеги (diagnostics/2026-10-21-vps-adminvps-russia-tailscale-exit-paths.md): 04-zomro лучший, 01-adminvps запасной. С Мирана прямые пути есть до обоих (41 и 23 мс) |
Переезд p.noren.ru (с fedora-xxx, XSERVER)
- Секреты и конфиги (telemt MTProto
:1080, 3proxy:3128, IKEv2) скопированы без изменений. Пользователям ничего не нужно менять. DNSp.noren.ruпока указывает на168.113.171.130. - Схема: копия стека fedora-xxx. Userspace-Tailscale
ts-proxyс exit node даёт SOCKS5, через него работают telemt и 3proxy. Правило «LAN без пароля» в 3proxy убрано. Контейнеру 3proxy нужен честный DNS: с российских хостов обычный DNS к 8.8.8.8 и 1.1.1.1 перехватывается, Quad9 отвечает честно. - Сделано 2026-10-21: стек работает на Миране (
/opt/p-noren). Выход —04-zomro, он лучший по тесту коллеги, запасной —02-cloudvps. Проверено с XSERVER и HOSTKEY. MTProto:1080и HTTP-прокси:3128работают со старыми секретами. IKEv2 лежит в compose-профилеikev2и не запускается. Копия на ADMINVPS остановлена. - Раздельная маршрутизация для HTTP-прокси (2026-10-21): 3proxy → Xray (
ts-lan-xray). РФ (geosite:category-ru,.ru/.su/.рф,geoip:ru) уходит напрямую с IP хаба91.142.94.196. Заблокированное в РФ (ru-blocked) и всё остальное — в туннель04-zomro. Исключение: у Мирана нет маршрута до Госуслуг, поэтому они идут в туннель. Геоданные — runetfreedom, их автообновление ещё не настроено. MTProto всегда идёт через туннель. - AmneziaWG (2026-10-21):
amnezia-awg2(36113/udp). Клиенты идут по той же политике, что и прокси: nft-пометка + TPROXY → нативный Xrayawg-router→ts-lan-xray. Отказ безопасный: если роутер лежит, трафик не уходит в обход туннеля. ICMP держитunblock-icmp-watch. Зарубежный UDP работает с 2026-10-21: туннельный выходts-lan-xrayтеперь идёт через kernel-mode Tailscalets-vpn(00-miran-ru-vpn, выход04-zomro) и SOCKSxray-exitв его netns. Userspacets-proxyUDP не передаёт и остался только для MTProto. Инструмент:tools/amnezia-split-routingв ops-knowledge. - VLESS (2026-10-21): VLESS + REALITY + Vision на
91.142.94.196:443, SNIwww.spbu.ru. Это второй inbound вts-lan-xray, правило маршрутизации то же (РФ напрямую, остальное через04-zomro, UDP работает). Клиент пока один —noren-shared. Параметры и ссылка лежат на хосте в/opt/p-noren/vless-clients.env, в git их нет. Для каждого клиента лучше заводить свой UUID. - Резервный выход (2026-10-21): AmneziaWG до CloudVPS (
78.17.12.7:39928) в контейнереawg-backupс Xray SOCKSxray-backup. Вts-lan-xrayстоит балансировщикegress: основной — Tailscale/ZOMRO, резерв — CloudVPS, проверка раз в 30 с. Проверено: на резерв переключается за ~24 с, обратно за ~27 с, российский трафик не затрагивается. REALITY до CloudVPS:8443 с Мирана нестабилен (4/15) и не используется. MTProto (telemt) пока без резерва. - DNS
p.noren.ruуже на91.142.94.196(TTL 86400 — до суток кэша). - Было в плане: переключить публичный A-запись
p.noren.ruна91.142.94.196— сделано. Внутренний DNS XSERVER (192.168.0.2) отдаётp.noren.ru → 192.168.0.10(старый fedora-xxx); поменять, когда fedora-xxx будут выводить.
Результаты разведки (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
- Один Xray-core как маршрутизатор на хабе. Схема уже обкатана на
ru-relay: VLESS+REALITY+Vision наружу, AmneziaWG/IKEv2 заводятся в Xray через TPROXY, раздельная маршрутизация внутри Xray. Берём тот же стек, а не sing-box: опыт и грабли уже записаны в ops-knowledge (VLESSNONE,IPIfNonMatch). - Клиента определяем по учётным данным, а не по домену. Правило маршрутизации
Xray
user(email у UUID VLESS, логин HTTP-прокси) илиinboundTag. У AmneziaWG — по подсети или пиру, у MTProto — по отдельному инбаунду/секрету на группу. Доменыp.ukiz.ru,p.noren.ruполезны как адрес в конфиге: хаб можно переносить без перевыпуска конфигов, и клиенты разделены визуально. Но у REALITY в SNI стоит маска-домен (чужой сайт), а не наш, поэтому домен как ключ маршрутизации там не работает. Работает он только для TLS с нашими сертификатами (XHTTP/WS, HTTPS-прокси). - Что считать «RU».
geosite:category-ru+geoip:ruизrunetfreedom/russia-v2ray-rules-dat(обновляется ежедневно), плюс.ru/.su/.рф. Всё остальное идёт в туннель. Обязательно проверить с хаба банки, Госуслуги и маркетплейсы клиентов: см. GeoIP=US выше. - Туннели хаб → выходы. Основной — VLESS+REALITY+Vision (TCP), резервный — XHTTP.
Каждый выход — отдельный outbound. Для групп клиентов —
balancer+observatory, чтобы при падении выхода переключаться автоматически. - Выход на big-helsinki. Порт
:443занят nginx (streamssl_preread). Варианты: (а) добавить SNI-маршрут в существующий nginx на локальный инбаунд Xray (REALITY заssl_prereadработает); (б) отдельный порт. Вариант (а) незаметнее, но правит боевой nginx арендатора — согласовать. Принимать соединения только с168.113.171.130. - MTProto. telemt на хабе ходит к DC Telegram через туннель: с хаба
api.telegram.orgдаёт таймаут. Проверить, умеет ли текущий telemt upstream SOCKS5. Если нет — клиентский FakeTLS принимать на хабе и через VLESS-туннель пробрасывать в telemt на выходе. - HTTP-прокси для браузера. Только с TLS (HTTPS-прокси) и аутентификацией: обычный HTTP-прокси передаёт логин открытым текстом по сети РФ.
- DNS. Встроенный DNS Xray: RU-домены — через
77.88.8.8напрямую, остальные — DoH через туннель. Время по chrony: REALITY чувствителен к сдвигу часов. - Общее. 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 хаба?
Ближайшие шаги
- Хаб: hardening (ключи, nftables, fail2ban),
ip_forward, BBR, chrony. - Xray на хабе + один VLESS-туннель до big-helsinki. Проверить реальный REALITY-канал на объёме.
- Первый инбаунд (VLESS) для тестового клиента, проверить split: RU напрямую, остальное через Хельсинки.
- Затем AmneziaWG → TPROXY, HTTPS-прокси, MTProto.