По мере того, как нам все активнее закрывают доступ к различным ресурсам в сети, все актуальнее становится вопрос обхода блокировок, а значит все актуальнее становится вопрос «А как же быстрее обходить блокировки?».
Оставим тему эффективности, с точки зрения обхода DPIвайтлистовблеклистов для другого случая, и просто сравним производительность популярных инструментов обхода блокировок.
Внимание: В статье под спойлерами будет много картинок.
Дисклеймер: данная статья сравнивает производительность популярных впнпрокси решений, в условиях приближенных к «идеальным». Результаты полученные и описанные здесь, вовсе не обязательно совпадут с твоими результатами в полях. Потому что циферка в спидтесте зачастую будет зависеть не от того, как производителен инструмент обхода, а от того, как твой провайдер его троттлитQoSитблокирует.
Методология
У облачного провайдера (DO) куплены 3 VPS в разных странах мира. 2 в нидерландах, 1 в германии. Выбирались наиболее производительный ВПС (по кол-ву ядер) из доступных для аккаунта по предложению за купонные кредиты.
На первом нидерландском сервере развернут приватный iperf3-сервер.
На втором нидерландском сервере поочередно разворачиваются различные серверы инструментов обхода блокировки.
На германском ВПС развернут образ десктопного линукса (xubuntu) с VNC и виртуальным рабочим столом. Этот ВПС является условным клиентом, и на него поочередно ставятсязапускаются различные клиенты проксейВПНов.
Измерения скорости проводятся от трех раз, ориентируемся на среднее, пользуемся 3 инструментами: в хромиуме через веб-спидтест; в хромиуме через fast.com; из консоли через iperf3 через проксичейнс4 (там, где нужно засунуть трафик iperf3 в проксю).
Прямое соединение “клиент”-сервер iperf3 дает скорость 2 гбитс, в iperf3, и немного меньше в фастеспидтесте.
Пытливый читатель может спросить, «а почему ты не выбрал speedtest-cli?» и будет прав.
Спидтест-кли оказался ненадежнымнеадекватным способом измерения пропускной способности, по неизвестным мне причинам. Три последовательных измерения могли дать три совершенно разных результата, или например показать пропускную способность гораздо выше, чем скорость портов у моих ВПС. Возможно проблема в моей косорукости, но проводить исследования таким инструментом мне показалось невозможно.
Что касается результатов по трем способам измерения (спидтестфастiperf) я считаю показатели iperf самыми точныминадежнымидостоверными, а фастспидтест — справочными. Но некоторые инструменты обхода не позволяли завершить 3 измерения через iperf3 и в таких случаях, можно ориентироваться на спидтестфаст.
спидтест дает разные результаты
Инструментарий
Всего было протестировано 24 разных инструмента обхода иили их комбинаций, к каждому из них я дам небольшие пояснения и свои впечатления от работы с ними. Но по сути, цель была сравнить скорости shadowsocks (и кучи разных обфускаторов к нему) openVPN и wireguard.
В данном материале я не стану детально затрагивать вопрос “как лучше спрятать трафик чтобы не отключили”, потому что обход блокировок это мера реактивная — мы подстраиваемся под то, что использует цензор, и действуем исходя из этого.
Результаты
Strongswanipsec
По моим впечатлениям — очень просто в настройке, работает достаточно стабильно. Из плюсов — действительно кроссплатформенный, без нужды искать клиенты под каждую платформу.
download — 993 mbits; upload — 770 mbits
SSH-туннель
Про использование SSH в качестве инструмента туннеля не писал наверное только ленивый. Из минусов — “костыльность” решения, т.е. разворачивать его из удобного красивого клиента на каждой платформе не получится. Из плюсов — хорошая производительность, нет необходимости вообще что-то устанавливать на сервере.
download — 1270 mbits; upload — 1140 mbits
OpenVPN
ОпенВПН тестировался в 4 режимах работы: tcp, tcp+sslh, tcp+stunnel, udp.
Серверы ОпенВПН были настроены автоматически, установкой streisand.
Насколько можно судить, на данный момент только режим работы через станнел является устойчивым к продвинутым DPI. Причина аномального повышения пропускной способности при заворачивании опенВПН-tcp в станнел мне не ясна, проверки делались в несколько заходов, в разное время и разные дни, результат был таким же. Возможно это связано с настройками сетевого стека устанавливаемыми при разворачивании стрейзанд, пишите если есть идеи почему так.
openvpntcp: download — 760 mbits; upload — 659 mbits
openvpntcp+sslh: download — 794 mbits; upload — 693 mbits
openvpntcp+stunnel: download — 619 mbits; upload — 943 mbits
openvpnudp: download — 756 mbits; upload — 580 mbits
Openconnect
Не самый популярный инструмент обхода блокировок, входит в пакет стрейзанд, поэтому решено было потестить и его.
download — 895 mbits; upload 715 mbits
Wireguard
Хайповый инструмент, пользующийся популярностью у западных пользователей, разработчики протокола даже получили какие-то гранты на развитие от фондов защиты. Работает как модуль ядра линукс, через UDP. С недавних пор появились клиенты для windowsios.
Задумывался создателем как простой быстрый способ смотреть нетфликс находясь не в штатах.
Отсюда плюсы и минусы. Плюсы — очень быстрый протокол, относительная простота установкинастройки. Минусы — разработчик изначально не создавал его с целью обхода серьезных блокировок, и потому ваергард запросто детектится простейшими инструментами, в т.ч. wireshark.
протокол wireguard в wireshark
download — 1681 mbits; upload 1638 mbits
Что интересно, ваергард-протокл используется в стороннем клиенте tunsafe, который при использовании с тем же сервером ваергард, дает гораздо более худшие результаты. Вполне вероятно, что и windows-клиент ваергарда будет показывать такие же результаты:
tunsafeclient: download — 1007 mbits; upload — 1366 mbits
OutlineVPN
Аутлайн это имплементация шэдоусокс сервера и клиента с красивым и удобным гуем от гугловского jigsaw. В windows, клиент аутлайн представляет собой просто набор оберток для бинарников shadowsocks-local (клиент shadowsocks-libev) и badvpn (tun2socks бинарник, направляющий весь трафик машины в локальный socks-прокси).
Когда-то шэдоусокс был устойчив к великому китайскому фаерволлу, но судя по последним отзывам, сейчас это уже не так. В отличе от шэдоусокс, «из коробки» не поддерживает подключение обфускации через плагины, но это можно сделать ручками, повозившись с сервером и клиентом.
download — 939 mbits; upload — 930 mbits
ShadowsocksR
ShadowsocksR это форк оригинального шэдоусокс, написанного на питоне. По сути представляет собой шэдоусокс к которому намертво приколотили несколько способов обфускации трафика.
Существуют форки ssR на libev и чем-то еще. Низкая пропускная способность вероятно обусловлена кодомязыком. Оригинальный шэдоусокс на питоне не сильно быстрее.
shadowsocksR: download 582 mbits; upload 541 mbits.
Shadowsocks
Китайский инструмент обхода блокировок, рандомизирующий трафик и прочими замечательными способами мешающий автоматическому анализу. До недавнего времени не блочился GFW, говорят, что сейчас блочится, только если включать UDP-реле.
Кроссплатформенный (есть клиенты под любую платформу), поддерживает работу с PT по типу торовских обфускаторов, есть несколько своих или адаптированных к нему обфускаторов, быстрый.
Есть куча имплементаций клиентов и серверов шэдоусокс, на разных языках. В тестировании в качестве сервера выступал shadowsocks-libev, клиенты — разные. Самым быстрым линукс-клиентом оказался shadowsocks2 на go, распространяемый в качестве дефолтного клиента в streisand, насколько производительнее shadowsocks-windows сказать не могу. В большинстве дальнейших тестов в качестве клиента использовался именно shadowsocks2. Скрины с тестированием чистого shadowsocks-libev не делались, из-за очевидного отставания данной реализации.
shadowsocks2: download — 1876 mbits; upload — 1981 mbits.
shadowsocks-rust: download — 1605 mbits; upload — 1895 mbits.
Shadowsocks-libev: download — 1584 mbits; upload — 1265 mbits.
Simple-obfs
Плагин к шэдоусокс, сейчас в статусе “depreciated” но все еще работает (хотя и не всегда хорошо). Во многом вытеснен плагином v2ray-plugin. Обфусцирует трафик или под хттп-вебсокет (и позволяет спуфать хедерыхост назначения, делая вид что ты идешь смотреть не порнхаб, а например, сайт конституции рф) или под псевдо-tls (псевдо, потому что не использует никаких сертификатов, простейшие DPI типа бесплатного nDPI детектят как “tls no cert”. В tls-режиме спуфать хедеры уже не получается).
Достаточно быстрый, ставится из репо одной командой, настраивается очень просто, имеет встроенную функцию фейловера (когда на порт, который слушает симпл-обфс приходит трафик от не-симпл-обфс клиента, он его форвардит по тому адресу, куда укажешь в настройках — таким образом можно избежать ручной проверки 80го порта например, просто сделав редирект на вебсайт с хттп, а также блокировок через коннекшн-проубы).
shadowsockss-obfs-tls: download — 1618 mbits; upload 1971 mbits.
shadowsockss-obfs-http: download — 1582 mbits; upload — 1965 mbits.
Симпл-обфс в хттп режиме также может работать через реверс-прокси CDN (например, cloudflare), таким образом для нашего провайдера трафик будет выглядеть как хттп-плейнтекст трафик до cloudflare, это позволяет чуть лучше спрятать наш туннель, а заодно разделить точку входа и выхода трафика — провайдер видит что твой трафик идет в сторону ip-адреса CDN, а экстремистские лайки на картинках проставляются в этот момент c ip-адреса VPS. Надо сказать что именно с-обфс через CF работает неоднозначно, периодически неоткрывая некоторые хттп-ресурсы например. Так, потестить аплоад используя iperf через shadowsockss-obfs+CF не удалось, но судя по результатам спидтеста, пропускная способность на уровне shadowsocksv2ray-plugin-tls+CF. Скринов с iperf3 не прикладываю, т.к. на них ориентироваться не стоит.
download (speedtest) — 887; upload (speedtest) — 1154.
Download (iperf3) — 1625; upload (iperf3) — NA.
v2ray-plugin
V2ray-plugin пришел на замену симпл-обфс в качестве основного “официального” обфускатора для сс-либев. В отличие от симпл-обфс его пока нет в репозиториях, и нужно или качать заранее собранный бинарник, или компилять самому.
Поддерживает 3 режима работы: дефолтный, хттп-вебсокет (с поддержкой спуфинга хедеров хоста назначения); tls-вебсокет (в отличие от с-обфс это полноценный tls-трафик, который распознается любым вебсерверомреверспрокси и например позволяет настроить терминацию tls на серверах клаудфлер или в nginx); quic — работает через udp, но к сожалению производительность квика в в2рей очень низкая.
Из преимуществ по сравнению с симпл-обфс: в2рей-плагин без проблем работает через CF в хттп-вебсокет режиме с любым трафиком, в тлс-режиме представляет собой полноценный tls-трафик, требует для работы сертификаты (например от let’s encrypt или самоподписанный).
shadowsocksv2ray-plugin-http: download — 1404 mbits; upload 1938 mbits.
shadowsocksv2ray-plugin-tls: download — 1214 mbits; upload 1898 mbits.
shadowsocksv2ray-plugin-quic: download — 183 mbits; upload 384 mbits.
Как я уже сказал, в2рей умеет ставить хедеры, и таким образом с ним можно работать через реверс-проксиCDN (клаудфлер например). С одной стороны это усложняет обнаружение туннеля, с другой — может немного увеличить (а иногда снизить) лаг — тут все зависит от расположения вас и серверов. На данный момент CF тестирует работу с quic, но пока этот режим недоступен (по крайней мере для бесплатных аккаунтов).
shadowsocksv2ray-plugin-http+CF: download — 1284 mbits; upload 1785 mbits.
shadowsocksv2ray-plugin-tls+CF: download — 1261 mbits; upload 1881 mbits.
Cloak
Клок это результат дальнейшей разработки обфускатора GoQuiet. Симулирует TLS трафик, работает соответственно через TCP. На данный момент автор выпустил вторую версию плагина, cloak-2, которая существенно отличается от оригинального клока.
По информации разработчика, первая версия плагина использовала механизм tls 1.2 resume session, чтобы спуфать адрес назначения для tls. После выпуска новой версии (клок-2) все страницы вики на гитхабе, описывающие этот механизм были удалены, в текущем описании шифрованияобфускации упоминания этого отсутствуют. По описанию автора первая версия клок не используется из-за наличия “критических уязвимостей в крипто”. На момент проведения тестов была только первая версия клоак, бинарники ее все еще лежат на гитхабе, а кроме всего прочего, критические уязвимости не сильно важны, т.к. шэдоусокс точно так же шифрует трафик, как и без клока, и на крипто шэдоусокса влияния клоак не оказывает.
shadowsockscloak: download — 1533; upload — 1970 mbits
Kcptun
kcptun использует в качестве транспорта
Kcptun чертовски прожорлив, и запросто загружает на 100% 4 зионоядра при тестировании 1 клиентом. Кроме того, плагин “медленный”, а так же при работе через iperf3 не заканчивает тесты до конца. Ориентируемся по спидтесту в браузере.
shadowsockskcptun: download (speedtest) — 546 mbits; upload (speedtest) 854 mbits.
Заключение
Нужен простой быстрый ВПН, чтобы завернуть трафик всей машины? Тогда ваш выбор — ваергард. Хотите проксей (для избирательного туннелирования или разделения потоковвиртуальных персон) или вам важнее обфусцировать трафик от серьезных блокировок? Тогда смотрите на шэдоусокс с tlshttp обфускацией. Хотите быть уверены, что ваш интернет будет работать, пока работает интернет вообще? Выбирайте проксирование трафика через важные CDN, блокировка которых приведет к отвалу половины интернета в стране.
сводная таблица, сортировка по скачиванию
Источник: habr.com