A simple server and client apps written in Rust using TURN servers as hop-proxy
  • Rust 85.2%
  • Nix 6.8%
  • Shell 3.5%
  • JavaScript 1.4%
  • PowerShell 1.3%
  • Other 1.8%
Find a file
Artemos 4abafae725
Some checks failed
Checks / Build test, Test and Lint on ubuntu-latest (push) Has been cancelled
Checks / Build test on Windows (push) Has been cancelled
Checks / Nix Build test (Ubuntu) (push) Has been cancelled
docker(docs): update docker-compose.yaml example and configurations
2026-05-18 21:51:52 +03:00
.github/workflows ci/cd(feat): add auto build for docker 2026-05-18 15:41:47 +03:00
client chore: new version 2026-05-18 21:43:47 +03:00
lib feat: add dns resolving for docker 2026-05-18 21:37:19 +03:00
server docker(docs): update docker-compose.yaml example and configurations 2026-05-18 21:51:52 +03:00
.envrc chore: init project (envrc and flake) 2026-03-15 16:18:08 +03:00
.gitignore feat: IT WORKING 2026-03-25 13:36:50 +03:00
Cargo.lock chore: new version 2026-05-18 21:43:47 +03:00
Cargo.toml chore: new version 2026-05-18 21:43:47 +03:00
Dockerfile docker(fix): update debian from 12 into 13 2026-05-18 16:27:30 +03:00
flake.lock nix(development): use fenix toolkits 2026-05-18 15:12:14 +03:00
flake.nix nix(development): use fenix toolkits 2026-05-18 15:12:14 +03:00
install-server.sh Fix download URL extraction in install-server.sh 2026-03-25 22:22:23 +03:00
LICENSE.client chore: format code and license files name fix 2026-03-23 20:30:35 +03:00
LICENSE.server chore: format code and license files name fix 2026-03-23 20:30:35 +03:00
README.md chore: Update README with TCP traffic support information 2026-04-12 16:28:03 +03:00
rustfmt.toml feat: IT WORKING 2026-03-25 13:36:50 +03:00

TURN Proxy

GitHub License GitHub repo size GitHub top language GitHub Actions Workflow Status GitHub Actions Workflow Status Last Commit

TCP трафик

Данная реализация не поддерживает на данный момент TCP протоколы типа VLess, оно может проксировать только UDP трафик, однако работы уже ведутся, но гарантировать то, что реализация TCP поверх DTLS с мультиплексированием не могу. Спасибо, что интересуетесь проектом, всем счастливой пасхи!

Отказ от ответственности (дисклеймер)

Данный проект является исследовательским, автор не несёт ответственности за использование его трудов для обхода блокировок запрещённых сервисов. Также автор не ручается за нарушение пользовательского соглашения провайдеров сервисов, предоставляющих услуги видеозвонков.

Что этот проект делает

Данные приложения создают меж собой защищённое DTLS соединение, которое также исползуется и в звонках. Данный проект демонстрирует то, что в DTLS соединение возможно обернуть не только медиа, но и в целом любой трафик. В качестве сервера-клиента могут выступать любые протоколы, работающие поверх UDP соединения, будь то WireGuard или Hysteria2.

Сервер

Слушает порт (здесь по умолчанию 56040), на который идёт DTLS трафик, полученный от клиента напрямую или через TURN сервер. Далее полученный трафик он терминирует и получает UDP, который пересылает на определённый порт (например 51820, если вы используете WireGuard).

В коде это изображено как оборачивание UDP сокета на 56040 порту в некое DTLS соединение.

УЗНАТЬ ПОДРОБНЕЕ

Клиент

Слушает порт (например, 51820), на который стучится, например, WireGuard. Приложение этот трафик оборачивает в DTLS и пересылает его на TURN, указав ему адресата, которым является Ваш серевер. TURN сервер видит лишь IP и порт вашего сервера и легитимный DTLS трафик, внутри которого, скорее всего, медиа-данные и пересылает DTLS трафик на конечный сервер.

В коде восходящее соединение буквально является такой обёрткой: [ DTLS Connection [ Targeted Connection [ TURN Connection [ UDP Connection ] ] ] ], проще говоря, матрёшка. Нисходящее соединение то же сомое, только наоборот.

УЗНАТЬ ПОДРОБНЕЕ

graph LR
  subgraph Устройство пользователя
    A[UDP Клиент, например клиент WireGuard] -- Чистый UDP  --> B[DTLS обфускатор/Клиентский прокси]
  end
  B -- DTLS Тунель --> C[TURN Сервер, например ВК звонки или Яндекс.Телемост]
  C -- DTLS Тунель --> D[DTLS деобфускатор/Серверный прокси]
  subgraph Прокси-сервер
    D -- Чистый UDP --> E[UDP сервис, например WireGuard]
  end

УВАЖУХА И РЕСПЕКТ

  • https://github.com/cacggghp/vk-turn-proxy - за идею, этот проект как раз является развитием идеи проекта за авторством cacggghp, только на языке Rust и более качественной дистрибуцией, распространяется под GPLv3 для сервера и MIT для клиента, написан на Go.
  • https://github.com/MYSOREZ/vk-turn-proxy-android - за идею реализации более качественной дистрибуции, распространяется под GPLv3, написан на Kotlin.

Сервер лицензирован под AGPL-v3 Клиент лицензирован под MPL-v2