Звонки твоих пользователей не падают в сложных сетях.
Стандартный WebRTC отказывает у 20–40% реальных пользователей: корпоративные firewall, мобильный CGNAT, ограниченный bandwidth. Запусти relay-узел, и эти звонки доходят. Получаешь брендированный мессенджер на своём домене и место в распределённой сети.
Где обычный WebRTC ломается
UDP блокируется на edge. Корпоративные firewall и часть мобильных операторов фильтруют UDP трафик целиком. Без TCP fallback media-слой WebRTC просто не устанавливается. Реальная база — около 20% корпоративных сетей в 2025–2026.
Carrier-grade NAT. Мобильные пользователи за CGNAT не могут установить direct peer соединение — public endpoint не известен ни одной стороне. Около 40% mobile-only сессий требуют relay.
Географическая задержка. Без ближайшего relay media маршрутизируется через дальний TURN — это +150–300ms p99 RTT. Восприятие "тормозит" возникает уже на 200ms.
Что делает узел
TURN-relay узел в составе федерации OxPulse.
- 01 TURNS-on-:443. TURN через TCP/TLS на 443-м порту — для пользователей у которых UDP заблокирован. Внешне выглядит как обычный HTTPS трафик.
- 02 Mesh-нагрузка. Узел подключается к pool — нагрузка распределяется между всеми операторами сети. Один узел в обслуживании ≠ пользователи отключены.
- 03 Твой бренд.
call.твой-доменс твоей палитрой, лого, языковым default. Пользователи видят твой бренд, не наш.
Что получает оператор
Брендированный мессенджер на своём домене
JSON-конфиг: лого, palette, hero copy, OG-карточка, языковые defaults. Server-side инжекция через Host header — без FOUC. Контроль конфига через PR в open-source репо или через operator console.
Резервирование за счёт федерации
Если твой узел уходит в обслуживание — траффик мягко переключается на другие узлы сети. Для конечных пользователей — zero perceived downtime. Это работает в обе стороны: ты тоже резервируешь других.
Снижение поддержки
Тикеты "звонок не подключился у части пользователей" падают: peer-to-peer + multi-region relay автоматически закрывают edge-кейсы. Меньше эскалаций, чище SLA.
Что нужно от тебя
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| ОС | Debian 12 / Ubuntu 22+ | Ubuntu 24.04 LTS |
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GiB | 2 GiB |
| Диск | 10 GiB | 20 GiB |
| Public IP | IPv4 | IPv4 + IPv6 |
| Открытые порты | 80, 443, 3478 UDP/TCP | + 5349 TCP, 49152-65535 UDP |
| DNS | A-record control | wildcard A-record |
| Время | 30 min setup | 5 min/mo ongoing |
Hosting-провайдер влияет на качество в сложных сетях. Гайд по выбору ASN и регионов лежит в документации архитектуры узла. Hetzner / DigitalOcean / Cloudflare для российского трафика дают деградацию — это не про политику, а про инженерную ситуацию (rate limiting на этих ranges).
Установка
Получи install-токен
После приглашения из waitlist оператор пришлёт одноразовый токен. Используется один раз в bootstrap-скрипте.
Запусти bootstrap на своём сервере
Один curl-команда. Скрипт ставит docker, поднимает 3 контейнера (caddy + xray-client + coturn), просит ACME сертификат у Let's Encrypt, рендерит конфиги.
curl -fsSL https://github.com/anatolykoptev/oxpulse-partner-edge/releases/latest/download/partner-edge-installer.sh \
| sudo bash -s -- \
--domain=call.<your-domain> \
--partner-id=<id> \
--token=ptkn_<hex>Добавь A-record в DNS
Сервис идёт live примерно через минуту после того, как Caddy получает сертификат. Wildcard A-record рекомендуется для упрощения onboarding и будущих TURNS subdomain.
call.<your-domain> A <vm-public-ip>
*.<your-domain> A <vm-public-ip>Что говорят операторы
Подключение узла заняло около 20 минут — DNS, bootstrap, branding JSON. Наши пользователи видят один консистентный VPN+мессенджер surface. Тикеты по разрывам звонков упали на 60% за первый месяц. Локальное СМИ — нашим читателям нужен private channel который не падает когда блокируется привычный мессенджер. Узел в RU-domestic hosting, latency для local users <30ms. Поставили node ради резервирования основного канала связи. Теперь это часть нашего стандартного DR-плана. Раз в квартал делаем drill — graceful failover отрабатывает чисто. Безопасность и соответствие
- Код
- AGPL-3.0 github.com/anatolykoptev/oxpulse-partner-edge
- Шифрование
- ML-KEM-768 hybrid PQ + Reality TLS
- Сертификаты
- Let's Encrypt ACME HTTP-01
- Аудит
- Третья сторона — pentest запланирован Q4 2026. SOC 2 Type II в работе.
- Air-gap
- Поддерживается, документация по запросу.
Частые вопросы
Какой объём трафика ожидать?
Зависит от пользовательской базы. Маленькая (<1k DAU): ~50–200 GB relay в месяц. Средняя (1–10k): ~0.5–2 TB. Signaling — пренебрежимо.
Сам peer-to-peer трафик через узел не идёт — только когда прямое соединение невозможно (NAT, firewall).
Какова экономика хостинга?
Small VPS: $5–20/мес. Bandwidth — по нагрузке выше. Никаких выплат от/к нам. Это не affiliate и не revenue-share.
Имеет смысл если у тебя уже есть инфраструктура и аудитория, для которой звонки — часть продукта или сервиса.
Какие регуляторные риски?
Зависит от юрисдикции. EU/UK: GDPR ответственность за хост — TURN не хранит content (peer-to-peer media), но IP-логи технически возможны. По умолчанию access-логи отключены.
RU: consult с локальным юристом. Анти-цензурная риторика на лендинге намеренно отсутствует — это инфраструктура для resilience против обычных сетевых проблем (CGNAT, firewall).
US: Telecom relay neutrality в большинстве штатов. Наша сторона — open-source, никаких third-party data sharing.
Какой контроль над брендом?
Полный. JSON-конфиг определяет: лого SVG, цвета (primary/secondary/accent/on-primary), favicon, OG image, hero copy на 4 языках, CTA label.
Server-side инжекция через Host header — пользователь видит твой бренд с первого paint, без FOUC.
Можно остановить когда угодно?
Да. systemctl stop oxpulse-partner-edge или координированный drain через operator console (приоритет узла поднимается до 999, новых сессий не поступает, через ~10 мин последний звонок завершается).
Privacy моих пользователей?
Media — peer-to-peer, мы не видим content. Signaling — encrypted (E2EE keys через DC id:1 sframe-keys). IP-адреса временно видны coturn для NAT traversal — это inherent для любого WebRTC TURN.
Нет аккаунтов, нет phone-номеров, нет phone-home трекинга.
Как обновляется?
Systemd timer ежедневно дёргает update.sh. Pulls latest container images, re-renders templates from /api/partner/node-config. Branding и secrets сохраняются. Rolling restart per service — zero-downtime для текущих звонков.
Что если что-то сломается?
Issues: github.com/anatolykoptev/oxpulse-partner-edge/issues. Operator escalation: partnerships@oxpulse.chat. Healthcheck скрипт делает 9 проверок при инсталле и в любой момент on-demand.
Запросить место в очереди
Email сохраним, чтобы написать, когда откроется следующая волна онбординга. Никакой автоматической рассылки кроме этого письма.
Открытый код: github.com/anatolykoptev/oxpulse-partner-edge · Разговор перед commit: partnerships@oxpulse.chat