📞 OlcRTC — туннель через WebRTC-звонки для обхода белых списков

О чём заметка

OlcRTC — это инструмент обхода блокировок, который прячет ваш трафик внутри обычного видеозвонка на разрешённом сервисе видеоконференций (Jitsi, Яндекс Телемост, WbStream). Он придуман для сценария, где прямой доступ к произвольному VPS/IP уже не работает — например, при «белых списках», когда пропускается только трафик к одобренным сервисам. Механику самих белых списков разбирают блокировка подсетей по белому списку и разбор оборудования ТСПУ EcoDPI, где whitelist-режим описан по официальному руководству производителя; здесь — про инструмент, который такой режим обходит.

Статус проекта

OlcRTC — бета (лицензия WTFPL, по данным репозитория на июль 2026). Часть функций может быть нестабильна, клиента для iOS в основном репозитории нет. Проект опирается на сторонние публичные сервисы (Jitsi, Телемост, WbStream): их доступность, лимиты и правила использования могут меняться, и туннелирование постороннего трафика через чужой сервис может нарушать его условия обслуживания. Оценивайте это сами.

TL;DR

  • OlcRTC (OpenLibreCommunity RTC) — зашифрованный TCP-туннель поверх WebRTC. Снаружи он выглядит как легальный видеозвонок на разрешённый сервис, а внутри — ваш трафик под шифрованием.
  • Задача — обойти белые списки: провести доступ в «большой интернет» через сервис, который у вас в сети уже работает (в РФ это, например, Яндекс Телемост или WbStream).
  • Схема: приложение → локальный SOCKS5 → olcrtc cnc (клиент) → WebRTC/SFU-сервис → olcrtc srv (сервер) → интернет.
  • Клиентская часть (cnc) поднимает локальный SOCKS5-прокси; в него направляете браузер, curl, sing-box или другое приложение.
  • Шифрование — XChaCha20-Poly1305, мультиплексирование — smux поверх WebRTC data/video-каналов. Общий ключ (64 hex-символа) одинаков на клиенте и сервере.
  • Рекомендуемый старт: провайдер Jitsi + канал datachannel. Есть варианты для роутеров (OpenWRT/LuCI), десктопа (Electron) и Android.

Какую проблему решает

Обычный обход блокировок (VPN, VLESS, прокси) предполагает, что вы можете дотянуться до своего сервера по произвольному IP. Но если сеть переведена в режим «белого списка» — когда по умолчанию всё закрыто и пропускается только трафик к одобренным адресам, — этот подход ломается: до вашего VPS просто нет маршрута.

Проще говоря: белый список переворачивает логику блокировки. Обычно «запрещён список плохих сайтов, остальное можно»; в белом списке — «разрешён список хороших сервисов, остальное нельзя». В такой сети недостаточно спрятать трафик — нужно провести его через разрешённый сервис.

OlcRTC делает именно это: он берёт сервис видеоконференций, который уже есть в белом списке и работает, и использует его как посредника. Ваши данные едут внутри WebRTC-сессии этого сервиса. Для наблюдателя-DPI это выглядит как обычный звонок на разрешённый IP, а полезная нагрузка вдобавок зашифрована вашим ключом.

Почему это всплывает в контексте Discord

Голос в Discord работает по WebRTC поверх UDP, и DPI умеет опознавать маркеры WebRTC и резать такой трафик вплоть до нуля — отсюда «вечное подключение к голосовому каналу». Обычный TCP-прокси голос Discord не спасает (UDP через него не идёт без заворачивания всего трафика в TUN). OlcRTC заходит с другой стороны: не пробивает прямое UDP-соединение к серверам Discord, а маскирует туннель под легитимный WebRTC-звонок на разрешённый сервис.

Не «волшебная кнопка для голоса Discord»

OlcRTC — это общий туннель для обхода белых списков, а не специализированный «фикс голоса». Discord — лишь один из мотивов его появления. Насколько удобно через него идёт именно голосовой трафик Discord, зависит от режима (SOCKS5/TCP против полного заворота трафика) и версии клиента; относитесь к «починке Discord» как к одному из применений, а не гарантии.

Как это устроено технически

Полная цепочка на уровне туннеля выглядит так:

приложение
  → SOCKS5 (127.0.0.1:8808)
    → olcrtc cnc (клиент)
      → WebRTC / SFU-сервис (Jitsi / Телемост / WbStream)
        → olcrtc srv (сервер)
          → интернет

А внутри самого туннеля данные проходят стадии: SOCKS CONNECT → smux → XChaCha20-Poly1305 → engine → WebRTC/SFU.

Две роли компонентов:

  • cnc (client) — клиентский режим: поднимает локальный SOCKS5-прокси, принимает подключения приложений и заворачивает их в WebRTC-сессию.
  • srv (server) — серверный режим: подключается к той же комнате WebRTC-сервиса, принимает зашифрованные потоки и выполняет реальные TCP-соединения к целевым адресам в интернете.

Провайдеры (SFU-сервисы): Jitsi, Yandex Telemost, WbStream. Транспортные каналы: datachannel, vp8channel, seichannel, videochannel — они определяют, как байты туннеля упаковываются в примитив WebRTC. Рекомендуемое сочетание для старта — jitsi + datachannel; альтернатива — wbstream + vp8channel.

Проект написан на Go (сборка через mage), поддерживает Linux, macOS, Windows, Android (через gomobile) и встраивание как Go-библиотеку.

Установка и запуск (в общих чертах)

Точные шаги — в документации проекта (docs/fast.md, docs/manual.md); здесь — принцип.

  • Сгенерировать общий ключ: openssl rand -hex 32 (64 hex-символа). Ключ должен совпадать на сервере и клиенте.
  • Установить зависимости: Podman и git.
  • Склонировать репозиторий с подмодулями (важно для видеоканала): git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules и cd olcrtc.
  • Запустить сервер: ./scripts/srv.sh. На слабых VPS рекомендуют заранее создать swap-файл, чтобы сборка/работа не подвисали.
  • Получить ID звонка (room ID): найти активную комнату и скопировать ID из адресной строки, либо (для WB Stream и SaluteJazz) дать серверу сгенерировать его автоматически — он выведет ID в терминале. Этот ID нужно прописать в конфиге.
  • Указать в конфиге сервера: провайдера (напр. Jitsi), room ID, crypto key, DNS.
  • На клиенте запустить режим cnc — он поднимет локальный SOCKS5; направить в него приложение (браузер, curl, sing-box, olcbox).

Ключевое условие

Сервис видеозвонков, который вы выбираете провайдером, должен быть доступен (в белом списке) в вашей сети — иначе туннель не через что вести. Если один сервис не работает, пробуйте другой из поддерживаемых. В этом и весь смысл: вы паразитируете на уже разрешённом канале.

Варианты для не-технических пользователей

  • OpenWRT / роутер. Есть отдельный проект с веб-интерфейсом в LuCI (Службы → OlcRTC): OlcRTC поднимается на роутере как SOCKS5-прокси, и трафик устройств за роутером идёт через WebRTC-туннель. Установка — скриптом по SSH (скрипт спросит архитектуру и скачает нужный бинарник). Поддерживает импорт строки подключения olcrtc://… и подписки (ссылка на sub.md с автообновлением карточек серверов).
  • Десктоп на Electron — на случай, если у вас нет VPS/Linux.
  • Android-приложение — с раздельным туннелированием, режимом proxy-only и др.
  • Docker-образ — для быстрой настройки на VPS.

Ограничения

  • Обе стороны должны быть в одной комнате WebRTC-сервиса (общий room ID + общий ключ).
  • Зависимость от провайдера: не все сервисы поддерживают все транспорты; например, WB Stream с datachannel не работает в гостевом режиме.
  • Бета-статус: возможна нестабильность; iOS-клиента в основном репозитории нет.
  • Внешняя зависимость: работоспособность держится на чужих публичных сервисах — если провайдер поменяет API или заблокирует такое использование, конкретный транспорт может отвалиться.

📚 См. также


🤖 Эти статьи открыты — можно обучать на них ИИ

При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: исходник этой заметки · весь репозиторий.