Информационная безопасность
Сетевые технологии
7 декабря 2019

Сравнение производительности инструментов обхода блокировок\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.

В данном материале я не стану детально затрагивать вопрос “как лучше спрятать трафик чтобы не отключили”, потому что обход блокировок это мера реактивная — мы подстраиваемся под то, что использует цензор, и действуем исходя из этого.

Результаты


Strongswan\ipsec


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

download - 993 mbit\s; upload - 770 mbit\s


SSH-туннель


Про использование SSH в качестве инструмента туннеля не писал наверное только ленивый. Из минусов — “костыльность” решения, т.е. разворачивать его из удобного красивого клиента на каждой платформе не получится. Из плюсов — хорошая производительность, нет необходимости вообще что-то устанавливать на сервере.

download - 1270 mbit\s; upload - 1140 mbit\s

OpenVPN


ОпенВПН тестировался в 4 режимах работы: tcp, tcp+sslh, tcp+stunnel, udp.

Серверы ОпенВПН были настроены автоматически, установкой streisand.

Насколько можно судить, на данный момент только режим работы через станнел является устойчивым к продвинутым DPI. Причина аномального повышения пропускной способности при заворачивании опенВПН-tcp в станнел мне не ясна, проверки делались в несколько заходов, в разное время и разные дни, результат был таким же. Возможно это связано с настройками сетевого стека устанавливаемыми при разворачивании стрейзанд, пишите если есть идеи почему так.

openvpn\tcp: download - 760 mbit\s; upload - 659 mbit\s


openvpn\tcp+sslh: download - 794 mbit\s; upload - 693 mbit\s


openvpn\tcp+stunnel: download - 619 mbit\s; upload - 943 mbit\s


openvpn\udp: download - 756 mbit\s; upload - 580 mbit\s


Openconnect


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

download - 895 mbit\s; upload 715 mbit\s


Wireguard


Хайповый инструмент, пользующийся популярностью у западных пользователей, разработчики протокола даже получили какие-то гранты на развитие от фондов защиты. Работает как модуль ядра линукс, через UDP. С недавних пор появились клиенты для windows\ios.

Задумывался создателем как простой быстрый способ смотреть нетфликс находясь не в штатах.

Отсюда плюсы и минусы. Плюсы — очень быстрый протокол, относительная простота установки\настройки. Минусы — разработчик изначально не создавал его с целью обхода серьезных блокировок, и потому ваергард запросто детектится простейшими инструментами, в т.ч. wireshark.

протокол wireguard в wireshark

download - 1681 mbit\s; upload 1638 mbit\s


Что интересно, ваергард-протокл используется в стороннем клиенте tunsafe, который при использовании с тем же сервером ваергард, дает гораздо более худшие результаты. Вполне вероятно, что и windows-клиент ваергарда будет показывать такие же результаты:

tunsafe\client: download - 1007 mbit\s; upload - 1366 mbit\s


OutlineVPN


Аутлайн это имплементация шэдоусокс сервера и клиента с красивым и удобным гуем от гугловского jigsaw. В windows, клиент аутлайн представляет собой просто набор оберток для бинарников shadowsocks-local (клиент shadowsocks-libev) и badvpn (tun2socks бинарник, направляющий весь трафик машины в локальный socks-прокси).

Когда-то шэдоусокс был устойчив к великому китайскому фаерволлу, но судя по последним отзывам, сейчас это уже не так. В отличе от шэдоусокс, «из коробки» не поддерживает подключение обфускации через плагины, но это можно сделать ручками, повозившись с сервером и клиентом.

download - 939 mbit\s; upload - 930 mbit\s


ShadowsocksR


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

Существуют форки ssR на libev и чем-то еще. Низкая пропускная способность вероятно обусловлена кодом\языком. Оригинальный шэдоусокс на питоне не сильно быстрее.

shadowsocksR: download 582 mbit\s; upload 541 mbit\s.


Shadowsocks


Китайский инструмент обхода блокировок, рандомизирующий трафик и прочими замечательными способами мешающий автоматическому анализу. До недавнего времени не блочился GFW, говорят, что сейчас блочится, только если включать UDP-реле.

Кроссплатформенный (есть клиенты под любую платформу), поддерживает работу с PT по типу торовских обфускаторов, есть несколько своих или адаптированных к нему обфускаторов, быстрый.

Есть куча имплементаций клиентов и серверов шэдоусокс, на разных языках. В тестировании в качестве сервера выступал shadowsocks-libev, клиенты — разные. Самым быстрым линукс-клиентом оказался shadowsocks2 на go, распространяемый в качестве дефолтного клиента в streisand, насколько производительнее shadowsocks-windows сказать не могу. В большинстве дальнейших тестов в качестве клиента использовался именно shadowsocks2. Скрины с тестированием чистого shadowsocks-libev не делались, из-за очевидного отставания данной реализации.

shadowsocks2: download - 1876 mbit\s; upload - 1981 mbit\s.


shadowsocks-rust: download - 1605 mbit\s; upload - 1895 mbit\s.


Shadowsocks-libev: download — 1584 mbit\s; upload — 1265 mbit\s.

Simple-obfs


Плагин к шэдоусокс, сейчас в статусе “depreciated” но все еще работает (хотя и не всегда хорошо). Во многом вытеснен плагином v2ray-plugin. Обфусцирует трафик или под хттп-вебсокет (и позволяет спуфать хедеры\хост назначения, делая вид что ты идешь смотреть не порнхаб, а например, сайт конституции рф) или под псевдо-tls (псевдо, потому что не использует никаких сертификатов, простейшие DPI типа бесплатного nDPI детектят как “tls no cert”. В tls-режиме спуфать хедеры уже не получается).

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

shadowsocks\s-obfs-tls: download - 1618 mbit\s; upload 1971 mbit\s.


shadowsocks\s-obfs-http: download - 1582 mbit\s; upload - 1965 mbit\s.


Симпл-обфс в хттп режиме также может работать через реверс-прокси CDN (например, cloudflare), таким образом для нашего провайдера трафик будет выглядеть как хттп-плейнтекст трафик до cloudflare, это позволяет чуть лучше спрятать наш туннель, а заодно разделить точку входа и выхода трафика — провайдер видит что твой трафик идет в сторону ip-адреса CDN, а экстремистские лайки на картинках проставляются в этот момент c ip-адреса VPS. Надо сказать что именно с-обфс через CF работает неоднозначно, периодически неоткрывая некоторые хттп-ресурсы например. Так, потестить аплоад используя iperf через shadowsocks\s-obfs+CF не удалось, но судя по результатам спидтеста, пропускная способность на уровне shadowsocks\v2ray-plugin-tls+CF. Скринов с iperf3 не прикладываю, т.к. на них ориентироваться не стоит.

download (speedtest) - 887; upload (speedtest) - 1154.


Download (iperf3) — 1625; upload (iperf3) — N\A.

v2ray-plugin


V2ray-plugin пришел на замену симпл-обфс в качестве основного “официального” обфускатора для сс-либев. В отличие от симпл-обфс его пока нет в репозиториях, и нужно или качать заранее собранный бинарник, или компилять самому.

Поддерживает 3 режима работы: дефолтный, хттп-вебсокет (с поддержкой спуфинга хедеров хоста назначения); tls-вебсокет (в отличие от с-обфс это полноценный tls-трафик, который распознается любым вебсервером\реверспрокси и например позволяет настроить терминацию tls на серверах клаудфлер или в nginx); quic — работает через udp, но к сожалению производительность квика в в2рей очень низкая.

Из преимуществ по сравнению с симпл-обфс: в2рей-плагин без проблем работает через CF в хттп-вебсокет режиме с любым трафиком, в тлс-режиме представляет собой полноценный tls-трафик, требует для работы сертификаты (например от let’s encrypt или самоподписанный).

shadowsocks\v2ray-plugin-http: download - 1404 mbit\s; upload 1938 mbit\s.


shadowsocks\v2ray-plugin-tls: download - 1214 mbit\s; upload 1898 mbit\s.


shadowsocks\v2ray-plugin-quic: download - 183 mbit\s; upload 384 mbit\s.


Как я уже сказал, в2рей умеет ставить хедеры, и таким образом с ним можно работать через реверс-прокси\CDN (клаудфлер например). С одной стороны это усложняет обнаружение туннеля, с другой — может немного увеличить (а иногда снизить) лаг — тут все зависит от расположения вас и серверов. На данный момент CF тестирует работу с quic, но пока этот режим недоступен (по крайней мере для бесплатных аккаунтов).

shadowsocks\v2ray-plugin-http+CF: download - 1284 mbit\s; upload 1785 mbit\s.


shadowsocks\v2ray-plugin-tls+CF: download - 1261 mbit\s; upload 1881 mbit\s.


Cloak


Клок это результат дальнейшей разработки обфускатора GoQuiet. Симулирует TLS трафик, работает соответственно через TCP. На данный момент автор выпустил вторую версию плагина, cloak-2, которая существенно отличается от оригинального клока.

По информации разработчика, первая версия плагина использовала механизм tls 1.2 resume session, чтобы спуфать адрес назначения для tls. После выпуска новой версии (клок-2) все страницы вики на гитхабе, описывающие этот механизм были удалены, в текущем описании шифрования\обфускации упоминания этого отсутствуют. По описанию автора первая версия клок не используется из-за наличия “критических уязвимостей в крипто”. На момент проведения тестов была только первая версия клоак, бинарники ее все еще лежат на гитхабе, а кроме всего прочего, критические уязвимости не сильно важны, т.к. шэдоусокс точно так же шифрует трафик, как и без клока, и на крипто шэдоусокса влияния клоак не оказывает.

shadowsocks\cloak: download - 1533; upload - 1970 mbit\s


Kcptun


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

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

shadowsocks\kcptun: download (speedtest) - 546 mbit\s; upload (speedtest) 854 mbit\s.


Заключение


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

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


+34
15,1k 228
Комментарии 55