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

Профиль по четырём осям
Оценки сравнительные, в пределах этой таблицы: 100 — лучший показатель среди рассмотренных протоколов, а не абсолютная величина.
| Год появления | 2016, в ядре Linux с версии 5.6 (2020) |
|---|---|
| Транспорт | Только UDP |
| Шифрование | ChaCha20-Poly1305, обмен ключами Curve25519 |
| Хеширование | BLAKE2s, HKDF для выработки сеансовых ключей |
| Объём кода | Около 4000 строк против сотен тысяч у OpenVPN |
| Рукопожатие | Полтора круга сообщений, обычно менее 100 мс |
| Смена ключей | Автоматическая каждые 2 минуты активной сессии |
Пакет не копируется в пользовательское пространство и обратно. Это убирает два переключения контекста на каждый пакет и даёт основной прирост скорости относительно OpenVPN.
Каждому публичному ключу сопоставлен список разрешённых адресов. Пакет с чужого ключа отбрасывается молча, отдельных списков доступа и правил аутентификации не нужно.
Сервер узнаёт клиента по ключу, а не по адресу. Переход с Wi-Fi на мобильную сеть не рвёт туннель: следующий же пакет с нового адреса продолжает ту же сессию.
Набор криптопримитивов зафиксирован в спецификации. Договариваться не о чем, значит нельзя и продавить соединение на слабый шифр — целый класс атак отпадает.
Кодовая база OpenVPN вместе с OpenSSL — это сотни тысяч строк. Аудит такого объёма занимает месяцы и стоит десятки тысяч долларов, а результат устаревает с каждым релизом. WireGuard умещается примерно в четыре тысячи строк, и это осознанное проектное ограничение, а не случайность.
Малый объём достигнут отказом от гибкости. В протоколе нет выбора шифров, нет поддержки сертификатов, нет режимов совместимости со старым оборудованием, нет собственной системы управления пользователями. Всё, что можно было вынести наружу, вынесено наружу.
Практическое следствие для пользователя: меньше кода — меньше поверхности для ошибок и быстрее реакция на найденные проблемы. Обратная сторона — задачи вроде выдачи и отзыва ключей приходится решать внешними средствами, сам протокол об этом ничего не знает.
В классических решениях аутентификация и маршрутизация разнесены: сначала пользователь доказывает, кто он, потом отдельная подсистема решает, куда его пускать. WireGuard объединяет эти шаги. Каждому публичному ключу сопоставлен список адресов, и это одновременно правило доступа и правило маршрута.
Работает это в обе стороны. Исходящий пакет уходит тому узлу, чей список покрывает адрес назначения. Входящий пакет проверяется наоборот: если расшифрованный пакет пришёл с адреса, которого нет в списке для этого ключа, он отбрасывается без ответа.
Побочный эффект — протокол не отвечает на пакеты, которые не проходят криптографическую проверку. Для стороннего сканера порт выглядит закрытым: обращение просто уходит в пустоту. Это не маскировка, но заметно снижает интерес автоматических сканеров.
Сервер идентифицирует собеседника не по IP-адресу, а по публичному ключу в пакете. Когда телефон уходит из домашнего Wi-Fi в сотовую сеть и получает другой внешний адрес, сервер видит знакомый ключ с нового адреса и просто обновляет запись.
Разрыва сессии при этом не происходит: TCP-соединения внутри туннеля продолжают жить, потому что внутренний адрес не менялся. Загрузка файла или видеозвонок переживают переход, теряя лишь несколько пакетов на время смены сети.
Для узла за NAT предусмотрен служебный обмен раз в 25 секунд — он удерживает запись в таблице трансляции провайдера. По умолчанию он выключен, потому что нужен не всем и добавляет 32 байта в каждые полминуты плюс небольшой расход батареи.
Главная слабость — узнаваемость. Первый байт каждого пакета несёт тип сообщения из четырёх возможных значений, рукопожатие состоит из сообщений фиксированной длины 148 и 92 байта. Правило, отличающее такой поток от прочего UDP, пишется в одну строку и не требует расшифровки.
Вторая слабость следует из выбора транспорта. UDP не имеет встроенного контроля перегрузки на уровне протокола, поэтому при нехватке полосы оборудование ограничивает именно его в первую очередь. На перегруженной сети туннель может держаться, но отдавать вчетверо меньше ожидаемого.
Третье — приватность конфигурации. Файл настроек содержит адрес сервера, порт, приватный ключ клиента и назначенный ему внутренний адрес открытым текстом. Утечка такого файла означает не только компрометацию ключа, но и раскрытие всей топологии.
Транспорт выбирается в настройках клиента одним пунктом, доплаты за него нет. Если WireGuard в вашей сети перестал подниматься, соседний протокол обычно работает — переключение занимает секунды и не требует переустановки.
Подписка оформляется в Telegram-канале сервиса · Безлимитный трафик · Поддержка круглосуточно