Три месяца назад здесь на Хабре я опубликовал статью “Интернет-цензура и обход блокировок: не время расслабляться”, в которой простыми примерами показывалось, что практически все популярные у нашего населения для обхода блокировок VPN- и прокси-протоколы, такие как Wireguard, L2TP/IPSec, и даже SoftEther VPN, SSTP и туннель-через-SSH, могут быть довольно легко детектированы цензорами и заблокированы при должном желании. На фоне слухов о том, что Роскомнадзор активно обменивается опытом блокировок с коллегами из Китая и блокировках популярных VPN-сервисов, у многих людей стали возникать вопросы, что же делать и какие технологии использовать для получения надежного нефильтрованного доступа в глобальный интернет.

Мировым лидероми в области интернет-цензуры является Китай, поэтому имеет смысл обратить наш взор на технологии, которые разработали энтузиасты из Китая и других стран для борьбы с GFW (“великим китайским файрволом”). Правда, для неподготовленного пользователя это может оказаться нетривиальной задачей: существует огромное количество программ и протоколов с похожими названиями и с разными не всегда совместимыми между собой версиями, огромное количество опций, плагинов, серверов и клиентов для них, хоть какая-то нормальная документация существует нередко только на китайском языке, на английском - куцая и устаревшая, а на русском ее нет вообще.

Поэтому сейчас мы попробуем разобраться, что же это все такое, как это использовать, и при этом не сойти с ума.

Нейрокартинка для отвлечения внимания
Нейрокартинка для отвлечения внимания

В этой статье я проведу обзор самых передовых протоколов и технологий, которые:

  • позволяют делать передаваемый трафик не похожим вообще ни на один существующий стандартный протокол, делая его полностью неразличимым для цензоров;

  • либо наоборот, позволяют максимально достоверно маскироваться под безобидный HTTPS-трафик, включая защиту сервера от детектирования методом active probing с помощью фейкового веб-сайта, маскировку TLS fingerprint клиента под обычный браузер, и защиту от выявления туннеля нейросетями (детектирования TLS-inside-TLS);

  • позволяют работать в условиях жесткого шейпинга канала и потерь пакетов;

  • позволяют создавать цепочки из серверов и настраивать маршруты (например, фильтровать трафик до российских адресов).

Итак, поехали.

Shadowsocks, ShadowsocksR, Shadowsocks-AEAD, Shadowsocks-2022

Начнем, по традиции, с “дедушки”, прародителя многих других современных средств обхода блокировок - протокола Shadowsocks.

Логотип ShadowSocks
Логотип ShadowSocks

Идея Shadowsocks проста: авторы взяли классический SOCKS-протокол, который передает все данные в открытом виде и поэтому очень легко детектируется на DPI, прикрутили к нему шифрование разными алгоритмами, выкинули ненужный функционал (например, нет нужды в авторизации по логину и паролю, проверка свой/чужой определяется ключом шифрования), и добавили несколько других штук для усложнения детектирования. И это сработало - долгое время Shadowsocks был излюбленным инструментом тысяч людей, позволяющим пробиваться через великий китайский файервол.

Оригинальный Shadowsocks был разработан программистом с ником “clowwindy”. В 2015 году clowwindy написал в своем Github, что к нему нагрянула китайская полиция и сделала предложение, от которого не было возможности отказаться, и в результате чего он был вынужден прекратить работу над проектом и удалить все исходники из репозитория.

После этого другие энтузиасты создали форк под названием ShadowsocksR и продолжили дело. Через некоторое время разработка ShadowsocksR заглохла, но развитие протокола продолжилось в разных других репозиториях под оригинальным названием. В изначальном протоколе ShadowSocks исследователи обнаружили ряд уязвимостей, позволявших его индентификацию и блокировку (например, с помощью replay-атак), поэтому в 2017 году появился Shadowsocks-AEAD с измененным алгоритмом аутентификации, а в прошлом году была выпущена новая версия протокола под названием Shadowsocks-2022. Все эти версии между собой не совместимы.

Со стороны цензоров подключение через Shadowsocks, если вы не используете какие-либо дополнительные расширения для маскировки под TLS (Shadow-TLS) или Websockets, выглядит как непонятное нечто - просто не похожий ни на что поток данных. Старые версии Shadowsocks уже давно не считаются надежными и устойчивыми к выявлению, однако современные версии протокола до недавних пор вполне себе могли использоваться как средство обхода блокировок в случае если цензоры спокойно относятся к “неопределенным” протоколам. В конце 2022 года группа исследователей под названием GFW-report опубликовала отчет о том, что цензоры научились выявлять подобные “неопределенные” протоколы по… отношению количества 0 и 1 битов в потоке данных. Ими была выпущена специально пропатченная версия shadowsocks, однако во-первых пропатченные клиент и сервер не совместимы с “обычными версиями”, а во-вторых патч подходит только для старых версий протокола, но не для Shadowsocks-2022 (авторы сказали, что работают над этим). Из сторонних клиентов поддержка этого хака под названием ReducedIvHeadEntropy есть только в SagerNet и V2Ray и отсутствует практически во всех GUI-клиентах.

Оригинальный Shadowsocks был написан на C с использованием библиотеки libev. Данная версия более не развивается, основная актуальная на сегодняшний день реализация написана на Rust. Между тем, протоколы Shadowsocks разных версий поддерживаются в том числе и в других клиентах и серверах (таких как V2Ray, XRay, SagerNet, Sing-box, и т.д.), о которых речь пойдет позже, поэтому Shadowsocks вполне можно рассматривать как запасной вариант, активировав его на одном сервере с другими протоколами.

V2Ray, V2Fly, XRay (VMess, VLESS, XTLS)

Все началось с проекта под названием V2Ray, автором которого была Victoria Raymond (отсюда, видимо, и появилось название). Достоверно неизвестно, существовал ли в реальности человек с такими именем, или это чья-то виртуальная личность, но в итоге случилось следущее: в один момент Victoria Raymond перестала выходить на связь что на Github, что в Twitter, что где-либо еще (ничего не напоминает, правда?).

Логотип Project V
Логотип Project V

В результате остальные контрибьюторы проекта, не имея административного доступа к Git-репозиториям и веб-сайту, были вынуждены форкнуть его под названием V2Fly для того чтобы продолжить разработку. Грубо говоря, если вы видите github-юзера или веб-сайт с названием V2Ray - весьма вероятно, что там содержится старый код и устаревшая информация, а вот с названием V2Fly - это уже нечто гораздо более актуальное. Между тем, многие люди (и даже сами разработчики!) по-прежнему продолжают называть V2Fly как V2Ray, бинарники и пакеты по-прежнему называются v2ray-core, что добавляет немного путаницы.

XRay - это форк V2Fly, когда некоторые разработчики из-за ряда разногласий с остальным сообществом (где-то я встречал  упоминания что разногласия были по технической части, где-то же написано что из-за лицензий) ушли из проекта V2Fly и продолжили развивать код параллельно под названием XRay, придумав ему слоган “Penetrates everything”, что очень недалеко от правды. Формат конфигурационных файлов остался прежним, но при этом новая реализация считается более эффективной в плане производительности, а самое главное - разработчики добавили туда несколько очень крутых фич, направленных в том числе на снижение детектируемости подключений на DPI (например, с помощью выявления TLS-in-TLS), таких как XTLS, речь о которых пойдет ниже. 

V2Ray/XRay - это не протокол, а, можно сказать, фреймворк - разные протоколы с разными транспортами и расширениями под одной крышей в одном приложении. Идея простая: что клиент, что сервер - это один бинарник. В конфигурации задаются inbounds (обработчики входящих подключений) и outbound (обработчики исходящих подключений).
На клиенте inbound обычно будет работать как HTTP- или SOCKS-прокси сервер, принимая подключения от браузеров и других программ, а outbound будет настроен как клиент какого-нибудь прокси-протокола для подключения к удаленному серверу.

На сервере все наоборот, inbound - это сервер какого-нибудь протокола (их может быть несколько одновременно с разными вариантами), а outbound - это, например “freedom” (выход в чистый интернет), “blackhole” (блокировка исходящих подключений, если вам, например, нужно ограничить доступ в зависимости от каких-то правил), или следущий прокси в цепочке, и т.д.

Для каждого из используемых протоколов можно задать также тип транспорта, например, просто TCP, либо TLS, либо Websockets, либо еще что, и таким образом создавать самые разнообразные комбинации и варианты.

Для связи inbounds и outbouds можно задавать всевозможные правила маршрутизации. Например, уже на клиенте можно автоматически отправлять все запросы к доменам “.ru” и российским IP-адресам согласно базе GeoIP на outbound “freedom” (прямой доступ к интернет без прокси), а все остальное проксировать на удаленный сервер. Или наоборот, по умолчанию отправять все на freedom, а проксировать только адреса и домены из списка (в том числе с масками и регулярными выражениями). Можно использовать разные прокси и протоколы в зависимости от типа подключения (TCP или UDP), в зависимости от порта назначения (например, перехватывать DNS-запросы на 53-ий порт, и т.д.). Можно строить цепочки из серверов - приняли подключение на одном прокси-сервере, передали его дальше на следущий, и т.д. Короче говоря, штука получилась очень гибкая и фунциональная.

Непосредственно классических протоколов в V2Ray и XRay всего два с половиной: VMess, VLESS и VLite (это та самая половина).

VMess - самый первый и самый старый. Поддерживат определение свой/чужой по ID пользователя и опционально шифрование данных.

В качестве ID-пользователя выступает UUID и (в оригинальной реализации VMess) специальное число под названием alterId. Если эти данные совпадают на клиенте и на сервере - подключение устанавливается, если нет - извините :) В конфигурации сервера может быть определено сразу много пользователей. Не буду детально углублятся в то, что такое alterId, скажу просто - это значение могло быть в принципе любым (обычно от 1 до 64), главное что оно должно было совпадать на клиенте и сервере, и изначально было нужно для механизма повышения надежности протокола. Со временем выяснилось, что механизм аутентификации оригинального VMess уязвим к ряду атак, в итоге разработчики выпустили новый вариант протокола с переделанным алгоритмом проверки пользователя, который активировался при выставлении значения alterId в 0. То есть в наше время alterId по сути дела не используется, благо практически все серверы и клиенты умеют в новый вариант протокола.

В настоящее время VMess считается устаревшим, а при работе через просто TCP - небезопасным, однако вариант VMess-over-Websockets-over-TLS по-прежнему вполне себе жизнеспособен и может использоваться при отсуствии поддерживаемых в каком-либо клиенте альтернатив.

VLESS (как отметили в комментах, именно так, большими буквами) - это более новый протокол. В отличие от VMess он не предусматривает механизма шифрования (подразумевается, что шифрование должно производиться нижележащим транспортным протоколом, например TLS), а только проверку “свой/чужой” и паддинг данных (изменение размеров пакетов для затруднения детектирования паттернов траффика). В протоколе исправлен ряд уязвимостей старого VMess, и он активно развивается - например, автор планирует добавить поддержку компрессии алгоритмом Zstd - не сколько для производительности, сколько для затруднения анализа “снаружи”. При этом, при установлении соединения (хендшейке) клиент и сервер обмениваются версией протокола и списком поддерживаемых фич, то есть при дальнейшем развитии должна сохраняться обратная совместимость. В общем и целом, на сегодняшний день это самый свежий и прогрессивный протокол.

VLite есть только в V2Ray (в XRay его нет), поддерживает только передачу UDP-пакетов, и максимально оптимизирован именно для этого, что может быть полезно, например, для онлайн игр, но параллельно придется настроить еще VMess/VLESS для TCP - поэтому я считая его только “половиной” :)

Кроме VMess и VLESS сервера и клиенты V2Ray и XRay также поддерживают протокол Shadowsocks (в том числе версий AEAD и 2022)  о котором я говорил выше, а также Trojan, о котором речь пойдет в следущей главе.

С протоколами закончили, перейдем к транспортам. VLESS, VMess и другие могут работать, скажем так, разным образом. Самый простой вариант - обычный TCP-транспорт. VMess+TCP в данном случае очень похож на Shadowsocks, а VLESS+TCP не имеет смысла (из-за отсутствия шифрования). Более интересный вариант - TLS-транспорт, когда устанавливается обычное TLS-подключение (как и в случае с любыми HTTPS-сайтами), а уже внутри этого зашифрованного соединения работает протокол. V2Ray и XRay умеют также работать поверх mKCP (о нем будет в следущих главах), QUIC (aka HTTP/3, правда в России его массово блокируют и смысла в нем мало), gRPC, и самое интересное - через Websockets.

Вариант с Websockets очень ценен тем, что:

  1. Позволяет легко поставить V2Ray/XRay не перед, а за Nginx/Caddy/любымдругимвебсервером;

  2. Позволяет пролезать через строгие корпоративные фаерволы;

  3. Добавляет дополнительный уровень защиты (не зная URI невозможно достучаться до прокси-сервера);

  4. И самое интересное - позволяет работать через CDN (upd.: gRPC тоже позволяет). 

На последнем пункте остановимся чуть подробнее. Некоторые CDN, в том числе и имеющие бесплатные тарифы, такие как Cloudflare и GCore, разрешают проксирование веб-сокетов даже на бесплатных тарифах. Таким образом, это может быть хорошим подспорьем - если по какой-то причине IP-адрес вашего сервера попал в бан, вы все равно можете подключиться к нему через CDN, а полный бан всей CDN гораздо менее вероятен, чем какого-то одного VPS. А еще Cloudflare (возможно и GCore тоже, не уточнял) умеет проксировать IPv4 запросы на IPv6 адрес, то есть свой прокси-сервер вы можете поднять даже на копеечном (можно найти варианты за 60 центов в месяц!) IPv6-only или NAT VPS без IPv4 адреса, и наплодить таких серверов чуть ли не десяток в разных локациях :)

Недостатком транспорта через веб-сокеты является более долгий хендшейк (установление каждого соединения) чем напрямую через TLS. Но и здесь есть решение.

Сервера XRay и Sing-Box (возможно и V2Ray тоже, не проверял) позволяют задавать также механизм fallaback’ов для разных протоколов. Например, при подключении пользователя первым делом сервер пытается обработать входящее подключение как VLESS-over-TCP. Если хендшейк оказался успешным, пользователь опознан - работаем, если нет - передаем следущему обработчику. Следущий обработчик, может, например, попытаться воспринять это новое подключение как VMess-over-Websocket. Если сработало - отлично, если нет - то передаем подключение следущему inbound’у. А тот, в свою очередь, не разбираясь, перенаправляет подключение на локальный веб-сервер с котиками. Таким образом у нас есть возможность одновременно принимать подключения и через VLESS-TCP, и через VLESS-Websockets или VMess-Websockets на одном порту, а если не сработал ни один из вариантов, прикидываться безобидным веб-сайтом.

Еще одна фича V2Ray и XRay - мультиплексирование соединений (mux или mux.cool). В этом случае на каждое новое подключение к какому-либо сайту не будет устанавливаться новое подключение к прокси, а будут переиспользованы существующие. Что в теории может ускорить хендшейк и привлекать меньше внимания со стороны цензоров (меньше параллельных подключений к одному хосту), с другой стороны снижает скорость передачи данных из-за оверхеда на дополнительные заголовки пакетов.

XUDP и Packet - расширения VLESS для более эффективной передчи UDP-пакетов и реализации Full Cone NAT. Packet - версия подревнее, XUDP по-новее. Без их использования многие NAT-тесты будут жаловаться на кривой NAT ("endpoint address not changed), а с XUDP вы получаете нормальный честный Full Cone. Это может быть полезно для онлайн-игр, месседжеров и разного софта с передачей аудио и видео. XUDP и Packet нельзя использовать одновременно с MUX из прошлого параграфа из-за особенностей реализации (авторы старались впихать все в рамки существующего протокола и сохранить обратную совместимость, поэтому были вынуждены переиспользовать некоторые механизмы).

А теперь про самое интересные фичи.

uTLS предназначена для обмана механизма детектирования на основе TLS fingerprint, о котором я рассказывал в прошлой статье. Почитать про TLS fingerprint можно на посвященном ему сайте. В Китае и Иране цензоры активно используют этот механизм для детектирования прокси-клиентов - если мы обращаемся к какому-нибудь прокси, замаскированному под HTTPS-сайт, но при этом TLS fingerprint клиента отличается от популярных браузеров (особенно если клиент написан на Go, у которого очень специфичный фингерпринт), то соединение блокируется. uTLS - это специально пропатченный вариант стандартной TLS-библиотеки Go, позволяющий маскироваться под другие приложения. Некоторые клиенты дают выбор из нескольких вариантов (например chrome, firefox, safari), некоторые позволяют выбирать желаемый fingerprint вплоть до версии конкретного браузера.
В нынешних реалиях uTLS является очень крутой и почти что жизненно необходимой штукой (РКН пока что по фингепринтам  не блочит, но как показывает опыт других стран, может начать в любой момент), поэтому рекомендуется его использовать во всех случаях, если он поддерживается клиентом (а если не поддерживается - лучше выбрать клиент, который поддерживает).

И наконец, XTLS, фирменная фишка XRay.

Сегодня почти что все веб-сайты работают не через голый HTTP, а через HTTPS (TLS). Используя прокси с TLS мы, по сути дела, еще раз шифруем уже зашифрованные данные. Во-первых это неэффективно, а во-вторых, что гораздо хуже - китайские цензоры научились определять TLS-inside-TLS (возможно с помощью нейросетей). Авторы XRay посмотрели на это, и решили: зачем шифровать то, что уже зашифровано? И придумали XTLS.

Суть проста: прокси-сервер подслушивает передаваемый трафик, и если видит, что если между клиентом (например, браузером) и удаленным хостом (например веб-сервером) устанавливается TLS-соединение, то дожидается окончания хендшейка, и после чего перестает шифровать трафик, начиная передавать пакеты данных “как есть”. В итоге существенно снижается нагрузка на прокси-сервер и клиент, и что важнее - со стороны трафик выглядит гораздо менее подозрительно (у нас подключение по TLS, поэтому до сервера бегают простые TLS-пакеты без аномалий, никакого двойного шифрования).

XTLS имеет несколько разных версий, которые отличаются алгоритмами работы, xtls-rprx-origin и xtls-rprx-direct - самые первые из них, в xtls-rprx-splice задействован механизм ядра Linux splice для более эффективного копирования данных между сокетами. Все они уже не актуальны, в настоящее время рекомендуется использовать последнюю версию XTLS-Vision (xtls-rprx-vision), подробное описание работы которой можно прочитать здесь. По ряду сообщений, на сегодняшний день связка VLESS+XTLS-Vision является единственной, которую пока еще не умеет эффективно блокировать китайский GFW (при условии соблюдения рядя важных моментов, например, запрета доступа к китайским сайтам через прокси). Единственный минус - xtls-rprx-vision пока что поддерживается не всеми клиентами, и XTLS по понятным причинам не работает через CDN.

Хозяйке на заметку: в отличие от предыдущих версий, при настройке клиентов для xtls-rprx-vision нужно выбирать тип транспорта не “XTLS”, а просто “TLS”. Нелогично, видимо связано с особенностями реализации, но такова жизнь.

И наконец, заглянем в завтрашний день: XTLS-Reality. Это самое новое изобретение от авторов XRay. Он уже поддерживается в master-ветке xray и даже в некоторых клиентах, но про него все еще мало что известно. В отличие от всех остальных вариантов, определение “свой/чужой” здесь происходит еще на этапе TLS-хендшейка в момент чтения ClientHello. Если клиент опознан как “свой”, сервер работает как прокси, а если нет - вжух! - и TLS подключение передается на какой-нибудь другой абсолютно реальный хост с TLS (например, google.com или gosuslugi.ru), и таким образом клиент (или цензор, желающий методом active probing проверить, а что же прячется на том конце) получит настоящий TLS-сертификат от google.com или gosuslugi.ru и настоящие данные с этого сервера. Полное соответствие. Основная загадка - как именно происходит определение “свой/чужой”, потому что на этапе хендшейка данные еще передаются в открытом виде (ECH, как мы знаем, пока что не  в ходу), и поэтому механизм должен позволить достоверно определить подлинность клиента, но вместе с тем не вызывать подозрения у цензоров и быть устойчивым к replay-атакам. Делается ли это с помощью клиентских сертификатов, или TLS-токенов, или еще каким образом - не ясно, какого-либо понятного описания протокола в интернете пока что опубликовано не было (по крайней мере мне не нашлось, даже на китайском), залезать в исходники пока что нет времени, но ясно одно - вероятно за этим будущее :) Ну и да, если кто уже разобрался, как оно работает - отпишитесь в комментах, всем интересно.

Trojan-GFW и Trojan-Go

Наряду с Shadowsocks и V2Ray протокол Trojan является одним из первых и популярных способов обхода блокировок в Китае, и по принципу работы в принципе соответствует своему названию :)  Для стороннего наблюдателя работа через него выглядит как подключение к обычному веб-серверу, но на самом деле это веб-сервер с подвохом секретом (аки троянский конь).

Trojan работает поверх TLS (точно так же как HTTPS). После установления TLS-сессии сервер ожидает хендшейк в специальном формате, одним из полей которого является хеш секретного ключа. Если сообщение и ключ корректны - дальше сервер работает как прокси, если нет - запрос передается на стоящий рядом веб-сервер, и таким образом имитируется работа безобидного сайта через HTTPS.

Trojan-GFW - оригинальная версия, написанная на C++. Trojan-Go - продолжение проекта, теперь уже на языке Go . Trojan поддерживается многими мультипротокольными клиентамии серверами типа Sing-box и V2Ray/XRay - в этом случае вместе с Trojan также можно использовать упомянутые выше фичи uTLS и XTLS, что повышает надежность протокола и уменьшает вероятность его детектирования.

Если вы внимательно читали до этого, то Вам сразу же станет понятно, что Trojan в принципе аналогичен VLESS+TLS с настроенным fallback на веб-сайт. Каких-либо явных преимуществ перед VLESS+TLS у Trojan лично я не вижу, можно относиться к нему как к еще одной альтернативе.

Naiveproxy

Идея Naiveproxy, опять же, простая до невозможности. Если наша цель - замаскировать трафик от прокси-клиента так, чтобы он был вообще ничем неотличим от трафика от обычного браузера - почему бы не использовать для этого сам браузер?

Именно так и рассудил автор Naiveproxy и сделал следущее: взял исходники браузера Chromium, оторвал оттуда код сетевого стека, и использовал его в своем прокси-клиенте, причем в качестве прокси-протокола используется самый обычный метод CONNECT + HTTP/2.

В итоге одним выстрелом убивается сразу несколько зайцев: 

  • TLS finerprint и вообще поведение такого подключения полностью до мельчайших деталей соответствует настоящему браузеру Chromium - более того, автор периодически синхронизируется с кодовой базой Chromium, чтобы иметь самые новые версии его сетевого стека, и таким образом максимально соответствовать свежим версиям браузера;

  • Определение паттернов трафика, характерных для определенных веб-сайтов, затрудняется благодаря HTTP/2 мультиплексированию;

  • Определение свой/чужой, чтобы не демаскировать прокси при active probing осуществляется посредством стандартных HTTP-заголовков (“Proxy-Authorization”). Если там содержатся правильные данные - ларчик открывается, если нет, либо же заголовки отсутствуют - сервер делает вид, что не понимает, что от него хотят и выдает фейковый сайт.

В теории, на “той стороне” в качестве прокси-сервера может выступать вообще любой сервер, поддерживающий метод CONNECT (например, tinyproxy), а авторизацию “свой-чужой” можно сделать с помощью reverse-proxy такого как HAProxy. Однако гораздо лучше использовать реализации, знающие про особенности naiveproxy - в таком случае в пакеты данных также добавляется padding (грубо говоря, мусорные данные, не несущие смысловой нагрузки) для усложнения анализа паттернов трафика. Это может быть, например, сам naiveproxy на сервере, или же патченный плагин для известного веб-сервера Caddy.

KCP (kcptun), mKCP

В сравнении со всем описанным выше, KCP - это протокол совершенно другого рода. 

Авторы KCP переосмыслили алгоритмы передачи данных и разработали протокол, который работая поверх UDP обеспечивает надежную передачу, так же как TCP, но при этом в сравнении с TCP средняя задержка (пинг) при его использовании ниже на 30–40 %, а максимальная задержка меньше в три раза (правда, за счет потери полосы пропускания на 10–20%).

И все это как нельзя кстати оказалось для обхода блокировок, потому что в Китае и в некоторых арабских странах “неизвестные” протоколы нередко не блокировались полностью, а то ли намеренно, то ли из-за кривости механизмов фильтрации резались путем замедления и потерь пакетов. Также KCP может быть полезным при работе через отвратительные соединения (например, олдовый 3G в условиях плохого покрытия сети).

Для эффективной работы KCP требует указания в конфигурации измеренной реальной пропускной способности канала на прием и передачу.

Теперь разберемся с версиями и реализациями.

KCP - это оригинальный протокол. Kcptun - реализация туннеля на основе KCP.

mKCP - это вариант протокола KCP от V2Ray - по сути дела тот же KCP, но с небольшими изменениями (KCP и mKCP между собой не совместимы, имейте в виду). В V2Ray/XRay mKCP не является самостоятельным прокси-протоколом, а только лишь транспортом - то есть поверх него все так же нужно использовать VMess или VLESS. V2Ray/XRay имеют также опцию  “congestion” для автоматической перенастройки параметров канала в случае высоких потерь пакетов, как и в оргигинальном kcptun можно задать секретный ключ (тут он называется “seed”) для усложнения детектирования, а еще можно маскировать внешний вид UDP-пакетов под SRTP (используемый, например, в Apple FaceTime), uTP (Bittorrent), WeChat, и DTLS (используемый в WebRTC, например, многими месседжерами).

Hysteria

Hysteria во многом очень похож на KCP. Не знаю, основан ли он на нем же, или авторы просто вдохновлялись его идеями - напрямую об этом нигде не сказано, но сходство весьма существенное. Кто авторы - тоже неизвестно, они сохраняют анонимость, документация на официальном сайте только на русском или китайском языке, но в примерах конфигурации среди секретных ключей встречается строка “Мать-Россия”, прямо так, кириллицей, что наталкивает на размышления.

Логотип Hysteria
Логотип Hysteria

Hysteria - это прокси-инструмент, как и Kcptun предназаченный для работы через нестабильные сети с потерями пакетов, ну и обхода блокировок, само собой. 

В отличие от KCP, Hysteria передает данные не просто поверх UDP, а с использованием протокола QUIC (HTTP/3). Поэтому для работы на сервере должен иметься TLS-сертификат, сервер Hysteria умеет автоматически запрашивать сертификаты методом ACME (например, от Let’s Encrypt). Поскольку QUIC часто полностью блокируется в ряде стран (в том числе и в России), есть также возможность установить ключ для обфускации данных, в результате чего UDP-пакеты становятся ни на что не похожи.

Также как и для KCP, на стороне клиента Hysteria необходимо задать доступную ширину канала (например, в мегабитах), а еще есть интересный режим port hopping - разработчики подметили, что в Китае при детектировании “неправильных протоколов” бан накладывается не на весь IP-адрес целиком, а на связку IP+порт, поэтому сервер может слушать сразу на большом количестве портов, а “клиент” может прыгать на разные рандомные порты при неудачных попытках соединения.

И еще одна интересная возможность Hysteria - FakeTCP. В этом режиме клиент и сервер будут обмениваться пакетами, которые выглядят как TCP-пакеты (согласно их заголовку), но в обход системного TCP-стека и его механизмов. В итоге для всех промежуточных роутеров и цензоров обмен данными выглядит как TCP-подключение, хотя на самом деле им не является. Это может помогать в случае использования корпоративных фаерволов или цензоров, полностью режущих UDP. FakeTCP поддерживается только в Linux.

Meiru, TUIC, Brook, Pingtunnel

Эти протоколы вы мало где встретите, разве что только в самых упоротых клиентах. Я не встречал на просторах интернета упоминания их массового использования, поэтому просто пройдусь очень кратко, для общего развития, так сказать:

Meiru - аналог Shadowsocks / VMess+TCP, просто зашифрованный поток данных с паддингом поверх TCP или UDP.

TUIC - прокси-протокол поверх QUIC нацеленный на минимальный оверхед (0-RTT)

Brook - официально называется даже не прокси,  а “cross-platform network tool designed for developers”, видимо, чтобы не привлекать внимание цензоров, хотя в футере сайта есть гордое заявление “Undetectable Protocol”. Информации об идеях в основе протокола и его преимуществах практически нет даже на официальном сайте и Github’е, судя по обрывочным данным, может работать в режиме “random” (как и Shadowsocks, непонятный поток данных), HTTP/HTTPS, в том числе поверх Websockets, и т.д. Возможно разработчики действительно придумали какие-то оригинальные идеи, затрудняющие детектирование, но никому об этом открыто не рассказывают, чтобы не привлекать внимания, в надежде что лезть и изучать исходники у цензоров не хватит терпения и квалификации, либо рассчитывают на эффект "неуловимого Джо".

PingTunnel - как следует из названия, позволяет проксировать TCP и UDP с помощью обычных ICMP-пингов. Звучит многообещающе.

Что использовать?

РКН-тян с интересом смотрит на ваши попытки обхода цензуры
РКН-тян с интересом смотрит на ваши попытки обхода цензуры

Зависит от того, насколько вы себя уверенно чувствуете в системном администрировании и готовы во всем этом разбираться методом проб и ошибок.

Если не уверены, либо не готовы и хочется максимально простое и универсальное решение, то я могу посоветовать настроить XRay в варианте VLESS-over-Websockets с fallback’ом на какой-нибудь безобидный веб-сайт. Со стороны клиентов обязательно выбрать опцию uTLS, и желательно добавить настройку чтобы ресурсы в зоне .ru и с российскими IP открывались без прокси.

Такая связка поддерживается практически всеми клиентами, еще долгое время будет устойчива к детектированию (учитывая отсталость и тормознутость нашего родного РКН), при наличии зарегистрированного домена можно работать через CDN, а устанавливается и настраивается все это элементарно парой команд в консоли (об этом будет в одной из следущих статей).

Если вы готовы к подвигам и экспериментам, то можно задуматься о настройке XRay с VLESS+XTLS-Vision, добавить fallback на VLESS+Websockets для старых клиентов и CDN разных видов, и на том же сервере поднять еще mKCP/Hysteria, Shadowsocks-2022 и классический SSH-туннель. И на будущее присмотреться к XTLS-Reality. В случае чего, хоть один из вариантов, но сработает.

А еще в одной из следущих статей я расскажу про клиенты. Потому что с клиентами дело обстоит примерно так же, как с серверами и протоколами: их много, они разные, некоторые из них являются форками друг друга, но с существенными отличиями, некоторые поддерживают одно, некоторые другое, а некоторые, казалось бы, поддерживают только это и это, но при правильном подходе их можно заставить поддерживать то, что они, казалось бы, не поддерживают :) Короче говоря, будет интересно, не переключайтесь.

Комментарии (89)


  1. meaqese
    10.04.2023 14:21
    +6

    Создатель протокола VLESS RPRX просил писать именно VLESS, а не VLess и т.д. :)

    Reality протокол уже официально пре-релизнулся и поддерживается многими клиентами, аля WingsX (iOS, Mac), v2rayNG (Android), v2rayN (Windows). Если посмотреть в гитхабе, есть примеры (https://github.com/chika0801/Xray-examples) и описание. Думаю нет релиза из-за того что Xray-core 1.8 не поддерживает xtls-rprx-direct, и если прям релизнут, то v2rayNG и тд релизнут новые версии с новым ядром не только в github, но и в play market и тд, и тем самым на многие сервера нельзя будет подключиться из-за того что клиенты не будут поддерживать старые конфиги.

    Рекомендуете использовать ws, но многие от него уходят в сторону grpc из-за нестабильности, и ещё grpc поддерживает cloudflare например, как и ws, но за ws при больших объемах запросов нужно платить ещё)

    Многие говорят что у Trojan бОльшая задержка нежели у VLESS, но тем не менее оно всё таки имеет приемущество в некотром смысле - поддержка на старых устройствах. Оригинальный Xray-core поддерживается только на iOS 16+, поэтому на более старых можно использовать Trojan.

    Использовать ws, grpc в России это пока слишком, нет смысла терять скорость если нет необходимости. Можно понять если у нас не осталось уже чистых IP и блочат как в Иране или Туркменистане например, и использовать ws, grpc вместе с cdn, тогда это ещё разумно, а так, такое..

    В целом статья хорошая, у меня не дошли руки дописать, но я рад что статья всё таки вышла и подготовила хабрчан к чебурнету)


  1. aborouhin
    10.04.2023 14:21
    +7

    За обзор спасибо, монументально!

    А вот на вопрос "что использовать?", если мы в России, а не в Китае - то пока что ответил бы "Wireguard" :) Потому что угадать, что, когда и как будут блокировать, невозможно, и к тому времени наверняка появится целый зоопарк ещё более изощрённых протоколов. Проблемы тут можно решать только по мере их возникновения. Про технические возможности блокировки в текущих реалиях не скажу, не в курсе. Но как минимум историю с регистрацией корпоративных VPN, которую чуть было не начали реализовывать, тогда же сразу и свернули, - так что чтобы начать блочить вот прям протоколами, её сначала надо будет заново пройти.

    В любом случае, полезно минимизировать количество трансграничных каналов, т.е. VPN-сервер для пользователей делать в России, а от него уже канал за рубеж отдельно, который в случае наступления тёмных времён можно хоть каждую неделю перенастраивать на новый протокол, не трогая конечные устройства.


    1. MiraclePtr Автор
      10.04.2023 14:21
      +4

      Wireguard я бы, честно говоря, не рекомендовал. Потому что из всех существующих он самый уязвимый к детектированию, достоверно известно что куча российских DPI выявлять и резать его уже умеет, поэтому если вдруг у РКН или лицпринимающихрешения возникнет желание, то Wireguard будет вообще чуть ли не самым первым в очереди на блокировку.

      А идея с двумя серверами - да, грамотная. И такое реализовать не так уж и сложно.


      1. aborouhin
        10.04.2023 14:21

        Ну заблокируют - он будет за пару часов заменён на что угодно другое. Пока что он очень радует минимальной потерей скорости при ощутимой latency (а до зарубежного сервера у нас по-любому >30ms)

        Два сервера у меня уже больше года. Изначально даже не из опасений блокировки, а из-за того, что весь трафик пользователей гонять через Европу - лишние тормоза и проблемы с российскими сайтами. А таблицу маршрутизации на десятки/сотни тысяч префиксов я себе на роутеры (дома и в офисе) по BGP раздаю, но на телефон-то её не запихнёшь (да и на ноутбук под виндой без отдельных танцев с бубном - тоже).


        1. MiraclePtr Автор
          10.04.2023 14:21

          Пока что он очень радует минимальной потерей скорости при ощутимой latency (а до зарубежного сервера у нас по-любому >30ms)

          Судя по всему, не так страшна эта проблема, как ее малюют. У меня Xray между хостами в Москве и Праге легко выдает честные ~100 мегабит по TCP-соединению (пинг около 50 мс).


        1. Tarakanator
          10.04.2023 14:21

          А зачем на телефон? телефон цепляется ipsec\wireguard к домашнему роутеру, а роутер уже решает куда дальше пулять.


          1. aborouhin
            10.04.2023 14:21

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


          1. MiraclePtr Автор
            10.04.2023 14:21

            телефон цепляется ipsec\wireguard к домашнему роутеру

            В случае начала блокировок по протоколам на DPI, есть неиллюзорная вероятность что по IPSec/Wireguard телефон не сможет никуда присоединиться даже внутри страны.


            1. Tarakanator
              10.04.2023 14:21

              Это было не к вопросу обхода блокировок, а к вопросу маршрутизации.


      1. dartraiden
        10.04.2023 14:21
        +7

        Технари склонны ударятся в другую крайность — "а наверну-ка я обфускацию по-максимуму, чтобы быть на шаг впереди даже тех китайцев, которые обходят Золотой Щит".


        Но не нужно бежать быстрее медведя, достаточно бежать быстрее самых медленных. А самые медленные сейчас — пользователи коммерческих сервисов.


        Я вообще много лет сижу на бесплатном Антизапрете (даже не его self-hosted варианте), заблокировать который как два байта переслать (достаточно доступ к домену заблокировать), но который, тем не менее, отметил 10-летие работы.


        1. MiraclePtr Автор
          10.04.2023 14:21
          +5

          Технари склонны ударятся в другую крайность — "а наверну-ка я обфускацию по-максимуму, чтобы быть на шаг впереди даже тех китайцев, которые обходят Золотой Щит".

          Ну это весьма полезная крайность. Ибо в случае чего даёт гораздо больше времени на принятие мер и адаптацию к обстановке, которая может измениться в любой момент. Особенно если вы настраиваете туннель не себе, а например, совсем не-айтишным родственникам, оставшимся в России, и не можете заранее угадать, в какую сторону будут действовать недоброжелатели.

          Но не нужно бежать быстрее медведя, достаточно бежать быстрее самых медленных. А самые медленные сейчас — пользователи коммерческих сервисов.

          Увы, это так не работает. Потому что если в какой-то момент запахнет жареным и РКН вместо бана по айпишникам начнет банить по протоколам (как это случилось например, в Беларуси в 2020 году), то для DPI не будет разницы, бегает ли у вас Wireguard до публичного сервиса или до личного VPS.

          Я вообще много лет сижу на бесплатном Антизапрете (даже не его self-hosted варианте), заблокировать который как два байта переслать (достаточно доступ к домену заблокировать), но который, тем не менее, отметил 10-летие работы.

          "Доступ к домену заблокировать" - не совсем элементарное действие, подменой DNS давно уже никого не заблокируешь (хотя случаи блокировок DoH-резолверов в России уже наблюдались), а для нормальной блокировки домена в случае с HTTPS для этого нужен DPI умеющий в парсинг TLS ClientHello. У ряда маленьких операторов связи такого нет до сих пор, поэтому Антизапрет у них работает, а вот у крупных (типа большой четверки и примкнувших к ним) DPI уже другого вида и Антизапрет там не работает. Ну и рассчитывать на то что "у моего провайдера тупые блокировки, значит все нормально" тоже не стоит, ибо известны случаи, когда фильтрация внезапно начинала происходить не у самого провайдера, а у магистрала.


        1. Yumado
          10.04.2023 14:21

          Истово поддерживаю. Не нужно выкладывать все что умеешь.

          У киатйцев на гитхабе прям просьба жирным текстом. Меньше спрашивай, больше читай.

          Не давай инфу GFW.


          1. MiraclePtr Автор
            10.04.2023 14:21
            +7

            У киатйцев на гитхабе прям просьба жирным текстом. Меньше спрашивай, больше читай.

            ...что не мешает тем же китайцам выкладывать диздоки и описания своих протоколов на тот же гитхаб :) А ещё выкладывать код в опен-сорс и публиковать changelog'и для клиентов и серверов, так что можно легко сделать diff между двумя ревизиями в гите и понять, что поменялось в коде и как работает та или иная новая фича.

            На самом деле все описанное в статье, давно известно и опубликовано, поэтому никакого ящика Пандоры я не открываю. А security through obscurity - тактика изначально неэффективная и позволяет только незначительно отсрочить следующую итерацию войны меча и щита.


        1. vagonovozhaty
          10.04.2023 14:21
          +1

          Антизапрет сегодня поздравили начали блокировать


        1. Darkhon
          10.04.2023 14:21

          Коммерческие сервисы тоже есть со всякими маскировками. Вон, Adguard VPN уже давно хвалится, что у них какой-то особый протокол, который до сих пор не могут заблокировать — и ведь работает, что характерно...


        1. uneasy
          10.04.2023 14:21

          Сглазили вы Антизапрет :)


      1. supaplexin
        10.04.2023 14:21
        +1

        Для wireguard есть обфускатор https://github.com/infinet/xt_wgobfs очень быстрый и работает на openwrt.


        1. MiraclePtr Автор
          10.04.2023 14:21

          Какой-то лютый костыль, честно говоря, linux-only и без поддержки в распространенных клиентах (например, на мобильных девайсах).


          1. supaplexin
            10.04.2023 14:21

            Этот костыль почти не замедляет wireguard поскольку работает тоже в ядре. Альтернатив по скорости насколько я понимаю нет. Поддержки других систем нет, но для линуха работает хорошо.


      1. Tarakanator
        10.04.2023 14:21

        В интернете есть более красивая идея.
        Пользователи идут на забугорный VPN сервер который ВЫПОЛНЯЕТ требования роскомнадзора. Поэтому его не блокируют.
        А с того VPN сервера идут на частный VPN сервер, о котором роскомнадзор не знает.


  1. Stas911
    10.04.2023 14:21

    Использую Outline на своем сервере. Он как, заслуживает доверия?


    1. Semy
      10.04.2023 14:21
      +2

      Это shadowsocks. Поэтому, думаю, заслуживает.


    1. Sadok
      10.04.2023 14:21

      он у меня (винда10) дерется с tun-интерфейсом от OpenVPN и не работает вообще. а так полезная вещь, да


    1. s7eepz
      10.04.2023 14:21
      +1

      это чистый shadowsocks, почитайте статью, он давно детектится


      1. Stas911
        10.04.2023 14:21

        А есть кто-то сравнимое по удобству и простоте настройки? Что детектится - пока не режут вроде, никто не жаловался.


        1. s7eepz
          10.04.2023 14:21
          +1

          Так то да, пока не трогают, но запасные варианты надо иметь.

          Чем он удобен, кроме того, что ставится одной командой в докер?

          Вчера настроил после этой статьи xray/grpc + xray/xtls-vision. Потратил прилично времени, чтоб все это понять. Зато в клиенте shadowrocket куча настроек, что куда/почему/зачем. Намного гибче, чем outline.


  1. SignFinder
    10.04.2023 14:21

    Можно ли уточнить - где искать сервер shadowsocks с поддержкой shadowsocks-2022. Это в rust реализации shadowsocks здесь https://github.com/shadowsocks/shadowsocks-rust?


    1. MiraclePtr Автор
      10.04.2023 14:21
      +1

      Rust-реализация должна уметь, да, у них в README указаны опции сборки aead-cipher-2022 и aead-cipher-2022-extra. В конфигурации, соответственно, нужно использовать method который начинается с "2022-", например 2022-blake3-aes-128-gcm и 2022-blake3-aes-256-gcm (это стандартные), или 2022-blake3-chacha20-poly1305, 2022-blake3-chacha12-poly1305, 2022-blake3-chacha8-poly1305 (это extra).

      Другой вариант - использовать XRay-core в качестве сервера, он умеет в ss-2022 (имена методов те же), я проверял.

      Клиент, соответственно, должен уметь в тот же метод ("2022-*"), что настроен на сервере.


      1. SignFinder
        10.04.2023 14:21

        Спасибо за разъяснение, меня термин "плагин" по отношению к X-Ray ввел в заблуждение, я решил, что ему нужен будет Shadowsocks, а он самодостаточный клиент-сервер получается.


        1. MiraclePtr Автор
          10.04.2023 14:21
          +1

          Да, все верно, XRay (как и Sing-Box, он вообще прекрасен) самодостаточный и довольно много умеет из коробки.


          1. SignFinder
            10.04.2023 14:21
            +1

            XRay еще и multiuser умеет, ShadowSocks-ev не умел.


  1. Laryx
    10.04.2023 14:21
    -4

    Лично я склоняюсь к юридическим, а не к технологическим решениям проблемы. Необходимо изменение законодательства, а не его обход.

    Написал бы много мыслей по этому поводу, но, к сожалению, карма слишком низка.


    1. MiraclePtr Автор
      10.04.2023 14:21
      +13

      В данном случае изменение законодательства не в интересах того, кто может менять это самое законодательство законодательство, потому в российских реалиях предложение из разряда фантастики.


  1. kovalensky
    10.04.2023 14:21
    +3

    Может быть off-topic, но никто не знает решения на android с протоколом IP-over-DNS?
    Iodine имеет клиент andiodine, который падает, накрылся slowdns.
    Судя по тестам провайдер пропускает dns трафик даже при отрицательном балансе.


    1. Sadok
      10.04.2023 14:21

      а оно живет еще? в одном перевернутом провайдере прибили все эти "овер" уже давно, лет 10 как. icmp, dns и другие чудеса.


      1. kovalensky
        10.04.2023 14:21

        Я заграницей, отрицательный баланс, скорость смог довести до 100кб+ при установке длинных txt записей:


        image


  1. XRay108
    10.04.2023 14:21

    Спасибо за статью. Как раз сейчас изучаю Xray и sing-box. Заинтересовался XTLS Reality, благо он реализован и в xray и sing-box. Но Gui клиентов с поддержкой realty на Windows не нашёл, хотя на андроид есть Nekobox.


    1. MiraclePtr Автор
      10.04.2023 14:21
      +2

      Про клиенты, в том числе и GUI, будет следующая статья. Sing-Box умеет Reality, соответственно если в десктопном Nekobox используется свежая версия ядра, то и он должен работать с ним - в UI, понятное дело, такой опции нет, но Nekobox позволяет добавлять кастомные поля в JSON-конфиг чтобы включить то чего не хватает, у меня с XTLS Vision такой хак отлично сработал.

      Ещё есть Clash-Verge, который основан на ядре Clash.Meta, последние версии которого заявляют поддержку Reality, но это вариант не самый простой в настройке и вообще на любителя.


      1. XRay108
        10.04.2023 14:21

        Nekobox позволяет добавлять кастомные поля в JSON-конфиг

        То ли я слепой, то ли лыжи не едут)
        С Nekobox с вашей подачи разобрался, спасибо


    1. MiraclePtr Автор
      10.04.2023 14:21
      +1

      Upd. Только что проверил - свежая версия v2rayN вроде как поддерживает Reality, по крайней мере версия ядра там новая, и есть соответствующая опция в интерфейсе. Но сам интерфейс вырвиглазенький, да, поэтому я всё-таки за Nekobox.


  1. retry
    10.04.2023 14:21

    Чтонибудь из этих средств можно установить без административного доступа к винде?


    1. nidalee
      10.04.2023 14:21
      +3

      Клиент v2ray не требует административного доступа к винде (и установки вообще как таковой). Софтина поднимает локальный прокси, который можно вбить в браузер или плагин.


    1. MiraclePtr Автор
      10.04.2023 14:21
      +3

      Вопрос про клиент или сервер?

      Если про клиент, то да - большинств что консольных, что GUI клиентов не требуют установки (достаточно кинуть файлы в папочку и запустить) и не требуют административного доступа. Но есть один нюанс: не получится работать через TUN-интерфейс (для установки драйвера и настройки сети нужны админские права), только через локальный прокси. Настройки прокси в винде, насколько я помню, может менять даже непривелигированный пользователь, и даже если админы запретили это делать, можно использовать браузер который не завязывается на системные настройки (например, Firefox точно так умеет).


  1. nidalee
    10.04.2023 14:21

    В сети ходят куча скриптов от китайцев, которые разворачивают практически любую из перечисленных в статье конфигураций, с одной оговоркой — они нафиг сносят существующий nginx и переписывают его своим. Хуже того — некоторые вообще его оставляют только для переадресации на сайт-заглушку, а на порту 443 висит, собственно, сам v2ray.
    Есть ли какие-то скрипты, которые поднимают только v2ray с рюшечками, не трогая nginx?
    Хотелось бы совместить приятное с полезным и разместить еще какие-то страницы на локальном nginx, а не отдавать сервер полностью под v2ray да редиректы.
    У меня на старом сервере висит v2ray на "каталоге" сайта, но все новые авто-скрипты, похоже, так делать разучились.


    1. MiraclePtr Автор
      10.04.2023 14:21
      +1

      Смотря что именно надо - если в планах использовать XTLS (Vision или Reality), то XRay должен стоять перед Nginx, потому что эти механизмы требуют TLS-хаков, и поэтому сессия должна терминироваться именно в XRay. XRay умеет в fallbacks, поэтому можно без проблем перекидывать запросы на локальный Nginx и отдавать какой-нибудь сайт, правда, как оно поведет себя под нагрузками - вопрос. Ну или можно заморочиться с Nginx ssl_preread модулем и разруливать по поддоменам.

      Если же никаких излишеств не надо, то можно настроить в XRay inbound типа VLess через Websockets на каком-нибудь левом порту, а в Nginx прописать правило проксирования websockets с определенного URI на этот локальный порт где висит XRay.

      Скриптов для этого даже особых не надо, Xray написан на Go и устанавливается просто киданием бинаря куда-нибудь в /opt, ну для надёжности можно systemd-юнит из трёх строк написать :)


      1. nidalee
        10.04.2023 14:21

        Смотря что именно надо — если в планах использовать XTLS (Vision или Reality), то XRay должен стоять перед Nginx, потому что эти механизмы требуют TLS-хаков, и поэтому сессия должна терминироваться именно в XRay.
        Ага, вот оно что. Тогда понятно, почему так :)
        Скриптов для этого даже особых не надо, Xray написан на Go и устанавливается просто киданием бинаря куда-нибудь в /opt, ну для надёжности можно systemd-юнит из трёх строк написать :)
        Да тут скорее банально рабочий конфиг v2ray бы сгенерировать. А то я что-то пытался руками написать — не взлетело. Придется дальше мануалы раскуривать.


        1. MiraclePtr Автор
          10.04.2023 14:21
          +1

          За хорошими примерами конфигов советую заглянуть сюда: https://github.com/v2fly/v2ray-examples/ (V2ray) и сюда https://github.com/XTLS/Xray-examples (XRay). В репе Xray ещё есть примеры конфигов Nginx для разных вариантов, надеюсь окажется полезным. Ну или дождаться одной из следующих статей, постараюсь написать про простой вариант установки сервера (но это наверное где-нибудь в мае, ибо работы много, а потом отпуск).


          1. Mayurifag
            10.04.2023 14:21
            +1

            Вот кстати да, вариантов установки сервера очень не хватает, ansible скриптов каких-нибудь, особенно, как уже отметили, при уже работающем nginx или другом реверс прокси.

            Так что спасибо за эту статью и заранее спасибо за будущую!


            1. VadimProfii
              10.04.2023 14:21

              Поддерживаю. И еще собранные пакеты под какую-нибудь Линуксовую систему хочется... Можно даже Убунту... Или Тэйлс :)


              1. MiraclePtr Автор
                10.04.2023 14:21
                +1

                Все известные мультпротокольные сервера написаны на Go, так что там собранные пакеты даже не нужны - закинул бинарь куда-нибудь в /opt, рядом положил конфиг, и добавил трехстрочный юнит для systemd чтобы все запускалось автоматически от нужного юзера. И все работает.


  1. meaqese
    10.04.2023 14:21
    +6

    Создатель протокола VLESS RPRX просил писать именно VLESS, а не VLess и т.д. :)

    Reality протокол уже официально пре-релизнулся и поддерживается многими клиентами, аля WingsX (iOS, Mac), v2rayNG (Android), v2rayN (Windows). Если посмотреть в гитхабе, есть примеры (https://github.com/chika0801/Xray-examples) и описание. Думаю нет релиза из-за того что Xray-core 1.8 не поддерживает xtls-rprx-direct, и если прям релизнут, то v2rayNG и тд релизнут новые версии с новым ядром не только в github, но и в play market и тд, и тем самым на многие сервера нельзя будет подключиться из-за того что клиенты не будут поддерживать старые конфиги.

    Рекомендуете использовать ws, но многие от него уходят в сторону grpc из-за нестабильности, и ещё grpc поддерживает cloudflare например, как и ws, но за ws при больших объемах запросов нужно платить ещё)

    Многие говорят что у Trojan бОльшая задержка нежели у VLESS, но тем не менее оно всё таки имеет приемущество в некотром смысле - поддержка на старых устройствах. Оригинальный Xray-core поддерживается только на iOS 16+, поэтому на более старых можно использовать Trojan.

    Использовать ws, grpc в России это пока слишком, нет смысла терять скорость если нет необходимости. Можно понять если у нас не осталось уже чистых IP и блочат как в Иране или Туркменистане например, и использовать ws, grpc вместе с cdn, тогда это ещё разумно, а так, такое..

    В целом статья хорошая, у меня не дошли руки дописать, но я рад что статья всё таки вышла и подготовила хабрчан к чебурнету)


    1. nidalee
      10.04.2023 14:21

      Да, обзор приятный, но не хватает гайдов и\или скриптов, так что ждем вместе с автором мая месяца.
      А то я вот вроде не совсем дебил, но тот v2ray, что у меня поднял скрипт (года два назад) работает прекрасно, а на другой машине с более новым v2ray скопированный конфиг с измененным uuid и путем — уже не работает. Хотя казалось бы… Из настроек там по сути только они и есть.


      1. meaqese
        10.04.2023 14:21
        +1

        Гайды это хорошо, но документация лучше)

        Официальная документация - https://xtls.github.io/Xray-docs-next/
        Примеры конфигурации - https://github.com/XTLS/Xray-examples, https://github.com/chika0801/Xray-examples


    1. MiraclePtr Автор
      10.04.2023 14:21

      Отличный комментарий, огромное спасибо.

      Создатель протокола VLESS RPRX просил писать именно VLESS, а не VLess и т.д. :)

      Принято! Сейчас отредактирую.

      Думаю нет релиза из-за того что Xray-core 1.8 не поддерживает xtls-rprx-direct

      Насколько я помню, direct вполне официально объявлен как deprecated и рекомендуется переходить на vision. Sing-box вон, его изначально и не поддерживал :)

      Рекомендуете использовать ws, но многие от него уходят в сторону grpc из-за нестабильности, и ещё grpc поддерживает cloudflare например, как и ws, но за ws при больших объемах запросов нужно платить ещё)

      А сколько нужно набрать объема, чтобы Cloudflare начал требовать деньги? У меня пока пользователи гоняли до гигабайта в месяц и CF вроде не бухтят. В документации Sing-Box про gRPC сказано что у него "poor performance", хотя возможно это особенности конкретной реализации.

       Оригинальный Xray-core поддерживается только на iOS 16+, поэтому на более старых можно использовать Trojan.

      На iOS <16 еще можно использовать Shadowrocket, он хорошо умеет в VLESS с XTLS-Vision и uTLS. Единственный недостаток - немного платный, 3 бакса.


      1. meaqese
        10.04.2023 14:21

        Насколько я помню, direct вполне официально объявлен как deprecated и рекомендуется переходить на vision. Sing-box вон, его изначально и не поддерживал :)

        Даже если deprecated, всё таки надо помнить что многие используют до сих пор direct и радуются жизни, а вот обновление, оно такое жесткое что прервёт этот кайф)

        А сколько нужно набрать объема, чтобы Cloudflare начал требовать деньги?

        К сожалению CF решила не указать конкретные цифры, но подробная табличка есть здесь: https://developers.cloudflare.com/support/network/using-cloudflare-with-websockets/

        На iOS <16 еще можно использовать Shadowrocket, он хорошо умеет в VLESS с XTLS-Vision и uTLS.

        Я заранее подготовился к данному аргументу, и поэтому указал что нет клиентов именно с оригинальным Xray-core в iOS'ах ниже 16 версии)


      1. s7eepz
        10.04.2023 14:21

        а куда они дели utls из shadowrocket в ios 16?


  1. Andruh
    10.04.2023 14:21

    А что, ssh-туннели в России уже режут?

    Понятно, что для Китая - да. А в России-то зачем? Если не режут, то и вряд ли будут. У нас последним самым ушлым 1% обычно не занимаются.

    Ожидал и не увидел идеи прятать стеганографией в видеопоток. Например, через какой-нибудь имитатор zoom.


    1. MiraclePtr Автор
      10.04.2023 14:21

      Пока не режут, но как показывает пример Китая, если вдруг захотят (например при каких-нибудь событиях), то очень даже смогут. И "если не режут, то вряд ли будут" - довольно наивное суждение. Потому что когда порежут все популярные варианты, доля хитрозадых с SSH будет уже не 1%, а многократно больше. Как говорится, надейся на лучшее, готовься к худшему.

      Упомянутые в статье KCP и Hysteria умеют делать маскировку трафика под SRTP и DTLS (WebRTC), которые используются для передачи аудио-видео во многих месседжерах.


      1. anonymous
        10.04.2023 14:21

        НЛО прилетело и опубликовало эту надпись здесь


        1. MiraclePtr Автор
          10.04.2023 14:21

          По примеру Китая - замедление до черепашьих скоростей если характер передачи данных (паттерны трафика) похожи на серфинг или же по превышении определенного объема переданных данных.


          1. Andruh
            10.04.2023 14:21

            У нас уже крупные телеком и прочие ИТ-компании просто наложат вето на закрытие ssh. Не готова Россия к полной изоляции по факту. И сервера за рубежом по факту, и работники.

            Так-то оно да, кто-то вот землянки роет. Вопрос в вероятностях и матожидании выхлопа.


            1. MiraclePtr Автор
              10.04.2023 14:21

              У нас уже крупные телеком и прочие ИТ-компании просто наложат вето на закрытие ssh.

              Варианты: а) их вообще никто спрашивать не будет, как не спрашивали про многие вещи произошедшие за последнее время б) фильтровать/тормозить SSH можно только для физлиц, юрлица пусть работают в) фильтровать/тормозить можно всех, кроме тех что в белых списках, список адресов предоставлять в Роскомнадзо в кабинет номер 228 по средам с 9 до 12 на бланке юрлица с печатью и справкой от участкового.


              1. Andruh
                10.04.2023 14:21

                а) будут, потому что нужна квалификация, чел в погонах не понимает что такое ssh.

                б) в) слишком сложно, нет такой энергии и мощи организации

                я) если даже так, то бегите, глупцы :) (что и кому вы там собираетесь доказывать своими иксреями?)


                1. Sadok
                  10.04.2023 14:21
                  +3

                  а)

                  это очень грубая, школьная, ошибка. вас видимо в Первый отдел не таскали и внимательно не беседовали.


                  1. Andruh
                    10.04.2023 14:21

                    Первый отдел принимает решения о запрете? Может неаккуратно выразился, согласен, что существуют челы в погонах, которые понимают. Но они для точечных репресиий, не для общего запрета.


                    1. Sadok
                      10.04.2023 14:21
                      +3

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


            1. Dolios
              10.04.2023 14:21

              У нас уже крупные телеком и прочие ИТ-компании просто наложат вето на закрытие ssh.

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


              Не готова Россия к полной изоляции по факту.

              После февраля прошлого года я уже ничему не удивлюсь. К тому же на Россию и ее неготовность к чему-то там центрам принятия решений (с) наплевать.


      1. Andruh
        10.04.2023 14:21

        Вот не уверен, кстати, что доля будет более 1%. Люди смиряются (большинство отказалось от нельзяграма). Пассионарные уезжают или настраивают тунели, последних очень мало по-любому.
        Да и вообще, в России сильно выделяться со сложным шифрованием трафика - это игра в русскую рулетку: постучат в физическую дверь сегодня или завтра. Проще уехать, когда ssh-тунели закроют (если до сих пор не хватало) или найти занятия, не зависящие от интернета.


  1. anonymous
    10.04.2023 14:21

    НЛО прилетело и опубликовало эту надпись здесь


    1. nidalee
      10.04.2023 14:21
      +2

      На всякий случай надо развернуть и проверить работу! Скачать мало :)
      У нас одним днем могут отколоть.


      1. anonymous
        10.04.2023 14:21

        НЛО прилетело и опубликовало эту надпись здесь


        1. MiraclePtr Автор
          10.04.2023 14:21

          В сеть уже не раз утекали письма из РКН, разосланные по всяким банкам и другим компаниям, мол, сообщите, какими VPN вы пользуетесь чтобы мы их случайно не заблокировали.

          А что до остального бизнеса - как показала история с ковровой блокировкой Telegram, когда в бан-лист вносили целыми подсетями тысячи адресов, и из-за этого ломались сайты компаний, сервисы и даже банкоматы - проблемы компаний РКН не волнуют.


  1. progchip666
    10.04.2023 14:21

    Спасибо. Всё больше склоняюсь к аренде собственного сервака для индивидуального VPN. Платный VPN, который был закуплен на год с лишним вперёд сначала стал работать с большими перебоями, потом ограничил доступ к ресурсам типа FB, да бог бы с ним невелика потеря. Но теперь он вообще не хочет коннектиться и это уже всерьёз начинает мешать работе, поскольку теряешь доступ к ресурсам типа analog.com. Мало того, что электронные компоненты приходится закупать кривейшими путями, часто через Китай, так слетевшие с катушек цензоры ещё процесс разработки новых электронных устройств затрудняют, стреляя себе в ногу и увеличивая нашу технологическую отсталость!


  1. krozzzis
    10.04.2023 14:21
    +1

    Окей, вопрос с серверами и протоколами решен. А где это все развернуть? Где лучше купить зарубежный сервер, да чтобы оплатить можно было из России?


    1. MiraclePtr Автор
      10.04.2023 14:21
      +1

      Многие российские хостеры типа vdsina, ruvds, aeza и другие позволяют арендовать сервер где-нибудь в Нидерландах или еще где и платить за него рублями с российской карточки. Если целью ставится только обход блокировок, а не приватность/анонимность, то такой вариант вполне себе неплох.

      Ну либо искать зарубежных хостеров, которые принимают оплату криптой, например, ITL. Но там можно потерять на комиссиях.


      1. Asbor
        10.04.2023 14:21

        пользовался vdsin'ой, но с прошлой недели они ввели 30+% комиссию на пополнение


        1. Sadok
          10.04.2023 14:21

          значит маршируют в закат с военно-морской песней. дотянулись дефективные манагеры и туда.


          1. Asbor
            10.04.2023 14:21

            полностью согласен, докатываю баланс, а пока ищу куда уйти)


            1. Sadok
              10.04.2023 14:21

              я не рекламирую, но вот м... время-веб зашел сразу.


              1. MiraclePtr Автор
                10.04.2023 14:21

                Ну такое. Мне вот важна ширина канала и объем диска, и время-веб с сопоставимыми характеристиками стоит дороже чем (вдсина+30%)


        1. MiraclePtr Автор
          10.04.2023 14:21

          Вот это подстава. Я тоже ими пользовался. Жаль, отличный сервер они мне дали, и канал в частные полгигабита радовал.
          Ну или остается только рассматривать эти +30% как часть цены тарифа :)


    1. ighost
      10.04.2023 14:21
      +1

      посмотрите еще weasel, вполне демократичные цены на vps в нидерландах.


    1. s7eepz
      10.04.2023 14:21

      timeweb от 188р.

      ishosting.com от 5$.


  1. Fatrick
    10.04.2023 14:21

    Отличная статья, спасибо!

    Можно же для обычного серфинга на те же "зароскомнадзоренные" сайты арендовать дедик где-нибудь в Амстердаме и работать на нём через удаленный рабочий стол.

    Что с этой схемой не так?


    1. MiraclePtr Автор
      10.04.2023 14:21

      Можно, почему бы и нет. Только работать через RDP/VNC зачастую само по себе не очень удобно, а уж на мобильных устройствах - тем более. И могут быть проблемы с просмотром видео.


  1. Gran04ek
    10.04.2023 14:21

    Не заметил в статье про cloak, интересно насколько он хорош для маскировки Shadowsocks?


    1. MiraclePtr Автор
      10.04.2023 14:21
      +1

      Хмм, он мне на глаза не попадался. Выглядит интересно, судя по всему сделано с умом, но в целом может быть неплохим вариантом. Правда, не понятно, насколько оно устойчиво к выявлению TLS-inside-anything и что там с fingerprint'ами. Ну и проблема - он практически ни в одном клиенте не поддерживается из коробки, нужно наворачивать схему с двумя приложениями, и на Android тоже, а на iOS видимо вообще никак.


      1. Gran04ek
        10.04.2023 14:21

        Неудобно только тем, что помимо клиента нужно ещё скачать/настроить плагин. Под IOS тоже работает на клиенте ShadowRocket.


  1. mercurykd
    10.04.2023 14:21

    спасибо. я как раз написал телеграм бота управления личным впн. ставится в 1 клик. арендуете vps, запускаете скрипт. shadowsocks который rust. как бы проверить насколько используемые shadowsocks + v2ray отвечают современным требованиям. Вы можете сделать экспертизу?

    из коробки:

    • wireguard

    • shadowsocks + v2ray

    • adguardHome

    • легко и быстро настраиваемый PAC доступный по ссылке (в том числе для клиента под android shadowsocks)

    • поддержка домена и ssl

      https://github.com/mercurykd/vpnbot, есть телеграм группа для обсуждения хотелок

      если кто подскажет новейшую лучшую защиту, могу встроить в бота


  1. Harliff
    10.04.2023 14:21

    Такие статьи надо в PDF себе сохранять…