Обновить

Поддержка AmneziaWG в Wiresock Secure Connect: маскировка WireGuard-трафика или избыточность?

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров7.3K

В каком-то смысле эта статья является продолжением цикла материалов о реализации WireGuard-клиента на базе Cloudflare BoringTun и пользовательского пакетного фильтра на Windows. Такой подход отличается от классического для VPN-клиентов, где обычно используется виртуальный сетевой интерфейс. Вместо этого WireGuard-интеграция происходит в пространстве пользователя — с перехватом и инъекцией пакетов напрямую в сетевой стек Windows.

У этой архитектуры есть ряд ощутимых преимуществ:

  • высокая производительность;

  • отсутствие необходимости модифицировать системную маршрутизацию;

  • возможность работы поверх уже активного VPN-соединения;

  • изоляция и предсказуемость поведения.

Для тех, кому интересна подобная архитектура, стоит отметить, что аналогичный подход недавно был реализован и в ExpressVPN для Windows — в рамках протокола Lightway Turbo, использующего прямое взаимодействие с сетью в обход TCP/IP стека Windows.

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

Я получил довольно много откликов с просьбой реализовать поддержку AmneziaWG в WireSock Secure Connect, и эта возможность была недавно добавлена. В этом материале я разберу, как работает AmneziaWG, в чём заключаются его сильные и слабые стороны, и в каких случаях его применение действительно оправдано.

Что такое AmneziaWG

AmneziaWG — это модификация WireGuard-протокола, направленная на усложнение анализа трафика системами DPI. В отличие от стандартного WireGuard, AmneziaWG реализует несколько уровней маскировки:

  • Добавляет мусорные пакеты перед handshake — тем самым "прогревает" UDP-соединение, создавая фон до установления VPN-туннеля. Эта опция может использоваться независимо от типа сервера и прекрасно работает даже с классическим WireGuard.

  • Модифицирует теги типов пакетов, делая их менее узнаваемыми для DPI.

  • Добавляет мусорные данные в handshake, маскируя его по критерию размера, чтобы handshake не выделялся своей предсказуемой длиной.

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

Архитектурные замечания

На мой взгляд, текущий подход AmneziaWG — не самый удачный с архитектурной точки зрения. Манипуляции с тегами и handshake могли бы происходить после шифрования, “снаружи” от WireGuard, в виде отдельного прокси-сервера. Это дало бы следующие преимущества:

  • Возможность использовать быстрые реализации, например, официальный WireGuardNT вместо WireGuard-go с обфускацией на уровне прокси;

  • Упрощение поддержки — не требуется патчить драйверы или библиотеки;

  • Более гибкая архитектура с возможностью включать/отключать маскировку на уровне маршрутизации.

Однако, что сделано — то сделано. В какой-то степени AmneziaWG уже стал “де-факто” стандартом, поэтому я реализовал его поддержку как отдельную ветку BoringTun и интегрировал её в WireSock.

Self-hosted опыт и практические наблюдения

В реальных условиях self-hosted AmneziaWG показывает стабильную работу и высокую устойчивость к блокировкам. Благодаря маскировке handshake-пакетов и подмене тегов, трафик становится менее предсказуемым для систем DPI — особенно в странах с жёсткой интернет-фильтрацией.

Если вы хотите развернуть AmneziaWG на собственном VPS, сделать это можно буквально за несколько минут с помощью скрипта amneziawg-install, созданного сообществом.

⚠️ Рекомендуется перед установкой:

  • Обновить систему до актуальной версии;

  • Выполнить перезагрузку сервера.

Установка шаг за шагом

Скачайте скрипт с помощью curl или wget:

curl -O https://raw.githubusercontent.com/Varckin/amneziawg-install/main/amneziawg-install.sh
wget https://raw.githubusercontent.com/Varckin/amneziawg-install/main/amneziawg-install.sh

Выдайте права на выполнение:

chmod +x amneziawg-install.sh

Запустите скрипт:

./amneziawg-install.sh

Скрипт задаст несколько вопросов, после чего сам:

  • установит ядро и утилиты AmneziaWG;

  • сконфигурирует сервер;

  • создаст systemd-сервис;

  • сгенерирует конфигурацию клиента.

Для управления клиентами (добавление/удаление) просто запустите скрипт повторно.

Готовый конфиг можно использовать в клиентах WireSock Secure Connect, Amnezia VPN, а также в любых других, совместимых с AmneziaWG.

Простой обход блокировок с junk-пакетами

Однако, как показывает практика, во многих случаях полный функционал AmneziaWG может и не понадобиться. Более лёгкий и универсальный способ маскировки VPN-трафика — это инъекция junk-пакетов в стандартный WireGuard. Такая техника не требует изменений в протоколе, драйверах или библиотеках, а реализация может быть выполнена на уровне пользователя, что делает её значительно проще для развёртывания и сопровождения.

Суть метода — добавление псевдослучайных UDP-пакетов до или во время установления VPN-сессии, создавая "шум" вокруг handshake и регулярного трафика. Это снижает вероятность классификации DPI-системами и часто помогает пройти начальные фильтры.

На практике этот подход достаточен для обхода многих целевых блокировок, особенно в тех случаях, где провайдер не использует сложные алгоритмы поведения или stateful DPI.

Пример из жизни: обход блокировки Cloudflare Warp

Одним из ярких примеров является ситуация с блокировкой Cloudflare Warp в сетях Ростелекома. Несмотря на то что трафик Warp проходит по WireGuard-протоколу, провайдер успешно идентифицирует handshake и обрывает соединение.

Тем не менее, добавление junk-пакетов позволяет обойти это ограничение, даже при использовании стандартного WireGuard-конфига, сгенерированного, например, через wgcf. Поддержка junk-трафика реализована во многих клиентах, в том числе в WireSock Secure Connect, где её можно включить для стандартного Wireguard сервера без каких-либо изменений в его настройках.

Wiresock Secure Connect Network Settings
Wiresock Secure Connect Network Settings

Этот подход особенно ценен:

  • при использовании публичных или "чужих" серверов, где невозможно установить AmneziaWG;

  • при необходимости быстро переключаться между профилями и инфраструктурами.

Таким образом, инъекция junk-пакетов — это быстрый и лёгкий способ усилить устойчивость WireGuard к блокировке, который в ряде случаев оказывается достаточным без необходимости в более сложных решениях.

Заключение

В условиях ужесточающейся фильтрации трафика и роста популярности DPI-решений всё больше пользователей ищут гибкие, надёжные и технически прозрачные способы сохранить доступ к интернету. AmneziaWG — один из таких инструментов, предлагающий реальное повышение устойчивости за счёт модификации handshake и структуры пакетов. И здесь я хочу отдать должное команде разработчиков, которые проделали большую работу и сделали решение доступным для сообщества.

Хотя, повторюсь, реализация в виде отдельного прокси без глубокой интеграции в WireGuard была бы, на мой взгляд, более универсальной и гибкой.

В то же время, как показывает практика, во многих сценариях достаточно более лёгких решений, таких как инъекция junk-пакетов в стандартный WireGuard. Такой подход проще в реализации, не требует изменений в протоколе и значительно легче в обслуживании, что делает его оптимальным выбором в большинстве типовых кейсов.

Добавление поддержки AmneziaWG в WireSock Secure Connect открывает дополнительную гибкость — особенно для пользователей, работающих в сложных сетевых условиях, — при этом не жертвуя производительностью и простотой.

Если вам интересна архитектура клиента, детали реализации или вы хотите обсудить практические кейсы и конфигурации — присоединяйтесь к нашему сообществу в Telegram:
👉 t.me/wiresock

Будем рады вашему опыту, вопросам и предложениям!

Теги:
Хабы:
Всего голосов 14: ↑14 и ↓0+15
Комментарии14
+14
Закрыть

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Оставляя свою почту, я принимаю Политику конфиденциальности и даю согласие на получение рассылок

Комментарии 14

Я верно понимаю что можно на VPS использовать стандартный WireGuard что идет в репозитории Debian или Ubuntu, а в клиенте включить только добавление junk-пакетов и все будет работать?

Судя по личным наблюдениям и отчетам пользователей, в подавляющем большинстве случаев этого пока оказывается достаточно.

А под Линукс есть такие клиенты?

Думаю под Линуксом можно использовать PreUp-скрипт в конфигурации wg-quick

1. Скрипт send-noise.sh

Создайте файл /usr/local/bin/send-noise.sh со следующим содержимым:

#!/bin/bash

# Адрес и порт WireGuard-сервера
ENDPOINT_IP="1.2.3.4"
ENDPOINT_PORT="51820"

# Отправить 5 случайных пакетов по UDP
for i in {1..5}; do
head -c 100 /dev/urandom | nc -u -w1 "$ENDPOINT_IP" "$ENDPOINT_PORT"
sleep 0.2
done

exit 0

Сделайте скрипт исполняемым:

chmod +x /usr/local/bin/send-noise.sh

2. Настройка wg0.conf

Откройте /etc/wireguard/wg0.conf и добавьте строчку PreUp:

[Interface]
PrivateKey = ...
Address = ...
PreUp = /usr/local/bin/send-noise.sh

[Peer]
PublicKey = ...
Endpoint = 1.2.3.4:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Важно: ENDPOINT_IP и ENDPOINT_PORT в скрипте должны соответствовать Endpoint из [Peer].

3. Подключение

sudo wg-quick up wg0

Перед началом хендшейка WireGuard отправит 5 псевдослучайных UDP-пакетов на сервер, что может помочь обойти фильтрацию или имитировать предварительный трафик.

Не тестировал, но выглядит правдоподобно.

Круто, попробую!

Кстати, в xray есть встроенный клиент wireguard, а также нечто под названием "udp noise", что вроде бы тоже оно, но заставить работать не получилось.

Ну а теперь послушаем автора что же спасет от white-list

Лыжи под мышку — и в сторону заката ☺️

Были у меня сервера в кремниевой долине. Недавно потерял к ним доступ из рф. Ркн тупо залочил все порты и протоколы кроме icmp.

Через промежуточные европейские сервера коннектится к ним.

Так что WG Amnezia с мусором не факт что будет работать. Сейчас ркн будет резать хитрее - что они не знают, то блокируют.

Сочувствую. Конечно, при наличии неограниченных ресурсов со стороны DPI можно реализовать практически любой уровень контроля над трафиком — вплоть до полноценного DLP на уровне всей страны. Всё упирается исключительно в объём доступных технических и человеческих ресурсов.

Хочу указать ссылку на оригинал данного скрипта установки https://github.com/RomikB/amneziawg-install. Печально когда форкают не сохраняя никаких ссылок на оригинал.

Не очень понял, а в чём состоит подход с прокси?

Идея заключается в том, чтобы применять обфускацию поверх уже зашифрованных пакетов, а не внедрять её напрямую в реализацию протокола. В таком подходе обфускатор можно было бы вынести в отдельный компонент — например, в UDP-прокси. В случае с Amnezia это, к сожалению, невозможно.

Т.е. "Client --wireguard--> Proxy --obfuscuted--> Server --> Internet"? Где Proxy — в подцензурной сети, Server — вне, а идея схемы — чтобы клиенту не нужен был особый клиент?

Да, смысл именно в этом. Если бы реализация обфускации была внешней по отношению к протоколу Wireguard все было бы несколько проще. В частности, мне не пришлось бы впиливать дополнительные параметры непосредственно в BoringTun. Если в подходе Amnezia и есть смысл, то только маркетинговый.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Читают сейчас

Истории

Рождённые в СССР
Топ-7 годных статей из блогов компаний
Старт гонки разработчиков
Торопись в сезон Open source
С Днём радио!
Космос ждёт

Работа

Ближайшие события

28 мая
QA Meetup SberHealth
МоскваОнлайн
5 июня
Конференция TechRec AI&HR 2025
МоскваОнлайн
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область