Протоколы
WireGuard
Современный UDP-протокол VPN с минималистичной криптографией, разработанный Джейсоном Доненфельдом. Стандарт де-факто для self-hosted VPN.
Определение
WireGuard — это VPN-протокол, работающий поверх UDP, спроектированный с приоритетом простоты, скорости и аудитопригодности. Первый стабильный релиз — 2018 год; включён в Linux mainline с ядра 5.6 (2020). Автор — Jason A. Donenfeld. Опубликовано под лицензией GPL-2.0; код всей реализации — менее 4000 строк (сравнение: OpenVPN — около 100 000 строк).
WireGuard работает по модели «каждый peer знает публичный ключ другого peer’а». Нет CA, нет рукопожатий уровня TLS, нет переговоров о cipher suite — всё статически определено в протоколе.
Криптография
WireGuard использует фиксированный набор примитивов без переговоров — это и сила, и ограничение. Стек:
- Curve25519 — Diffie-Hellman для обмена ключами.
- ChaCha20-Poly1305 — AEAD для шифрования и аутентификации payload.
- BLAKE2s — хэш-функция.
- SipHash24 — для индексов сессий.
- HKDF — для деривации ключей.
- Noise Protocol Framework (паттерн IK) — для structure of handshake.
Криптонабор нельзя поменять — если в нём найдётся уязвимость, апгрейд требует обновления и клиента, и сервера. С другой стороны — нет downgrade-атак, нет неудачных переговоров, нет cipher-агильности.
Handshake
Полный handshake WireGuard — 1 RTT и 2 UDP-пакета. Шаги:
- Initiator → Responder. Initiator шлёт ephemeral-публичный ключ + ephemeral-id + AEAD-encrypted timestamp. Сообщение типа
0x01, длина 148 байт. - Responder → Initiator. Responder шлёт свой ephemeral-публичный ключ + подтверждение. Тип
0x02, длина 92 байта.
После этого начинается обмен пакетами с данными (тип 0x04). Через каждые 2 минуты или после 2³⁵ байт идёт rekey (refresh-handshake).
Кейп-alive — пакет 32 байта каждые 25 секунд для поддержания NAT-трансляции.
WireGuard и DPI
Главная проблема WireGuard в условиях агрессивного DPI — статическая wire-сигнатура. ТСПУ и аналогичные системы ловят:
- Длину первого UDP-пакета (148 байт) с типом 0x01.
- Характерные тайминги handshake.
- 32-байтные keepalive каждые 25 секунд.
На середину 2026 в РФ-сетях классический WG нестабилен на мобильных операторах — handshake режется в первые секунды, либо туннель работает 2-3 минуты и обрывается. Решения:
- AmneziaWG — форк WG с рандомизированными заголовками и junk-пакетами.
- WireGuard через wstunnel / udp2raw — UDP в TCP/TLS, ломает UDP-сигнатуру, но проигрывает в скорости.
- WireGuard внутри Shadowsocks UDP — двойная упаковка.
Для self-hosted сценариев в России WG в чистом виде в 2026 году подходит только для домашнего/корпоративного интернета без активного DPI; для мобильного — нужен AWG или другой обход.
Где используется
WireGuard — основа большинства коммерческих VPN и self-hosted решений 2026.
- Коммерческие VPN: Mullvad, IVPN, NordVPN (NordLynx), Surfshark, Proton VPN (через offering).
- Self-hosted: Tailscale, Headscale, Netbird, WireGuard-Easy.
- Routers: OpenWrt, MikroTik RouterOS 7, AsusWRT.
- Mobile: официальные приложения WireGuard для iOS/Android.
Tailscale и аналогичные mesh-сети используют WG как транспорт + свой control plane для key distribution.
Производительность
На современном CPU WireGuard насыщает гигабитный канал на одном ядре и опережает OpenVPN/IPsec в 2-3 раза по throughput. Сравнение (Intel Xeon E-2276G, 1 Gbps NIC):
- WireGuard: 940 Mbps, ~12% CPU.
- OpenVPN (UDP+AES-GCM-256): 380 Mbps, ~85% CPU.
- IPsec / IKEv2: 670 Mbps, ~30% CPU.
Преимущество — kernel-режим в Linux и небольшой crypto stack. На VPS большинство overhead’а вообще скрывается за NIC offload.
Источники
- WireGuard whitepaper — wireguard.com/papers/wireguard.pdf.
- Linux Kernel WireGuard documentation — Documentation/networking/wireguard.rst.
- RFC draft-wireguard (informational, 2020).
Связанные термины
- AmneziaWG — форк WG для обхода DPI.
- OpenVPN — главный «конкурент» в нише.
- DPI — что ловит классический WG.
- Kill Switch — обязательная обвязка для WG-клиентов.