Админ
Администратор
- Регистрация
- 24.02.18
- Сообщения
- 1.665
- Реакции
- 443
[Мануал] Обход «белых списков» с помощью OlcRTC: туннелирование через Яндекс.Телемост и Jitsi
Сегодня вновь поговорим про установку защищенного соединения, защиты интернет соединения в рамках работы спецрежима связи - “белые списки”.
Сперва, думаю, поговорим о теории, затем перейдем к практике - установке и настройке в пара кликов - OlcRTC, способа защиты соединения использующего видеозвонки, Яндекс.Телемост, WB Stream, Jitsi, которые с целью построения защищенного соединения в рамках работы режима “белые списки” используют видеозвонки, как это было сказано выше.
БЛОК 1 [ТЕОРИЯ] Максимально кратко, пройдемся по основным вещам.
Есть один занятный момент с блокировками и белыми списками. Видеосвязь работает почти всегда, даже там, где режут всё остальное. Zoom, Телемост, корпоративный Jitsi разрешают, потому что без них никто не работает. А обычный VPN или левый сервер тут же режут.
На этой дыре в логике блокировок построен olcRTC. Открытый проект, который прячет туннель для трафика внутри легального видеозвонка.
WebRTC — технология, которая позволяет двум браузерам звонить друг другу напрямую, без установки программ. Zoom в браузере, звонки в Telegram, Яндекс Телемост — всё это WebRTC под капотом.
Но «напрямую» не так просто, как звучит. Оба собеседника обычно сидят за роутером, и открытого адреса, по которому до них можно достучаться снаружи, у них нет. Тут в дело вступают три штуки, которые постоянно путают.
STUN. Представь, звонишь в справочную и спрашиваешь: а как я выгляжу снаружи, какой у меня виден номер? STUN-сервер просто сообщает твой внешний адрес, чтобы собеседник знал, куда стучаться. Дальше в передаче данных он не участвует.
TURN. Если напрямую достучаться не выходит, включается TURN-сервер. Это уже почтальон, который таскает пакеты между вами лично. Медленнее, зато работает почти всегда, даже за самым злым NAT.
SFU нужен, когда в звонке больше двух человек. Он принимает поток видео от каждого участника и раздаёт его остальным, ничего не расшифровывая и не пересобирая. Диспетчер конференции, который просто переключает микрофоны, а не редактирует речь.
Поверх всего этого работает шифрование и отдельный канал для произвольных данных, DataChannel. По сути, обычный поток байт, только завёрнутый в протокол видеозвонка.
Вот тут и начинается olcRTC. Он не строит свою инфраструктуру. Берёт уже разрешённый сервис видеосвязи, Jitsi, Телемост, WB Stream, и заходит туда как обычный участник звонка. Только вместо разговора внутри канала едут зашифрованные данные.
Представь письмо, спрятанное внутри уже проверенной посылки. Цензор видит посылку, знает, что она легальная, пропускает. А что внутри упаковки, зашифровано отдельно и снаружи выглядит как обычное видео или служебные данные звонка.
Цепочка выглядит так: приложение, локальный порт на компьютере, клиент olcRTC, шифрование, упаковка в видеопоток или канал данных, сервер видеосвязи, сервер olcRTC на другой стороне, интернет.
Сервер видеосвязи в этой цепочке видит только «какой-то видеозвонок с данными». Что внутри, ему недоступно, там ещё один слой шифрования поверх штатного.
Теперь про ограничения, и тут иллюзий лучше не строить.
Ключ шифрования статический. Один и тот же на клиенте и сервере, без обновления. Утечёт ключ, и расшифровать можно весь трафик целиком, включая старые сессии.
Проект целиком зависит от поведения чужих сервисов. Сегодня Телемост поддерживает нужный канал данных, завтра что-то поменяли на их стороне, и транспорт перестал работать. Разработчикам приходится подстраиваться под чужую инфраструктуру, а не строить свою.
И ещё момент: нестандартное использование видеосвязи теоретически отличимо от обычного звонка. Исследования по похожим инструментам, например Snowflake у Tor, показывают, что паттерны трафика и тайминги можно заметить анализом с довольно высокой точностью. Что именно olcRTC невидим для DPI, никто пока не доказал.
Сам проект в статусе Beta, делается силами открытого сообщества, полного аудита кода не проходил.
Красивая идея: использовать уже разрешённый канал как транспорт для трафика, вместо того чтобы поднимать отдельный сервер, который сразу попадёт под подозрение. Но это не VPN и не решение «поставил и забыл». Статичный ключ, зависимость от чужой инфраструктуры и теоретическая различимость трафика — то, что стоит понимать заранее.
Кому интересно, прям вообще досконально я во вложениях оставлю файл в котором прямо вообще все расписано будет.
БЛОК 2 [ПРАКТИКА]
Можно все ставить руками, настройку проводить с билдом, но куда проще все сделать одной командой, ведь мы это все так любим.
1 команда и у вас на VPS развернута вся инфраструктура, и по этой же команде предлагается настроить транспорт связи.
ЧТО НУЖНО ДЕЛАТЬ?
Для начала - давайте арендуем VPS.
Нужен зарубежный VPS с гео. любым кроме России - Германия, США, Нидерланды, Финляндия и т.д.
Можете взять любого из поста в котором я рекомендовал хостинг провайдеров.
А можете взять проверенный вариант AdminVPS.ru
Самый проверенный вариант - для тех кто хочет попробовать OlcRTC.
Я все настраивал у них и все работало как часы.
Итак, мы арендовали VPS.
Заходим в Термиус, скачать можно здесь - https://termius.com/
Проходим регистрацию, скачиваем в личном кабинете программу.
Подключаемся к Арендованному серверу.
Данные сервера будут на email на который вы привязали ваш аккаунт, либо в личном кабинете AdminVPS.
Коннектимся и подключаемся к серверу -
ip hostname - указываем ip адрес нашего сервера
SSH on 22 port
вписываем 22
username - root
пароль - тот который пришел на почту вам, либо в панели управления AdminVPS.
Подключаясь к серверу соглашаемся на все, добавить отпечаток, и продолжить нажимаем.
Дальнейшие действия можете делать либо в режиме автоматика, все одной командой, либо руками, устанавливать взяв все из репозитория OlcRTC - https://github.com/openlibrecommunity/olcrtc
Я же покажу как сделать одной командой,
На сервере сразу с ходу, выполняем команду.
Код:
curl -fsSL https://raw.githubusercontent.com/openlibrecommunity/olcrtc/master/install.sh | bash
И просто ЖДЕМ!
По итогу нам будет предложено следующее
Выбрать один из 3 доступных способа защитить наше соединение путем использования видеозвонков:
WB Stream - вайлдберриз звонки
Telemost - соответственно яндекс телемост.
Jitsi - рекомендую использовать именно его, он не требует от вас регистрации или каких либо еще данных, и способен сам сгенерировать комнату.
Таким образом выбираем следующие вещи!
Тут выбираем сервер, если хотим пустить трафик через наш сервер, клиент выбираем под цифрой 2, если хотим на локалке.
Тут рекомендую, если никакие свои данные вводить не хотите - джитси.
Тут выбираем datachannel, как самый быстрый способ. Остальные менее быстрые, но тоже рабочие, все зависит от того каким сервисов вы будете пользоваться, например у Яндекс.Телемоста способ с дата каналом просто не рабочий, и не работает, поскольку они сами его отключили.
Тут выбираем сервер для Джитси, можно просто нажать Enter, если у вас при Белых списках работает сервер который под цифрой 1, если работают другие то ставьте цифру напротив которого он указан.Проверить просто, необходимо при БС зайти попытаться на сайт конференций, который указан тут, если работает, то все будет работать.
Здесь 1, или же Enter
Тут Enter, либо можете вписать свои значения ДНС Сервера
Тут просто Enter
Тут можно обозвать наш конфиг, можете просто нажать Enter
По итогу получите вот такую вот ссылочку, которую я замазал красным, заканчиваться она будет если вы на прошлом шаге нажали Enter - на olc.
Чтобы что то скопировать в Termius - выделяем это курсором, и нажимаем Contrl+Shift+C
И это будет скопировано
Далее нам нужен клиент, с помощью которого мы будем подключаться, давайте посмотрим что у нас есть.
Либо OlcBox - https://github.com/alananisimov/olcbox как наиболее мультиплатформенный, так и чисто решения под андройд, если у вас андройд телефон рекомендую как раз https://github.com/owenewans/owenclave
Поскольку разрабы клиенты раньше выпускают обновления к примеру под Olc 2, когда он вышел пара дней назад, OlcBox обновлялся около 4 дней, и продолжает это делать, и там не всегда все может работать.
ПО ИТОГУ:
Windows, MacOS - https://github.com/alananisimov/olcbox
Android - GitHub - owenewans/owenclave: android proxy client with naiveproxy, olcrtc and dpi bypass
Покажу на примере OlcBox - на Windows
Скачали, установили.
Открываем.
У вас не будет подписки, чтобы ее добавить, нажимаем Add Subscription
Выбираем вариант Enter link or URI
Это то что мы скопировали на нашем VPS.
Можно также импортировать файлом - для тех кому так удобнее.
Все, можно подключаться, думаю - как? - очевидно, нажать большую красную кнопку, предварительно можно пингануть сервер и проверить есть ли коннект. И у вас будет защищенное соединение в рамках работы режима “белые списки”.
За счет того что VPS зарубежный, будут работать нейросети, если они вам нужны.
Проверить все ли работает можно зайдя на 2ip.io и увидеть там айпи адрес вашего VPS, который вы взяли в аренду попробовать данный метод.
Сегодня вновь поговорим про установку защищенного соединения, защиты интернет соединения в рамках работы спецрежима связи - “белые списки”.
Сперва, думаю, поговорим о теории, затем перейдем к практике - установке и настройке в пара кликов - OlcRTC, способа защиты соединения использующего видеозвонки, Яндекс.Телемост, WB Stream, Jitsi, которые с целью построения защищенного соединения в рамках работы режима “белые списки” используют видеозвонки, как это было сказано выше.
БЛОК 1 [ТЕОРИЯ] Максимально кратко, пройдемся по основным вещам.
Есть один занятный момент с блокировками и белыми списками. Видеосвязь работает почти всегда, даже там, где режут всё остальное. Zoom, Телемост, корпоративный Jitsi разрешают, потому что без них никто не работает. А обычный VPN или левый сервер тут же режут.
На этой дыре в логике блокировок построен olcRTC. Открытый проект, который прячет туннель для трафика внутри легального видеозвонка.
WebRTC — технология, которая позволяет двум браузерам звонить друг другу напрямую, без установки программ. Zoom в браузере, звонки в Telegram, Яндекс Телемост — всё это WebRTC под капотом.
Но «напрямую» не так просто, как звучит. Оба собеседника обычно сидят за роутером, и открытого адреса, по которому до них можно достучаться снаружи, у них нет. Тут в дело вступают три штуки, которые постоянно путают.
STUN. Представь, звонишь в справочную и спрашиваешь: а как я выгляжу снаружи, какой у меня виден номер? STUN-сервер просто сообщает твой внешний адрес, чтобы собеседник знал, куда стучаться. Дальше в передаче данных он не участвует.
TURN. Если напрямую достучаться не выходит, включается TURN-сервер. Это уже почтальон, который таскает пакеты между вами лично. Медленнее, зато работает почти всегда, даже за самым злым NAT.
SFU нужен, когда в звонке больше двух человек. Он принимает поток видео от каждого участника и раздаёт его остальным, ничего не расшифровывая и не пересобирая. Диспетчер конференции, который просто переключает микрофоны, а не редактирует речь.
Поверх всего этого работает шифрование и отдельный канал для произвольных данных, DataChannel. По сути, обычный поток байт, только завёрнутый в протокол видеозвонка.
Вот тут и начинается olcRTC. Он не строит свою инфраструктуру. Берёт уже разрешённый сервис видеосвязи, Jitsi, Телемост, WB Stream, и заходит туда как обычный участник звонка. Только вместо разговора внутри канала едут зашифрованные данные.
Представь письмо, спрятанное внутри уже проверенной посылки. Цензор видит посылку, знает, что она легальная, пропускает. А что внутри упаковки, зашифровано отдельно и снаружи выглядит как обычное видео или служебные данные звонка.
Цепочка выглядит так: приложение, локальный порт на компьютере, клиент olcRTC, шифрование, упаковка в видеопоток или канал данных, сервер видеосвязи, сервер olcRTC на другой стороне, интернет.
Сервер видеосвязи в этой цепочке видит только «какой-то видеозвонок с данными». Что внутри, ему недоступно, там ещё один слой шифрования поверх штатного.
Теперь про ограничения, и тут иллюзий лучше не строить.
Ключ шифрования статический. Один и тот же на клиенте и сервере, без обновления. Утечёт ключ, и расшифровать можно весь трафик целиком, включая старые сессии.
Проект целиком зависит от поведения чужих сервисов. Сегодня Телемост поддерживает нужный канал данных, завтра что-то поменяли на их стороне, и транспорт перестал работать. Разработчикам приходится подстраиваться под чужую инфраструктуру, а не строить свою.
И ещё момент: нестандартное использование видеосвязи теоретически отличимо от обычного звонка. Исследования по похожим инструментам, например Snowflake у Tor, показывают, что паттерны трафика и тайминги можно заметить анализом с довольно высокой точностью. Что именно olcRTC невидим для DPI, никто пока не доказал.
Сам проект в статусе Beta, делается силами открытого сообщества, полного аудита кода не проходил.
Красивая идея: использовать уже разрешённый канал как транспорт для трафика, вместо того чтобы поднимать отдельный сервер, который сразу попадёт под подозрение. Но это не VPN и не решение «поставил и забыл». Статичный ключ, зависимость от чужой инфраструктуры и теоретическая различимость трафика — то, что стоит понимать заранее.
Кому интересно, прям вообще досконально я во вложениях оставлю файл в котором прямо вообще все расписано будет.
БЛОК 2 [ПРАКТИКА]
Можно все ставить руками, настройку проводить с билдом, но куда проще все сделать одной командой, ведь мы это все так любим.
1 команда и у вас на VPS развернута вся инфраструктура, и по этой же команде предлагается настроить транспорт связи.
ЧТО НУЖНО ДЕЛАТЬ?
Для начала - давайте арендуем VPS.
Нужен зарубежный VPS с гео. любым кроме России - Германия, США, Нидерланды, Финляндия и т.д.
Можете взять любого из поста в котором я рекомендовал хостинг провайдеров.
А можете взять проверенный вариант AdminVPS.ru
Самый проверенный вариант - для тех кто хочет попробовать OlcRTC.
Я все настраивал у них и все работало как часы.
Итак, мы арендовали VPS.
Заходим в Термиус, скачать можно здесь - https://termius.com/
Проходим регистрацию, скачиваем в личном кабинете программу.
Подключаемся к Арендованному серверу.
Данные сервера будут на email на который вы привязали ваш аккаунт, либо в личном кабинете AdminVPS.
Коннектимся и подключаемся к серверу -
ip hostname - указываем ip адрес нашего сервера
SSH on 22 port
вписываем 22
username - root
пароль - тот который пришел на почту вам, либо в панели управления AdminVPS.
Подключаясь к серверу соглашаемся на все, добавить отпечаток, и продолжить нажимаем.
Дальнейшие действия можете делать либо в режиме автоматика, все одной командой, либо руками, устанавливать взяв все из репозитория OlcRTC - https://github.com/openlibrecommunity/olcrtc
Я же покажу как сделать одной командой,
На сервере сразу с ходу, выполняем команду.
Код:
curl -fsSL https://raw.githubusercontent.com/openlibrecommunity/olcrtc/master/install.sh | bash
И просто ЖДЕМ!
По итогу нам будет предложено следующее
Выбрать один из 3 доступных способа защитить наше соединение путем использования видеозвонков:
WB Stream - вайлдберриз звонки
Telemost - соответственно яндекс телемост.
Jitsi - рекомендую использовать именно его, он не требует от вас регистрации или каких либо еще данных, и способен сам сгенерировать комнату.
Таким образом выбираем следующие вещи!
Тут выбираем сервер, если хотим пустить трафик через наш сервер, клиент выбираем под цифрой 2, если хотим на локалке.
Тут рекомендую, если никакие свои данные вводить не хотите - джитси.
Тут выбираем datachannel, как самый быстрый способ. Остальные менее быстрые, но тоже рабочие, все зависит от того каким сервисов вы будете пользоваться, например у Яндекс.Телемоста способ с дата каналом просто не рабочий, и не работает, поскольку они сами его отключили.
Тут выбираем сервер для Джитси, можно просто нажать Enter, если у вас при Белых списках работает сервер который под цифрой 1, если работают другие то ставьте цифру напротив которого он указан.Проверить просто, необходимо при БС зайти попытаться на сайт конференций, который указан тут, если работает, то все будет работать.
Здесь 1, или же Enter
Тут Enter, либо можете вписать свои значения ДНС Сервера
Тут просто Enter
Тут можно обозвать наш конфиг, можете просто нажать Enter
По итогу получите вот такую вот ссылочку, которую я замазал красным, заканчиваться она будет если вы на прошлом шаге нажали Enter - на olc.
Чтобы что то скопировать в Termius - выделяем это курсором, и нажимаем Contrl+Shift+C
И это будет скопировано
Далее нам нужен клиент, с помощью которого мы будем подключаться, давайте посмотрим что у нас есть.
Либо OlcBox - https://github.com/alananisimov/olcbox как наиболее мультиплатформенный, так и чисто решения под андройд, если у вас андройд телефон рекомендую как раз https://github.com/owenewans/owenclave
Поскольку разрабы клиенты раньше выпускают обновления к примеру под Olc 2, когда он вышел пара дней назад, OlcBox обновлялся около 4 дней, и продолжает это делать, и там не всегда все может работать.
ПО ИТОГУ:
Windows, MacOS - https://github.com/alananisimov/olcbox
Android - GitHub - owenewans/owenclave: android proxy client with naiveproxy, olcrtc and dpi bypass
Покажу на примере OlcBox - на Windows
Скачали, установили.
Открываем.
У вас не будет подписки, чтобы ее добавить, нажимаем Add Subscription
Выбираем вариант Enter link or URI
Это то что мы скопировали на нашем VPS.
Можно также импортировать файлом - для тех кому так удобнее.
Все, можно подключаться, думаю - как? - очевидно, нажать большую красную кнопку, предварительно можно пингануть сервер и проверить есть ли коннект. И у вас будет защищенное соединение в рамках работы режима “белые списки”.
За счет того что VPS зарубежный, будут работать нейросети, если они вам нужны.
Проверить все ли работает можно зайдя на 2ip.io и увидеть там айпи адрес вашего VPS, который вы взяли в аренду попробовать данный метод.
Последнее редактирование:
