todo/DPI/olcrtc.md
loop-uh 08b4491545
Some checks failed
Published content check / validate (push) Failing after 3s
Завершить переезд базы знаний на Forgejo
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
2026-08-07 08:27:28 +03:00

119 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date: 2026-07-16
tags:
- dpi
- webrtc
- whitelist
- discord
- proxy
- socks5
- tool
- obhod
aliases:
- OlcRTC
- olcrtc
- OpenLibreCommunity RTC
- Туннель через WebRTC
- Обход белых списков через видеозвонки
link: https://github.com/openlibrecommunity/olcrtc
---
# 📞 OlcRTC — туннель через WebRTC-звонки для обхода белых списков
> [!info] О чём заметка
> **OlcRTC** — это инструмент обхода блокировок, который прячет ваш трафик **внутри обычного видеозвонка** на разрешённом сервисе видеоконференций (Jitsi, Яндекс Телемост, WbStream). Он придуман для сценария, где прямой доступ к произвольному VPS/IP уже не работает — например, при **«белых списках»**, когда пропускается только трафик к одобренным сервисам. Механику самих белых списков разбирают [[DPI/subnet-whitelist-blocking-2026|блокировка подсетей по белому списку]] и [[DPI/rdp-ecodpi|разбор оборудования ТСПУ EcoDPI]], где whitelist-режим описан по официальному руководству производителя; здесь — про инструмент, который такой режим обходит.
> [!warning] Статус проекта
> 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-звонок** на разрешённый сервис.
> [!note] Не «волшебная кнопка для голоса 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).
> [!important] Ключевое условие
> Сервис видеозвонков, который вы выбираете провайдером, **должен быть доступен (в белом списке) в вашей сети** — иначе туннель не через что вести. Если один сервис не работает, пробуйте другой из поддерживаемых. В этом и весь смысл: вы паразитируете на уже разрешённом канале.
## Варианты для не-технических пользователей
- **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 или заблокирует такое использование, конкретный транспорт может отвалиться.
## 📚 См. также
- [[DPI/subnet-whitelist-blocking-2026|Блокировка подсетей по белому списку]] — та самая модель фильтрации, ради обхода которой и сделан OlcRTC
- [[DPI/rdp-ecodpi|EcoDPI и компания РДП.РУ — «железо» ТСПУ]] — как whitelist-режим реализован в оборудовании ТСПУ (по руководству производителя)
- [[DPI/dpi-analysis-pipeline|Как DPI анализирует соединение: воронка проверок]] — почему «легальный WebRTC-звонок» проходит там, где прямой туннель режется
- [[DPI/rkn-vpn-2030-roadmap|Дорожная карта РКН до 2030 года]] — куда движется фильтрация, при которой обход через разрешённые сервисы становится актуальнее
- 🔗 [OlcRTC на GitHub](https://github.com/openlibrecommunity/olcrtc) — исходники, `docs/fast.md`, `docs/manual.md`
- 🔗 [OlcRTC-OpenWRT (веб-интерфейс для роутера)](https://github.com/tankionline2005/OlcRTC-OpenWRT) — запуск на роутере через LuCI
- 🔗 [Гайд по настройке OlcRTC (denpiligrim.ru)](https://denpiligrim.ru/guides/olcrtc-proxy) — стороннее пошаговое руководство
---
> [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ
> При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование и скачивание всего репозитория одним zip-архивом доступны в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/DPI/olcrtc.md) · [весь репозиторий](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main).