WireGuard vs OpenVPN: сравнение протоколов
WireGuard и OpenVPN — два протокола, которые чаще всего предлагают потребительские VPN-сервисы. В этой статье они сравниваются по криптографической архитектуре, производительности, размеру кода, совместимости с платформами и операционным характеристикам — то есть по тем параметрам, которые определяют реальное поведение сервиса в продакшн-среде.
История протоколов
OpenVPN вышел в 2001 году и стал де-факто стандартом в коммерческих VPN-развёртываниях. Это open-source проект, написанный на C, работающий в пользовательском пространстве и использующий библиотеки OpenSSL или mbedTLS для криптографических операций. Долгий срок жизни и гибкость привели к появлению обширного набора функций и широкого спектра поддерживаемых конфигураций.
WireGuard значительно новее. Протокол был впервые опубликован в 2016 году и включён в ядро Linux в 2020 году. Он изначально проектировался как более простая альтернатива предшественникам: меньший объём кода, ограниченный набор современных криптографических примитивов и реализация в ядре на платформах, которые это поддерживают. Автор протокола, Jason A. Donenfeld, сформулировал цели проектирования вокруг проверяемости и производительности, а не настраиваемости.
Криптографическая архитектура
Два протокола существенно различаются подходом к криптографии. WireGuard поставляется с фиксированным набором алгоритмов; OpenVPN позволяет оператору выбирать из множества вариантов.
Фиксированный набор алгоритмов WireGuard
WireGuard использует единый набор шифров на основе современных примитивов: ChaCha20 для шифрования, Poly1305 для аутентификации, Curve25519 для обмена ключами, BLAKE2s для хеширования и SipHash24 для балансировки нагрузки. Handshake обеспечивает фреймворк Noise Protocol.
Фиксация набора алгоритмов имеет два следствия. Во-первых, она исключает согласование протокола, которое исторически служило источником атак на понижение версии в протоколах на основе TLS. Во-вторых, обновление криптографии требует выпуска новой версии протокола, а не смены конфигурации.
Гибкость конфигурации OpenVPN
OpenVPN поддерживает множество вариантов шифров через базовую TLS- библиотеку. Распространённые конфигурации включают AES-256-GCM для шифрования, SHA256 для аутентификации и ECDH для обмена ключами. В старых развёртываниях OpenVPN могут использоваться BF-CBC или AES-CBC с HMAC, которые по современным меркам значительно слабее.
Гибкость позволяет OpenVPN поддерживать устаревшие клиенты, однако требует аудита конфигурации, чтобы убедиться, что конкретное развёртывание использует надёжные настройки.
Производительность
WireGuard, как правило, превосходит OpenVPN на одинаковом оборудовании. Большую часть разницы объясняют два фактора.
Во-первых, WireGuard работает в ядре на Linux, macOS и Windows, что позволяет избежать накладных расходов на перемещение каждого пакета между ядром и пользовательским пространством. Реализация OpenVPN в пользовательском пространстве портативна, но несёт стоимость переключения контекста на каждый пакет.
Во-вторых, ChaCha20-Poly1305 хорошо подходит для процессоров без аппаратных инструкций AES, что характерно для мобильных устройств на базе ARM. OpenVPN обычно использует AES, который быстрее на аппаратуре с AES-NI, но медленнее в остальных случаях.
На практике WireGuard нередко обеспечивает более высокую пропускную способность, меньшую задержку и сниженную нагрузку на CPU по сравнению с OpenVPN на потребительских устройствах. Расход аккумулятора на мобильных устройствах также, как правило, ниже.
Размер кода и поверхность аудита
Размер кодовой базы примерно коррелирует с усилиями, необходимыми для её аудита на наличие уязвимостей. Эталонная реализация WireGuard состоит приблизительно из четырёх тысяч строк кода. Реализация в ядре Linux сопоставима по объёму.
OpenVPN, напротив, насчитывает около семидесяти тысяч строк и зависит от TLS-библиотеки — OpenSSL или mbedTLS, — которая добавляет ещё несколько сотен тысяч строк к границе доверия. Разница в размере сама по себе не означает, что WireGuard безопаснее, однако она влияет на полноту проверки реализации.
Совместимость с платформами
Оба протокола широко поддерживаются. WireGuard имеет официальные реализации для Linux (ядро и пользовательское пространство), Windows, macOS, iOS, Android, FreeBSD и OpenBSD. Поддержка iOS, в частности, хорошо интегрирована через фреймворк iOS Network Extension.
OpenVPN доступен практически на каждой платформе, включая устаревшие системы, на которые WireGuard не перенесён. Многие корпоративные сети используют OpenVPN для совместимости с унаследованной инфраструктурой.
Для новых развёртываний на современных операционных системах WireGuard является более очевидным выбором. Для сред, требующих широкой совместимости, — включая устаревшие системы, встраиваемые устройства или определённые корпоративные продукты, — OpenVPN сохраняет актуальность.
Модель конфигурации
Модель конфигурации WireGuard намеренно минималистична. Каждый узел имеет идентификатор на основе открытого ключа и список разрешённых IP. Нет аутентификации на уровне пользователя, нет состояния сессии на сервере и нет согласования keepalive. Протокол опирается на криптографическую идентичность, а не на логины и пароли.
OpenVPN поддерживает более гибкую модель аутентификации. Доступны аутентификация на основе сертификатов, аутентификация по логину и паролю, а также двухфакторная аутентификация. Эта гибкость полезна в корпоративных средах, где аутентификация интегрирована с каталожными службами.
Для потребительских VPN-сервисов, где пользователи не идентифицируют друг друга, более простая модель WireGuard, как правило, достаточна.
Когда использовать каждый из протоколов
Выбор между протоколами зависит от ограничений конкретного развёртывания.
- WireGuard предпочтителен, когда приоритетами являются производительность, простота кода и современная криптография; когда целевые платформы имеют нативную поддержку; и когда развёртывание может принять фиксированный набор шифров.
- OpenVPN предпочтителен, когда требуется совместимость с устаревшими системами; когда необходима интеграция с корпоративной аутентификацией; или когда развёртывание должно работать в сетях, ограничивающих UDP-трафик (OpenVPN поддерживает переключение на TCP; WireGuard — нет).
Многие современные потребительские VPN-сервисы предлагают оба протокола и позволяют пользователю выбирать. Snap VPN, напротив, использует исключительно WireGuard, интегрированный через фреймворк iOS Network Extension. Это решение отражает принцип проектирования, направленный на сокращение поверхности реализации до необходимого минимума для целевой платформы.
Для общего обзора принципов работы VPN см. наше введение в VPN. Для практической настройки на iPhone см. руководство по настройке iOS.