diff --git a/docs/fast.md b/docs/fast.md new file mode 100644 index 0000000..cb38eb6 --- /dev/null +++ b/docs/fast.md @@ -0,0 +1,229 @@ +# Быстрый старт (через скрипты) + +Этот способ самый простой. Тебе не нужен Go, не нужно ничего компилировать. +Скрипт всё сделает сам: скачает исходники, соберёт в контейнере, запустит. + +Проект в бете. По проблемам: t.me/openlibrecommunity + +--- + +## Что нужно установить + +### git + +```sh +apt install git # Debian / Ubuntu +pacman -S git # Arch +dnf install git # Fedora / RHEL / CentOS +``` + +### podman + +Скрипт попробует установить podman сам, но лучше поставить заранее. + +```sh +apt install podman # Debian / Ubuntu +pacman -S podman # Arch +dnf install podman # Fedora / RHEL / CentOS +``` + +### curl (опционально, только для проверки) + +```sh +apt install curl # Debian/Ubuntu +pacman -S curl # Arch +dnf install curl # Fedora +``` + +--- + +## Шаг 1: Скачать репозиторий + +```sh +git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules +cd olcrtc +``` + +--- + +## Шаг 2: Запустить сервер + +На машине, через которую должен идти трафик (VPS, сервер за рубежом, домашний ПК): + +```sh +./script/srv.sh +``` + +Скрипт задаст несколько вопросов. Отвечай Enter если устраивает значение по умолчанию. + +### Carrier (на каком сервисе передавать трафик) + +``` +Select carrier: + 1) telemost + 2) jazz + 3) wbstream +Enter choice [1-3, default: 1]: +``` + +Выбери сервис. Смотри матрицу в [settings.md](settings.md) какой транспорт с каким carrier работает. + +### Transport (как именно передавать данные) + +``` +Select transport: + 1) datachannel + 2) videochannel + 3) seichannel + 4) vp8channel +Enter choice [1-4, default: 1]: +``` + +Рекомендации: +- **datachannel** - самый быстрый (~6 МБ/с), работает везде кроме telemost +- **vp8channel** - работает везде включая telemost, вводи FPS=60, batch=64 +- **seichannel** - для wbstream/sber, всё по умолчанию +- **videochannel** - медленный (~200 КБ/с), только в крайнем случае + +### Room ID + +``` +Enter Room ID: +``` + +Для **telemost** - создай руму через сайт [телемоста](https://telemost.yandex.ru/) и вставь его. + +Для **jazz** и **wbstream** можно нажать Enter - ID сгенерируется автоматически, +скрипт сам его вытащит из логов и покажет. + +### DNS + +``` +DNS server [default: 1.1.1.1:53]: +``` + +Нажми Enter. Менять не нужно если нет причин, на всякий можно поставить 77.88.8.8. + +### SOCKS5 прокси для исходящего трафика + +``` +Use SOCKS5 proxy for egress? (y/N): +``` + +Если нет - просто Enter. Если хочешь чтобы сервер сам ходил через прокси - введи `y`. + +### Параметры транспорта (только для vp8channel) + +``` +VP8 FPS [default: 25]: 60 +VP8 batch size (frames per tick) [default: 1]: 64 +``` + +Введи `60` и `64` - это оптимальные значения. + +### Результат + +После запуска скрипт выведет: + +``` +[+] Server started successfully! + +Container name: olcrtc-server +Carrier: telemost +Transport: vp8channel +Room ID: 75587919855134 +Encryption key: 4fc9ab159c0268a12766be00c0a85138df5905f72c5eb5780c380507ebe0174d +``` + +**Сохрани Room ID и Encryption key** - они нужны для клиента. + +--- + +## Шаг 3: Запустить клиент + +На своей машине (домашний ПК, ноутбук): + +```sh +git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules +cd olcrtc +./script/cnc.sh +``` + +Отвечай на те же вопросы что на сервере - **carrier, transport, room ID должны совпадать**. + +Когда спросит ключ: + +``` +Enter Encryption Key (hex): 4fc9ab159c0268a12766be00c0a85138df5905f72c5eb5780c380507ebe0174d +``` + +Вставь ключ с сервера. + +### SOCKS5 адрес и порт + +``` +SOCKS5 ip [default: 127.0.0.1]: +SOCKS5 port [default: 8808]: +``` + +Нажми Enter оба раза. Прокси поднимется на `127.0.0.1:8808`. + +### Результат + +``` +[+] Client started successfully! + +Container name: olcrtc-client +SOCKS5 proxy: 127.0.0.1:8808 +``` + +--- + +## Шаг 4: Проверить + +```sh +curl --socks5-hostname 127.0.0.1:8808 https://icanhazip.com +``` + +Должен вернуть IP твоего сервера, а не домашний IP. + +Или выставить переменную окружения чтобы всё шло через прокси: + +```sh +export all_proxy=socks5h://127.0.0.1:8808 +curl https://icanhazip.com +``` + +--- + +## Управление + +### Логи + +```sh +podman logs -f olcrtc-server # на сервере +podman logs -f olcrtc-client # на клиенте +``` + +### Остановить + +```sh +podman stop olcrtc-server +podman stop olcrtc-client +``` + +### Перезапустить (просто запусти скрипт снова) + +Скрипт сам останавливает старый контейнер перед стартом нового. + +--- + +## Частые проблемы + +**`podman: command not found`** - установи podman (см. начало документа). + +**`git: command not found`** - установи git. + +**Контейнер запустился но curl возвращает домашний IP** - подожди 10-15 секунд после старта, соединение устанавливается не мгновенно. + +**Ключ уже есть в `~/.olcrtc_key`** - скрипт не генерирует новый, использует старый. Если хочешь новый - удали файл: `rm ~/.olcrtc_key`. diff --git a/docs/manual.md b/docs/manual.md new file mode 100644 index 0000000..ded3aea --- /dev/null +++ b/docs/manual.md @@ -0,0 +1,275 @@ +# Мануальная сборка + +Этот способ для тех кто хочет собрать бинарник руками без Docker/Podman. +Нужен Go 1.26+, mage, git. + +Проект в бете. По проблемам: t.me/openlibrecommunity + +--- + +## Шаг 1: Установить git + +```sh +apt install git # Debian / Ubuntu +pacman -S git # Arch +dnf install git # Fedora / RHEL / CentOS +``` + +--- + +## Шаг 2: Установить Go 1.26+ + +### Arch / Fedora (всё просто) + +```sh +pacman -S go # Arch +dnf install go # Fedora +``` + +### Debian / Ubuntu (системный пакет устаревший) + +На Debian/Ubuntu в репозитории обычно Go 1.19. Нужно поставить нужную версию через SDK: + +```sh +apt install golang # ставим старый go - он нужен только чтобы скачать новый +go install golang.org/dl/go1.26.0@latest # скачиваем установщик go1.26 +~/go/bin/go1.26.0 download # скачиваем сам go1.26 +mv ~/go/bin/go1.26.0 /usr/local/bin/go # заменяем системный go +``` + +### Проверка + +```sh +go version +# go version go1.26.x linux/amd64 +``` + +Если версия меньше 1.26 - смотри инструкцию для Debian выше. + +--- + +## Шаг 3: Установить mage + +mage - система сборки для Go-проектов, аналог make. + +```sh +go install github.com/magefile/mage@latest +``` + +Если после установки `mage: command not found` - добавь `~/go/bin` в PATH: + +```sh +echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc +source ~/.bashrc +``` + +Проверка: + +```sh +mage --version +# mage vx.x.x +``` + +--- + +## Шаг 4: Скачать репозиторий + +```sh +git clone https://github.com/openlibrecommunity/olcrtc --recurse-submodules +cd olcrtc +``` + +`--recurse-submodules` обязателен - без него videochannel не соберётся. + +--- + +## Шаг 5: Собрать + +```sh +mage build # текущая платформа → build/olcrtc-linux-amd64 +mage cross # все платформы сразу (если собираешь для другой машины) +``` + +Результат в `build/`: + +``` +build/olcrtc-linux-amd64 +build/olcrtc-linux-arm64 +build/olcrtc-windows-amd64.exe +build/olcrtc-darwin-amd64 +``` + +--- + +## Шаг 6: Сгенерировать ключ шифрования + +Делается один раз на сервере. Ключ должен совпадать на сервере и клиенте. + +```sh +openssl rand -hex 32 +# d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 +``` + +Сохрани вывод - понадобится при запуске клиента. + +--- + +## Шаг 7: Запустить сервер + +На серверной машине (VPS и т.д.). Подбери нужную комбинацию carrier + transport из матрицы в [settings.md](settings.md). + +### telemost + vp8channel (работает везде) + +```sh +./build/olcrtc-linux-amd64 \ + -mode srv \ + -carrier telemost \ + -transport vp8channel \ + -id 75587912855134 \ + -key d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 \ + -link direct \ + -dns 1.1.1.1:53 \ + -data data \ + -vp8-fps 60 \ + -vp8-batch 64 +``` + +Для telemost `-id` - это ID комнаты телемоста. Создай комнату через [telemost.yandex.ru](https://telemost.yandex.ru/) и вставь ID из ссылки. + +### jazz + datachannel (максимальная скорость, не работает в telemost) + +```sh +./build/olcrtc-linux-amd64 \ + -mode srv \ + -carrier jazz \ + -transport datachannel \ + -id any \ + -key d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 \ + -link direct \ + -dns 1.1.1.1:53 \ + -data data +``` + +При `-id any` сервер создаст комнату автоматически и напишет ID в логах: + +``` +Jazz room created: abc123xyz +``` + +Этот ID нужно передать клиенту. + +### wbstream + seichannel + +```sh +./build/olcrtc-linux-amd64 \ + -mode srv \ + -carrier wbstream \ + -transport seichannel \ + -id any \ + -key \ + -link direct \ + -dns 1.1.1.1:53 \ + -data data +``` + +### Добавить отладку + +Добавь `--debug` к любой команде - увидишь каждое соединение: + +``` +2026/05/03 08:05:23 Connecting link via direct/vp8channel/telemost... +2026/05/03 08:05:25 telemost publisher state: connected +2026/05/03 08:05:27 Link connected +2026/05/03 08:05:43 sid=3 connect icanhazip.com:443 +2026/05/03 08:05:43 sid=3 connected icanhazip.com +``` + +--- + +## Шаг 8: Запустить клиент + +На своей машине. Carrier, transport, id и key должны **точно совпадать** с сервером. + +### telemost + vp8channel + +```sh +./build/olcrtc-linux-amd64 \ + -mode cnc \ + -carrier telemost \ + -transport vp8channel \ + -id 75587929855134 \ + -key d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799 \ + -link direct \ + -dns 1.1.1.1:53 \ + -data data \ + -socks-host 127.0.0.1 \ + -socks-port 1080 \ + -vp8-fps 60 \ + -vp8-batch 64 +``` + +### jazz + datachannel + +```sh +./build/olcrtc-linux-amd64 \ + -mode cnc \ + -carrier jazz \ + -transport datachannel \ + -id abc123xyz \ + -key \ + -link direct \ + -dns 1.1.1.1:53 \ + -data data \ + -socks-host 127.0.0.1 \ + -socks-port 1080 +``` + +После старта в логах появится: + +``` +SOCKS5 server listening on 127.0.0.1:1080 +``` + +--- + +## Шаг 9: Проверить + +```sh +curl --socks5-hostname 127.0.0.1:1080 https://icanhazip.com +``` + +Должен вернуть IP сервера, а не домашний. + +Или выставить переменную чтобы весь трафик шёл через прокси: + +```sh +export all_proxy=socks5h://127.0.0.1:1080 +curl https://icanhazip.com +``` + +--- + +## Все mage таргеты + +```sh +mage build # собрать для текущей платформы +mage cross # собрать для всех платформ +mage deps # скачать и обновить зависимости +mage clean # удалить build/ +mage test # запустить тесты +mage lint # запустить линтер +mage podman # собрать образ через podman +mage docker # собрать образ через docker +``` + +--- + +## Частые проблемы + +**`mage: command not found`** - добавь `~/go/bin` в PATH (см. шаг 3). + +**`go.mod:3: invalid go version`** - версия go слишком старая, нужна 1.26+ (см. шаг 2). + +**`submodule path ... No such file or directory`** - забыл `--recurse-submodules`. Исправить: `git submodule update --init --recursive`. + +**curl возвращает домашний IP** - подожди 10-15 секунд, соединение устанавливается не мгновенно. Смотри логи с `--debug`. diff --git a/docs/settings.md b/docs/settings.md new file mode 100644 index 0000000..d26bce3 --- /dev/null +++ b/docs/settings.md @@ -0,0 +1,142 @@ +# Настройки + +## Матрица совместимости + +Сначала выбери что с чем работает: + +| Transport | telemost | jazz | wbstream | +|-----------|:--------:|:----:|:--------:| +| datachannel | ✗ | ✓ | ✓ | +| vp8channel | ✓ | ✓ | ✓ | +| seichannel | ✗ | ✓ | ✓ | +| videochannel | ✓ | ✓ | ✓ | + +Скорость по убыванию: datachannel (~6 МБ/с) > vp8channel > seichannel > videochannel (~200 КБ/с) + +--- + +## Обязательные флаги + +| Флаг | Что вводить | +|------|-------------| +| `-mode` | `srv` на сервере, `cnc` на клиенте | +| `-carrier` | `telemost`, `jazz` или `wbstream` | +| `-transport` | `datachannel`, `vp8channel`, `seichannel` или `videochannel` | +| `-id` | Room ID. Для jazz/wbstream можно `any` - сгенерируется автоматически | +| `-key` | Ключ шифрования hex 64 символа. Генерация: `openssl rand -hex 32` | +| `-link` | Всегда `direct` | +| `-data` | Всегда `data` | + +--- + +## Необязательные флаги + +| Флаг | Описание | По умолчанию | +|------|----------|:------------:| +| `-dns` | DNS-сервер | `1.1.1.1:53` | +| `--debug` | Подробные логи соединений | выкл | + +--- + +## Флаги только для сервера (`-mode srv`) + +| Флаг | Описание | +|------|----------| +| `-socks-proxy` | Адрес SOCKS5-прокси для исходящего трафика сервера | +| `-socks-proxy-port` | Порт этого прокси | + +--- + +## Флаги только для клиента (`-mode cnc`) + +| Флаг | Описание | По умолчанию | +|------|----------|:------------:| +| `-socks-host` | На каком адресе поднять SOCKS5 | `127.0.0.1` | +| `-socks-port` | На каком порту поднять SOCKS5 | `1080` | + +--- + +## vp8channel + +**Рекомендуется: `-vp8-fps 60 -vp8-batch 64`** (числа лучше чётные, больший batch = выше скорость) + +| Флаг | Описание | По умолчанию | +|------|----------|:------------:| +| `-vp8-fps` | FPS VP8 потока | `25` | +| `-vp8-batch` | Кадров за тик | `1` | + +--- + +## videochannel + +**Рекомендуется: `-video-codec qrcode -video-w 1080 -video-h 1080 -video-fps 60 -video-bitrate 5000k -video-hw none`** + +| Флаг | Описание | По умолчанию | +|------|----------|:------------:| +| `-video-codec` | `qrcode` или `tile` | `qrcode` | +| `-video-w` | Ширина в пикселях | `1920` | +| `-video-h` | Высота в пикселях | `1080` | +| `-video-fps` | FPS | `30` | +| `-video-bitrate` | Битрейт, например `2M` или `5000k` | `2M` | +| `-video-hw` | Аппаратное ускорение: `none` или `nvenc` | `none` | +| `-video-qr-recovery` | Коррекция ошибок QR: `low` / `medium` / `high` / `highest` | `low` | +| `-video-qr-size` | Размер фрагмента QR в байтах, `0` = авто | `0` | +| `-video-tile-module` | Размер тайла в пикселях 1..270 (только `tile`) | `4` | +| `-video-tile-rs` | Reed-Solomon паритет % 0..200 (только `tile`) | `20` | + +Для codec `tile` нужно точно `1080x1080`. + +--- + +## seichannel / datachannel + +Дополнительных флагов нет - всё по умолчанию. + +--- + +## Готовые команды + +### telemost + vp8channel + +```sh +# сервер +./olcrtc -mode srv -carrier telemost -transport vp8channel \ + -id -key -link direct -data data \ + -vp8-fps 60 -vp8-batch 64 + +# клиент +./olcrtc -mode cnc -carrier telemost -transport vp8channel \ + -id -key -link direct -data data \ + -socks-host 127.0.0.1 -socks-port 1080 \ + -vp8-fps 60 -vp8-batch 64 +``` + +### jazz + datachannel (максимальная скорость) + +```sh +# сервер - room ID создастся сам, смотри логи +./olcrtc -mode srv -carrier jazz -transport datachannel \ + -id any -key -link direct -data data + +# клиент +./olcrtc -mode cnc -carrier jazz -transport datachannel \ + -id -key -link direct -data data \ + -socks-host 127.0.0.1 -socks-port 1080 +``` + +### telemost + videochannel (крайний случай) + +```sh +# сервер +./olcrtc -mode srv -carrier telemost -transport videochannel \ + -id -key -link direct -data data \ + -video-codec qrcode -video-w 1080 -video-h 1080 \ + -video-fps 60 -video-bitrate 5000k -video-hw none + +# клиент +./olcrtc -mode cnc -carrier telemost -transport videochannel \ + -id -key -link direct -data data \ + -socks-host 127.0.0.1 -socks-port 1080 \ + -video-codec qrcode -video-w 1080 -video-h 1080 \ + -video-fps 60 -video-bitrate 5000k -video-hw none +```