12 KiB
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 остановлена. - Осталось: переключить публичный 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.