Some checks failed
Published content check / validate (push) Failing after 3s
Обновить правила репозитория и подписи исходников в 99 заметках, не затрагивая пользовательские незакоммиченные файлы. Сделать Forgejo Actions содержательным: проверять опубликованный commit, а не пустое рабочее дерево после checkout.
119 lines
15 KiB
Markdown
119 lines
15 KiB
Markdown
---
|
||
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).
|