Сравнение производительности инструментов обхода блокировок VPN

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

Оставим тему эффективности, с точки зрения обхода 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 и в таких случаях, можно ориентироваться на спидтестфаст.

спидтест дает разные результаты

image

Инструментарий

Всего было протестировано 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 использует в качестве транспорта протокол KCP и в некоторых особых случаях позволяет достичь повышения пропускной способности. К сожалению (или к счастью) это во многом актуально для пользователей из КНР, часть мобильных операторов которой усиленно троттлит TCP и не трогает UDP.

Kcptun чертовски прожорлив, и запросто загружает на 100% 4 зионоядра при тестировании 1 клиентом. Кроме того, плагин “медленный”, а так же при работе через iperf3 не заканчивает тесты до конца. Ориентируемся по спидтесту в браузере.

shadowsockskcptun: download (speedtest) – 546 mbits; upload (speedtest) 854 mbits.

Заключение

Нужен простой быстрый ВПН, чтобы завернуть трафик всей машины? Тогда ваш выбор — ваергард. Хотите проксей (для избирательного туннелирования или разделения потоковвиртуальных персон) или вам важнее обфусцировать трафик от серьезных блокировок? Тогда смотрите на шэдоусокс с tlshttp обфускацией. Хотите быть уверены, что ваш интернет будет работать, пока работает интернет вообще? Выбирайте проксирование трафика через важные CDN, блокировка которых приведет к отвалу половины интернета в стране.

сводная таблица, сортировка по скачиванию

Leave a Reply

Your email address will not be published. Required fields are marked *