WireGuard — это VPN-протокол, то есть набор правил, по которым два устройства договариваются и строят между собой зашифрованный туннель. Главное его отличие от предшественников — размер: около четырёх тысяч строк кода там, где у OpenVPN и IPsec их сотни тысяч.

Появился он как ответ на усталость от этих двух: решения зрелые, но громоздкие, конфигурация занимает десятки строк, а разбор проблем требует отдельной квалификации. Джейсон Доненфельд предложил другую идею — протокол, который помещается в голову целиком.

Результат оказался убедительным настолько, что в 2020 году WireGuard включили в ядро Linux 5.6, а затем и в ядра FreeBSD, OpenBSD и Windows-драйвер. Сегодня это протокол по умолчанию у большинства VPN-сервисов, включая DCore.

Главная идея: меньше кода — меньше ошибок

Кодовая база OpenVPN вместе с зависимостями от OpenSSL — это сотни тысяч строк. IPsec/IKEv2 в реализации strongSwan сопоставим. WireGuard укладывается примерно в 4000 строк.

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

Компактность достигается радикальным сокращением возможностей:

  • Нет согласования шифров. Криптографический набор зафиксирован в спецификации.
  • Нет поддержки TCP. Только UDP.
  • Нет встроенной аутентификации по логину и паролю. Только пары ключей.
  • Нет динамической выдачи адресов. IP-адреса прописываются в конфигурации.

Всё, что можно было вынести наружу, вынесено наружу.

Криптография без выбора

В OpenVPN стороны договариваются о шифре при подключении. Это гибко и позволяет годами поддерживать старые клиенты — но именно механизмы согласования исторически были источником атак с понижением защиты (downgrade), когда атакующий вынуждает стороны выбрать слабый вариант.

WireGuard устраняет проблему, убирая сам выбор. Набор примитивов зафиксирован:

Задача Примитив
Обмен ключами Curve25519 (ECDH)
Шифрование данных ChaCha20
Аутентификация данных Poly1305
Хеширование BLAKE2s
Хеширование ключей HKDF

Если завтра один из примитивов будет скомпрометирован, договариваться внутри протокола не станут — выйдет новая версия. Такой подход называется cryptographic versioning, и он же применяется в современных протоколах вроде Noise, на фреймворке которого WireGuard и построен.

Отдельно стоит отметить ChaCha20: этот шифр быстр на процессорах без аппаратного ускорения AES — то есть на большинстве мобильных устройств и дешёвых роутеров. Именно поэтому WireGuard часто ощутимо быстрее на телефоне, чем протоколы, полагающиеся на AES-NI.

Почему WireGuard быстрый

Скорость складывается из трёх факторов.

Работа в пространстве ядра. OpenVPN — процесс в пользовательском пространстве: каждый пакет проходит через границу «ядро → приложение → ядро», а это переключения контекста и копирование памяти. WireGuard в Linux работает как модуль ядра, и пакет обрабатывается там же, где принят.

Простое рукопожатие. Установка соединения — это 1-RTT: один запрос и один ответ. Для сравнения, OpenVPN на TLS требует нескольких обменов, что заметно на высоких задержках.

Отсутствие лишних слоёв. Никакого TCP поверх TCP, никакой избыточной инкапсуляции.

На практике на канале 1 Гбит/с WireGuard упирается в пропускную способность канала на оборудовании, где OpenVPN выдаёт 200–400 Мбит/с.

Роуминг: соединение переживает смену сети

WireGuard не хранит состояние «соединения» в привычном смысле. Сервер определяет пир по ключу, которым подписан входящий пакет, а не по IP-адресу отправителя. Адрес источника просто обновляется при получении корректного пакета.

Практическое следствие: когда телефон переключается с Wi-Fi на мобильную сеть, туннель не разрывается — следующий пакет придёт с нового адреса, и сервер это примет. Пользователь не замечает переключения. В OpenVPN такая смена обычно означает переустановку соединения.

Что WireGuard делает плохо

Честный разбор требует упомянуть слабые места.

Протокол легко опознать. Заголовок WireGuard имеет фиксированную структуру: первый байт пакета указывает тип сообщения, дальше идут поля предсказуемой длины. Системам анализа трафика достаточно нескольких байт, чтобы классифицировать поток как WireGuard. Там, где VPN-трафик фильтруется, это критично — и именно эту проблему решает AmneziaWG.

Только UDP. Если в сети разрешён исключительно TCP-трафик через прокси — например, в корпоративной сети со строгой политикой, — WireGuard не подключится вовсе.

IP-адрес пира хранится на сервере. Для работы криптоключевой маршрутизации сервер держит таблицу соответствия «публичный ключ → разрешённые IP». Это не история посещений и не логи, но формально — состояние, привязанное к пользователю. Сервисы, которым важна политика no-logs, решают это отдельными средствами: например, размещением на серверах без постоянного диска.

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

Когда выбирать WireGuard

WireGuard — правильный выбор по умолчанию, если сеть не фильтрует VPN-трафик:

  • домашний и мобильный интернет без ограничений;
  • задачи, где важна скорость: видео в высоком разрешении, загрузка больших файлов, облачные игры;
  • мобильные устройства, где важна экономия батареи — меньше работы процессора означает меньше расхода;
  • связь между серверами и офисами.

Если же трафик анализируется и WireGuard блокируется, разумнее переключиться на протокол с маскировкой. В DCore обе опции доступны в рамках одной подписки: базовый WireGuard даёт максимальную скорость, а при проблемах с подключением можно перейти на протокол с обфускацией без доплаты.

Коротко

WireGuard выиграл за счёт отказа от универсальности. Он не умеет всего, что умеет OpenVPN, — и именно поэтому работает быстрее, потребляет меньше ресурсов и проще проверяется на ошибки. Для повседневного использования это лучший компромисс между скоростью и защищённостью, а недостающую скрытность добавляют надстройки поверх него.