Как это работает: уникальный VPN-протокол от AdGuard

Годами мы концентрировались на разработке блокировщика AdGuard во всех возможных проявлениях: приложения, браузерные расширения, DNS. И вот два года назад мы, внезапно для многих, приняли решение разработать собственный VPN-сервис. И на это было несколько причин.

  • У наших мобильных приложений были проблемы совместимости с другими приложениями на основе VPN. Вот почему разработка собственного VPN виделась нам единственно возможным решением, гарантирующим совместимость: применив немного магии, мы добились того, что два приложения AdGuard могут работать в рамках одного VPN-туннеля.
  • Идея собственного VPN-сервиса прекрасно соотносится с нашей философией и принципами.
  • За годы работы над AdGuard мы стали экспертами в области фильтрации сетевого трафика. Это позволило нам предложить пользователям что-то новое, а не просто стать очередным безликим VPN.

С самого начала мы решили, что у AdGuard VPN будет одно важное отличие от конкурентов — мы будем использовать VPN-протокол собственной разработки, а не просто возьмём одно из готовых решений.

Зачем, спросите вы? В этой статье мы расскажем, что нас не устроило в существующих протоколах и почему мы разработали свой собственный, а также поделимся планами по его развитию. Спойлер: протокол AdGuard VPN сложнее обнаружить и он быстрее своих аналогов.

Но для начала нам нужно будет немного углубиться в технические детали и рассказать вам:

Как работает Интернет

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

Протокол IP

Наверняка вы слышали про IP-адреса? Так вот, IP-адрес — это часть «протокола IP», основного механизма передачи данных по сети. Каждый пакет состоит из трёх частей: IP-адреса отправителя и получателя, а также самих данных.

Получатель знает, кто отправитель, а значит может переслать свой пакет данных в ответ. Правда, «чистый» протокол IP практически не используется. Зато используются два других протокола, на нём основанных — TCP и UDP.

Протокол TCP

TCP — основная «рабочая лошадка» интернета. Когда вы открываете какой-то сайт, очень вероятно, что для передачи данных используется именно протокол TCP.

TCP-пакет состоит из четырёх частей:

  • Заголовок IP-пакета, включающий адрес отправителя и адрес получателя.
  • Номер порта отправителя и получателя. Эта цифра нужна, чтобы операционная система понимала, какой программе на обработку нужно передать пакет.
  • Порядковый номер пакета. Пакеты могут приходить получателю не в том порядке, в котором они были отправлены. Порядковые номера позволяют восстановить правильную последовательность.
  • Тип пакета. Это свойство нужно для реализации «гарантированной доставки», о которой речь пойдёт ниже.

Какую бы сеть вы ни использовали, есть вероятность, что часть отправленных пакетов может затеряться где-то по пути. Протокол TCP делает всё, чтобы они дошли до адресата: в ответ на каждый отправленный пакет получатель отправляет маленький TCP-пакет с подтверждением получения. Если отправитель не получил подтверждения, он будет повторно посылать пакет, пока подтверждение наконец не будет получено.

Протокол UDP

UDP — ещё один известный, хоть и менее популярный протокол на основе протокола IP. Единственное его отличие от IP в том, что помимо содержимого пакета и адресов отправителя и получателя он передаёт информацию о номерах портов (см. описание портов в разделе про TCP). Как видно на анимации, поток пакетов с данными движется быстрее, чем у TCP — и неудивительно, так как здесь подтверждать ничего не нужно. UDP, в отличие от TCP, ничего не гарантирует, но и не посылает лишних пакетов с подтверждением, за счёт чего может работать быстрее.

Как работают VPN-протоколы

Отправляя кому-то письмо, физическое или электронное, вы можете обойтись без содержимого, заголовка, подписи, но не адреса получателя. По такому же принципу работает интернет — чтобы отправлять данные, нужен IP-адрес.

Когда вы заходите на сайт, ему виден ваш IP-адрес, а зная его, несложно вычислить и местоположение пользователя. VPN позволяет вашим данным пройти через зашифрованное соединение от вашего дома/работы или смартфона до другой точки в интернете, возможно, в другой стране, а затем попасть в публичный интернет. Как кролик, незаметно ныряющий в нору, которая ведёт в Зазеркалье.

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

Думаю, это вы и так знали. А теперь давайте на самом деле углубимся в технические детали. Чтобы VPN работал, нужно каким-то образом передавать и шифровать данные от вашего устройства к VPN-серверу и обратно. Правила передачи и шифрования этих данных называются VPN-протоколом. Самые распространённые – это OpenVPN, WireGuard и IPSec. Все эти протоколы работают примерно одинаково, функционально они очень похожи, но дьявол в деталях (шифрования и установки соединения).

Рассмотрим, как устроена их механика. Допустим, вы хотите посетить сайт. Если у вас включен VPN, то VPN-сервер становится посредником между вами и сайтом. Сначала серверу посылается зашифрованный IP-пакет. VPN-сервер расшифровывает его, меняет «адрес отправителя» (то есть ваш IP) и отправляет пакет получателю (то есть сайту). Как правило, в качестве транспортного протокола для этой цели используется UDP: он в среднем «быстрее», поскольку не требует ожидания подтверждения.

В чём недостатки существующих VPN-протоколов

Все популярные VPN-протоколы (OpenVPN, WireGuard, IPSec и другие) объединяют два основных недостатка:

  • Их легко обнаружить и заблокировать на сетевом уровне.
  • При попытке их «скрыть» упадёт производительность.

Чтобы «скрыть» использование VPN, чаще всего поток данных «заворачивают» в TCP-соединение, а иногда дополнительно шифруют, чтобы сделать трафик похожим на соединение с обычным сайтом. К сожалению, у такого подхода есть проблема – из-за использования TCP появляется необходимость в дополнительном подтверждении доставки.

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

Чем хорош протокол AdGuard VPN

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

  • Его практически невозможно отличить от обычного HTTPS-трафика, то есть соединение с сервером AdGuard VPN выглядит так же, как и соединение с обычным сайтом.
  • Для шифрования мы используем HTTPS (TLS), который идеально справляется с этой задачей. Это самый популярный в мире способ шифрования, а библиотеки, которые его реализуют, постоянно проходят аудит безопасности.

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

  • Мы используем транспортный протокол HTTP/2, который делает так, чтобы протокол AdGuard VPN было практически невозможно обнаружить, и при этом сохраняется высокая скорость.
  • Протокол AdGuard VPN, в отличие от остальных, оперирует не пакетами, а данными. Это означает, что для каждого соединения AdGuard VPN устанавливает отдельный "туннель", каждому HTTP/2 stream соответствует одно соединение. По этому туннелю AdGuard VPN передает данные. Это позволяет нам ускорить работу за счет экономии на подтверждающих пакетах, ведь мы можем объединить данные нескольких пакетов в один перед отправкой на VPN-сервер (или с сервера на клиент). А чем меньше пакетов, тем меньше подтверждений нужно.

Наши планы на будущее

Переход на HTTP/3

Первым делом, мы планируем перейти на использование протоколов HTTP/3 и QUIC для связи с сервером. HTTP/3 – это следующая, более современная версия HTTP. К сожалению, новые протоколы не повлияют на скорость в случае хорошего стабильного соединения, но их преимущества проявятся, когда соединение будет хуже – например, на мобильных устройствах или при подключении к Wi-Fi в общественных местах. Явных преимуществ у новых протоколов несколько – с ними не будет ретрансляции (повторной передачи пакета) и очередей с блокировкой заголовка строки (Head of Line Blocking или HoLB), а ещё они позволят использовать миграцию соединения (connection migration). Если не вдаваться в технические подробности, из этих преимуществ вытекает главное – уже упомянутое улучшение качества связи в неидеальных условиях.

TCP и другие протоколы, работающие поверх него (TLS, SSL, HTTP /1.1 и HTTP/2), существуют давно и мастерски справляются со своей задачей, но есть одно но: для их бесперебойной работы должны быть условия, близкие к идеальным. Это означает, что хорошо они работают в сети со стабильным и высоким качеством связи (скажем, домашняя сеть Wi-Fi). Но выходя во внешний мир с его мобильными сетями, вы не можете уберечь себя от слабого сигнала, медленного соединения и других бед, провоцирующих потери пакетов. А эти потери ведут к ретрансляции и HoLB, которые мы уже упоминали. Даже 5G не всесилен, и связь будет хуже в лифтах и длинных перегонах метро. С VPN over HTTP/3 проблема чудесным образом решается: VPN-соединение не будет рваться, даже если вы зайдёте в лифт, или сеть поменяется по другой причине.

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

Открытый исходный код

Если вы давно знакомы с AdGuard, то уже знаете, как много у нас продуктов с открытым кодом. Нам близка концепция открытого программного обеспечения (open-source software), потому что такие проекты помогают людям и способствуют развитию технологий. Но при этом мы не забываем о конфиденциальности и делаем продукты открытыми там, где это возможно.

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


Наш протокол добавлен во все мобильные и десктопные приложения AdGuard VPN. Скачайте любой продукт (или несколько!) уже сейчас и пользуйтесь, зная, что ваши данные защищены самым надёжным образом. А если захотите, рассказывайте нам о впечатлениях — в комментариях к посту или в социальных сетях.

Andrey Meshkov для AdGuard VPN Полезное
29 июня 2021 г.
Загружая комментарии, вы соглашаетесь с условиями использования и политикой конфиденциальности.
AdGuard 1.9.19 для Safari: поддержка M1 и обновлённый конвертер правил
Возвращаемся к новостям расширения AdGuard для Safari. Хотя последний раз мы освещали его релиз довольно давно, всё это время продукт рос и развивался. Рассказываем, что появилось в последнем обновлении.
Загрузка AdGuard началась! Нажмите на кнопку, на которую указывает стрелка, чтобы начать установку программы. Спасибо за выбор AdGuard! Выберите «Открыть», нажмите «OK» и дождитесь загрузки файла. В открывшемся окне перетащите значок AdGuard в папку «Приложения». Спасибо за выбор AdGuard! Выберите «Открыть», нажмите «OK» и дождитесь загрузки файла. В открывшемся окне нажмите «Установить». Спасибо за выбор AdGuard!