Блог Маяка

AmneziaWG и WireGuard: в чём разница

Короткий ответ: AmneziaWG — это WireGuard, у которого изменён внешний вид пакетов. Внутри всё то же самое: те же ключи, то же рукопожатие, то же шифрование. Снаружи соединение перестаёт выглядеть как WireGuard — и это единственное, но решающее отличие. Ниже — что именно меняется, что остаётся прежним и чем за это приходится платить.

Почему WireGuard узнаётся с первого пакета

WireGuard устроен экономно: у него всего четыре типа сообщений, и тип написан в первом байте каждого пакета — 1, 2, 3 или 4. Размеры служебных пакетов тоже постоянные: у пакета, которым начинается соединение, длина всегда одна и та же. Этой пары признаков достаточно, чтобы опознать протокол, не расшифровывая ни байта содержимого: первый байт равен единице, длина совпадает — значит, это WireGuard.

Для оборудования, которое разбирает трафик в сети оператора, это подарок. Ему не нужно ломать шифрование — достаточно посмотреть на форму пакета. Дальше решение принимается по политике: пропустить, замедлить или уронить. Именно поэтому «у меня VPN просто перестал работать в этой сети» звучит так часто: перестало работать не шифрование, а узнаваемость.

Что меняет AmneziaWG

AmneziaWG — форк WireGuard от команды Amnezia. Он оставляет протокол как есть и добавляет к нему слой маскировки. Что происходит при подключении:

  • Мусорные пакеты перед рукопожатием. Клиент отправляет несколько датаграмм случайной длины со случайным содержимым. Полезных данных в них нет вовсе — их задача в том, чтобы новый поток не начинался с узнаваемого пакета.
  • Случайные типы вместо 1, 2, 3, 4. Числа, обозначающие тип сообщения, заменяются значениями из заранее согласованных диапазонов — свой диапазон на каждый тип. Проверка «первый байт равен единице» перестаёт что-либо значить.
  • Переменная длина. К служебным пакетам добавляется случайный паддинг, поэтому «всегда одинаковый размер рукопожатия» тоже перестаёт быть признаком.
  • Сигнатурные пакеты. Первое, что видит сеть, можно сделать похожим на начало другого, повседневного протокола — например, на первый пакет QUIC, которым браузер открывает обычный сайт.

Всё это — параметры соединения, а не отдельный протокол: их согласуют обе стороны, и менять их можно, не переписывая ни клиент, ни сервер.

Что при этом НЕ меняется

Это место чаще всего понимают неправильно, поэтому скажем прямо: обфускация не трогает криптографию. Остаются те же ключи X25519, то же рукопожатие Noise IK, тот же шифр ChaCha20-Poly1305 — всё, за что WireGuard уважают. Маскировка работает снаружи конверта, а не внутри письма.

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

Чем приходится платить

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

Как это устроено у Маяка

Мы используем AmneziaWG 3.1 на всех выходах. Параметры маскировки приложение не придумывает и человек не вписывает: их выдаёт сервер вместе с настройками подключения, каждой линии — свои. Это позволяет менять рисунок соединения централизованно, когда в какой-то сети он перестаёт проходить, и не просить людей ничего перенастраивать.

Одной маскировки, впрочем, мало. Бывают сети, где не проходит и она — тогда приложение само переключается на другой путь к серверу: через промежуточный вход или через обычное защищённое веб-соединение. Как устроен этот перебор, мы разобрали в статье «Одна кнопка, три пути».

Короткие ответы

AmneziaWG — это то же самое, что WireGuard? Криптографически — да: те же ключи X25519, то же рукопожатие Noise IK, то же шифрование ChaCha20-Poly1305. Отличается только внешний вид пакетов в сети.

Обфускация ослабляет шифрование? Нет. Она меняет форму пакета снаружи и не трогает криптографию внутри; в мусорных пакетах полезных данных нет вовсе.

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

AmneziaWG медленнее? На установленном соединении разница невелика — несколько десятков байт паддинга на пакет. Заметная часть расходов приходится на начало соединения.

Зачем это нужно, если WireGuard и так шифрует трафик? Шифрование прячет содержимое, но не сам факт, что соединение — WireGuard. Обфускация убирает опознавательные признаки, по которым протокол определяют, не читая содержимого.

Если коротко: WireGuard отвечает за то, чтобы ваш трафик нельзя было прочитать. AmneziaWG добавляет к этому то, чтобы его нельзя было опознать. Первое без второго в сложных сетях иногда не работает вовсе.

WireGuard — зарегистрированный товарный знак Jason A. Donenfeld. Mayak Networks не аффилирован с WireGuard LLC и не одобрен ею. AmneziaWG — проект команды Amnezia, распространяется на условиях открытой лицензии.

Попробовать Маяк

AmneziaWG 3.1 на всех выходах, параметры маскировки раздаёт сервер, а если не проходит и она — приложение само найдёт другой путь. 7 дней бесплатно, карта не нужна.

Аккаунт заводится прямо в приложении. Доступ открывает подтверждённая почта — 7 дней бесплатно.