Протоколы VPN по поколениям и шесть проверок для выбора

Антон Белов

12 мин чтенияТехнологии

Поколения протоколов VPN

Протокол VPN — это набор правил, по которым работают приложение и сервер. Правила описывают, как стороны получают общий ключ, как упаковывают пакеты и что видит сеть по пути. Каждый протокол решал задачу своего времени. В 1990-х это был модемный доступ к сети офиса. Сейчас это работа в сетях, где VPN распознают по первым байтам. Ниже протоколы собраны по поколениям, а в конце — шесть проверок для выбора.

Протоколы различаются рукопожатием, транспортом и приметами

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

Рукопожатие задаёт ключи сеанса

Приложение и сервер проверяют друг друга и выводят общий ключ сеанса ещё до первого байта ваших данных. WireGuard хватает одного сообщения в каждую сторону, а IKEv2 нужно четыре сообщения в сумме. OpenVPN проводит полное рукопожатие TLS внутри собственного служебного канала. Чем меньше обменов, тем быстрее подключение на линиях, где каждый ответ идёт долго. Типичные примеры — спутниковый интернет и перегруженная мобильная сеть.

Потери пакетов замедляют туннель поверх TCP

UDP отправляет каждый пакет один раз и не проверяет доставку. TCP ждёт подтверждения для отправленных данных. Без подтверждения в срок TCP отправляет данные заново и снижает скорость. В туннеле поверх TCP таких слоёв два, один внутри другого. Слой туннеля пересылает пропавший пакет, и на это уходит время. Тем временем соединение браузера внутри туннеля считает пакет потерянным. Оно отправляет свою копию и тоже снижает скорость. В итоге страницы грузятся неравномерно, с паузами. Поэтому WireGuard работает только по UDP. Его разработчики пишут, что режима TCP не будет, потому что TCP внутри TCP работает плохо. Минус этого решения — в сети с закрытым UDP WireGuard не подключится.

Сеть видит приметы протокола, а не содержимое

Провайдер не может прочитать содержимое туннеля. Ему видны порт, длина первых сообщений и поля заголовка, которые идут открытым текстом. Вместе эти детали и составляют приметы протокола. Некоторые системы фильтрации ещё и сами подключаются к подозрительному серверу и проверяют ответ. Старые протоколы создавали без расчёта на такие проверки. У новых протоколов от примет зависит всё устройство.

10 протоколов VPN с 1990-х до 2020-х

Новые протоколы не вытеснили старые. PPTP до сих пор есть в прошивках роутеров, а L2TP и IKEv2 — в настройках Windows и macOS. В таблице у каждого протокола указаны десятилетие и исходная задача.

ПротоколКогда появилсяКакую задачу решал
PPTP1990-еДовести модемное подключение до сети офиса через интернет
L2TP/IPsecРубеж 2000-хЗаменить фирменный PPTP открытым стандартом и поручить шифрование IPsec
OpenVPN2000-еДать любой системе туннель на TLS, которому хватает одного порта
IKEv2/IPsec2000-еБыстрее договариваться о ключах и не рвать сеанс при смене сети
SSTP2000-еПроходить через сети, где наружу открыт только HTTPS
Shadowsocks2010-еУбрать из потока все приметы
WireGuard2010-еСделать туннель компактным, а код — достаточно коротким для проверки
VLESS + REALITY2020-еВыглядеть как HTTPS-соединение с настоящим известным сайтом
Hysteria22020-еДержать скорость на линиях с потерями и выглядеть как HTTP/3
XHTTP2020-еПередавать данные обычными HTTP-запросами, в том числе через CDN

PPTP и L2TP/IPsec — протоколы модемной эпохи

PPTP

PPTP создали, чтобы сотрудник с модемом подключался к сети офиса через интернет. Он переносит PPP — протокол модемных подключений к провайдеру. Спецификацию PPTP (RFC 2637) опубликовали в 1999 году. Служебный канал идёт по TCP-порту 1723, а данные — внутри GRE. У GRE нет портов, поэтому в домашних роутерах до сих пор есть пункт «PPTP Passthrough».

Брюс Шнайер и Питер Затко (Mudge) описали слабости PPTP в 1998–1999 годах. В 2012 году доклад на DEF CON показал, что перехваченный вход MS-CHAPv2 зависит от одного ключа DES. Такой ключ подбирают перебором за обозримое время. Ключ шифрования MPPE выводится из тех же данных входа, поэтому его 128 бит не помогают. Microsoft тогда же посоветовала не полагаться на MS-CHAPv2 без дополнительной защиты. С тех пор PPTP не считают защищённым протоколом.

L2TP/IPsec

L2TP (RFC 2661, 1999) собрали из идей PPTP и протокола L2F от Cisco. Своего шифрования у L2TP нет, поэтому его почти всегда запускают внутри IPsec (RFC 3193, 2001). Пакет получает два слоя — сначала L2TP, потом IPsec. Каждый слой добавляет свои байты, и настраивать приходится оба. Ключи согласуются по UDP-порту 500, а данные идут по UDP 4500 или отдельным протоколом ESP. По этим портам связку видно сразу, и её закрывают несколькими правилами на файрволе.

В 2008 году Microsoft выпустила SSTP — он заворачивает тот же PPP в HTTPS на TCP-порту 443. Снаружи такое соединение похоже на обычный заход на сайт. Оно проходит через файрволы, открытые только для веб-трафика. Из настольных и мобильных систем встроенный клиент SSTP есть только в Windows.

У IKEv2, OpenVPN и WireGuard надёжное шифрование и заметные приметы

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

IKEv2/IPsec

IKEv2 договаривается о ключах за четыре сообщения, а у IKEv1 было восемь вариантов начального обмена. На телефонах и ноутбуках IKEv2 ценят за расширение MOBIKE (RFC 4555). С MOBIKE ноутбук может уйти с офисного Wi-Fi на раздачу с телефона. Туннель при этом переходит на новый адрес без повторного входа. Клиент IKEv2 встроен в iOS, macOS, Windows и Android 11 и новее. Отдельное приложение для IKEv2 на этих системах не нужно. Сеть узнаёт IKEv2 по тем же портам UDP 500 и 4500.

OpenVPN

OpenVPN — открытый проект со своим протоколом, RFC у него нет. Рукопожатие идёт по TLS, а данные обычно защищает AES-GCM. OpenVPN работает по UDP или TCP на любом порту, а в реестре IANA за ним числится порт 1194. Он встроен во многие роутеры, и настройки туда обычно загружают одним файлом .ovpn. Слабое место OpenVPN — собственный заголовок в каждом пакете. Тип сообщения в нём не зашифрован, а каждый сеанс начинается одинаково. В 2022 году исследователи проверили это в сети действующего провайдера. Они находили OpenVPN в общем потоке, не расшифровав ни байта.

WireGuard

Джейсон Доненфельд представил WireGuard на конференции NDSS в 2017 году. В 2020 году WireGuard вошёл в ядро Linux версии 5.6. Набор шифров у него один и не настраивается — Curve25519, ChaCha20-Poly1305 и BLAKE2s в схеме Noise. Поэтому выбрать слабый вариант по ошибке нельзя. На пакеты без правильного ключа сервер не отвечает. Снаружи не видно, что сервер вообще есть.

Зато приметы есть у трафика клиента. Первое сообщение рукопожатия всегда занимает 148 байт, а ответ — 92 байта. Тип сообщения записан открытым текстом. Сайт проекта прямо пишет, что WireGuard не занимается обфускацией и оставляет её отдельному слою. В открытых сетях WireGuard работает хорошо, а в сетях с фильтрацией его быстро находят.

VLESS + REALITY, XHTTP, Hysteria2 и Shadowsocks скрывают приметы VPN

Эти протоколы создавали для сетей, где VPN-соединения ищут и блокируют. Шифруют они так же надёжно, как протоколы выше. Главная их задача — приметы, которые не выделяются на фоне обычного трафика. Устроены они как прокси: клиент называет серверу адрес назначения, и сервер передаёт туда соединение. Трафик всего устройства направляет в них приложение. Подробнее об этой разнице — в нашем сравнении VPN и прокси.

VLESS + REALITY

VLESS — компактный протокол, его сейчас развивает проект Xray. Он передаёт серверу идентификатор клиента и адрес назначения. Данные при этом обычно шифрует TLS. REALITY выдаёт соединение за визит на настоящий сторонний сайт. В первом пакете наблюдатель видит имя этого сайта. Дальше идёт обычное рукопожатие TLS 1.3, и сертификат в нём уже зашифрован. Свой домен и сертификат серверу не нужны. Система фильтрации, которая подключится к серверу без ключа, получит ответ настоящего сайта. REALITY пересылает такие соединения прямо на этот сайт.

XHTTP

XHTTP — транспорт Xray, в первых версиях он назывался SplitHTTP. Он делит данные на части и передаёт их в HTTP-запросах. В одном из режимов исходящие данные уходят серией запросов POST. Входящие в том же режиме приходят одним длинным ответом на GET. HTTP-посредник или сеть доставки контента (CDN) видит в этом обычный веб-трафик. Поэтому сервер может работать за чужой инфраструктурой, как многие сайты.

Hysteria2

Hysteria2 работает на QUIC (RFC 9000) — том же транспорте поверх UDP, что и HTTP/3. При подключении клиент сообщает ширину своего канала. Hysteria2 передаёт данные с этой скоростью и досылает потерянные пакеты, не снижая её. Это помогает на линиях с частыми потерями, например на мобильном интернете в поезде. Тот, кто подключается без пароля, видит обычный сайт на HTTP/3. В зависимости от настроек сервер отдаёт страницу 404, файлы или другой сайт. В сети без UDP Hysteria2 не работает.

Shadowsocks

Shadowsocks появился в 2012 году и остаётся самым старым и самым простым из четырёх. Это зашифрованный прокси без заголовков и узнаваемого рукопожатия с первого же байта. На Shadowsocks построен Outline от команды Jigsaw. На Outline основано приложение Ben's VPN. Три других протокола этой группы копируют приметы обычного веб-трафика. Поток Shadowsocks не похож ни на один известный протокол. Но полное отсутствие примет — тоже примета. В 2023 году исследователи описали систему фильтрации, которая отсекала такие соединения после нескольких простых проверок. Проверки касались только первого пакета. Поэтому в сетях со строгой фильтрацией одного Shadowsocks мало.

Алгоритм выбора протокола — шесть проверок по порядку

Универсального протокола VPN нет, выбор зависит от вашей сети и задачи. Идите по проверкам сверху вниз. Обычно протокол определяет первая проверка, которая к вам относится.

  1. Первым решает владелец сервера

    К рабочей или учебной сети подключайтесь профилем, который выдал администратор. Для своего сервера проще всего настроить WireGuard. Ему хватает пары ключей и короткого файла настроек. У VPN-сервиса протокол обычно выбирает его приложение.

  2. Сеть с фильтрацией исключает IKEv2, OpenVPN и WireGuard

    Сеть, которая ищет приметы VPN, распознаёт IKEv2, OpenVPN и WireGuard. В открытой сети все три протокола работают без проблем. В сети с фильтрацией нужны протоколы, похожие на обычный трафик, например VLESS + REALITY, XHTTP и Hysteria2.

  3. Сети без UDP нужен протокол поверх TCP

    В некоторых компаниях и университетах файрвол открыт только для сайтов. Признак такой сети — страницы грузятся, а WireGuard или IKEv2 не подключаются. Здесь нужен протокол поверх TCP, например VLESS + REALITY, XHTTP или OpenVPN по TCP на порту 443.

  4. При частой смене сети подходят IKEv2 и WireGuard

    Дома телефон работает через Wi-Fi, на улице — через мобильный интернет. Его адрес меняется по нескольку раз в день. IKEv2 с MOBIKE сохраняет туннель при такой смене. WireGuard тоже справляется и автоматически принимает новый адрес клиента. Приложения VPN-сервисов обычно переподключаются после каждой смены.

  5. Звонкам и играм лучше подходит UDP

    В разговоре потерю короткого фрагмента звука почти не слышно, а задержку замечают сразу. Подходящие протоколы поверх UDP — например, WireGuard и Hysteria2. TCP сначала ждёт повтора пропавшего пакета, и звук начинает отставать.

  6. Роутер ограничен своей прошивкой

    Если прошивка поддерживает OpenVPN, выбирайте OpenVPN, а не PPTP. PPTP оставьте на случай, когда прошивка больше ничего не поддерживает. Даже тогда он годится только для смены страны, например для телевизора.

Приложение Ben's VPN выбирает протокол автоматически

VLESS + REALITY, XHTTP, Hysteria2 и Shadowsocks — четыре протокола, на которых работает Ben's VPN. Вместе с протоколом приложение выбирает и маршрут. Переключателя протоколов на экране нет. Вы выбираете только локацию. Провайдер видит соединение с сервером, но не то, что идёт внутри. Версии приложения под разные системы собраны на странице о VPN для всех устройств.

Главный экран Ben's VPN на iPhone с подключением к Германии, кнопкой «Отключить» под жёлтой B и рядом «Локация», «Туннель», «Поддержка»
Вы выбираете локацию, протокол выбирает приложение

При плохом соединении приложение показывает плашку «Плохое соединение». На плашке есть кнопка «Исправить проблему». Она предлагает другую локацию или поиск рабочего сервера. Поиск заново проверяет сервер и получает новые IP-адреса. Если это не помогает, приложение включает мультихоп через промежуточный сервер в третьей стране. Весь поиск занимает до двух минут. Та же кнопка «Найти рабочий сервер» есть в разделе «Аккаунт» → «Настройки».

Keenetic, OpenWrt и MikroTik запускают приложение Ben's VPN на самом роутере. Остальным роутерам доступны только протоколы из их прошивки. Для них в личном кабинете, в разделе «Роутер» → «Другие модели», есть настройки PPTP и OpenVPN. Один логин и пароль подходят к обоим протоколам. Пользоваться ими одновременно может только один роутер. Если провайдер в России блокирует оба протокола, попробуйте второй адрес из файла .ovpn — это OpenVPN по TCP. Другой вариант — поставить приложение на сами устройства. Пошагово настройка описана на странице о роутерах.

Вопросы и ответы

Что такое обфускация VPN и чем она отличается от шифрования?

Шифрование прячет содержимое, и без ключа пакеты не прочитать. Обфускация прячет сам факт, что соединение — это VPN. Она подгоняет размеры, порядок и вид пакетов под обычный трафик. WireGuard шифрует хорошо, но обфускации у него нет. REALITY и Hysteria2 добавляют обфускацию поверх шифрования.

Что поставить на свой сервер — WireGuard или OpenVPN?

В сети, которая не блокирует UDP и VPN, WireGuard проще настроить, и подключается он быстрее. OpenVPN гибче и работает по UDP или TCP на любом порту. Это помогает в сетях, где пропускают только TCP. В сетях с фильтрацией оба протокола узнают по приметам.

Мультихоп — это отдельный протокол?

Нет, мультихоп — это маршрут, а не протокол. Сначала трафик попадает на промежуточный сервер в третьей стране, а оттуда — на сервер выбранной локации. Мультихоп меняет путь трафика, а не шифрование. В Ben's VPN режим «Автоматически» включает мультихоп, когда это нужно для стабильного соединения.

Поможет ли другой протокол, если мобильный интернет работает по белому списку?

Нет. Белый список пропускает соединения только к разрешённым адресам. Протокол здесь ничего не меняет, важен адрес назначения. В Ben's VPN для такого случая есть мультихоп через Россию — «Аккаунт» → «Настройки» → «Мультихоп» → «Россия». В этом режиме трафик идёт через сервер в России, и большинство локаций недоступны. Гарантий, что режим сработает в любой сети, нет. Если соединение станет хуже, верните режим «Автоматически». Ещё о белых списках — на отдельной странице.

Сначала 3 дня на пробу, решение потом

Пробный период стоит $0.50 и открывает все 187 стран и все приложения. После него подписка продлевается за $5 в месяц. Продление можно отключить в личном кабинете в любой момент.

Mac App Store App Store Google Play