Amnezia VPN под капотом: архитектура клиента, протоколы и настройка сервера

1711
Amnezia VPN под капотом: архитектура клиента, протоколы и настройка сервера

После нажатия кнопки установки Amnezia не просто создает VPN-профиль. Клиент подключается к VPS по SSH, ставит Docker, собирает или загружает контейнеры, генерирует ключи, публикует сетевой порт и сохраняет параметры подключения на устройстве. По сути перед нами графический оркестратор для персональной VPN-инфраструктуры, а не еще одна оболочка над WireGuard.

Материал предназначен для легального и ответственного применения. Соблюдайте законы страны, где используете VPN, включая требования российского законодательства. Не применяйте инструкции для несанкционированного доступа, слежки, атак, взлома, нарушения правил сервисов или незаконного обхода ограничений.

Что клиент делает с VPS

Основная кодовая база AmneziaVPN написана на C++ с интерфейсом Qt и QML. Платформенные модули взаимодействуют с VPN API Windows, Android, iOS, macOS и Linux, а серверную часть клиент разворачивает удаленно. Исходный код открыт по лицензии GPLv3.

Последовательность при создании Self-hosted VPN выглядит примерно так.

  1. Клиент проверяет SSH-доступ и права пользователя.
  2. Определяет дистрибутив Linux, архитектуру процессора и доступные системные команды.
  3. Устанавливает Docker, если движок контейнеров отсутствует.
  4. Создает рабочие каталоги, обычно внутри /opt/amnezia, а также отдельную Docker-сеть.
  5. Запускает контейнер выбранного протокола с сетевыми привилегиями.
  6. Генерирует ключи и другие параметры, нужные конкретному протоколу.
  7. Сохраняет клиентскую конфигурацию и создает виртуальный сетевой интерфейс на устройстве.

Каждый установленный протокол работает в отдельном контейнере. AmneziaWG, WireGuard, XRay и OpenVPN не объединяются в один демон. Изоляция упрощает обновление и удаление компонентов, но не превращает контейнеры в жесткую границу безопасности. VPN-компонентам нужен доступ к TUN, маршрутам, модулям ядра и сетевым правилам. В зависимости от версии и протокола контейнер получает NET_ADMIN, доступ к модулям либо более широкие привилегии.

Для автоматической установки нужен KVM-сервер с публичным IPv4. Официально поддерживаются Ubuntu 22.04 или 24.04, Debian 12 или 13, архитектура x86-64, не менее 1 ГБ памяти и 10 ГБ диска. OpenVZ, LXC, ARM64 и сервер без публичного IPv4 для штатной установки не подходят. Пользователь должен войти как root либо через учетную запись с беспарольным полным sudo.

После установки я проверяю сервер вручную. Зеленый индикатор говорит лишь о том, что приложение считает подключение активным.

sudo docker ps --format 'table {{.Names}}t{{.Status}}t{{.Ports}}'
 sudo docker network ls
 sudo ss -lntup
 ip -4 route
 sudo nft list ruleset
 

В списке обычно видны контейнеры с именами вроде amnezia-awg, amnezia-awg2, amnezia-xray или amnezia-openvpn. Названия менялись между выпусками, поэтому команды из старых инструкций нельзя копировать вслепую. Если контейнер постоянно перезапускается, полезнее посмотреть его журнал.

sudo docker ps -a
 sudo docker logs --tail 100 ИМЯ_КОНТЕЙНЕРА
 sudo docker inspect ИМЯ_КОНТЕЙНЕРА
 

Частая ошибка установки с кодом 202 связана не с VPN-туннелем, а со сборкой контейнера. Docker может не скачать базовый образ, репозиторий Linux оказывается недоступен с VPS, заканчивается место либо хостинг блокирует обращения к внешним registry. Ручное изменение Dockerfile обычно маскирует причину и усложняет следующее обновление.

Какие протоколы доступны сейчас

Протокол Где используется Транспорт Главное ограничение
AmneziaWG 3 Amnezia Premium и Amnezia Free UDP Пока недоступен для штатного Self-hosted и несовместим с AmneziaWG 2
AmneziaWG 2 Self-hosted UDP Не поможет при полной блокировке UDP или адреса VPS
XRay VLESS Reality Self-hosted и Premium Обычно TCP Чувствителен к неверным SNI, flow и параметрам транспорта
WireGuard Self-hosted и импорт конфигураций UDP Хорошо распознается по сетевому профилю
OpenVPN Self-hosted и импорт конфигураций UDP или TCP Выше накладные расходы, стандартный трафик проще классифицировать

В старых описаниях Amnezia встречаются IKEv2, Shadowsocks и OpenVPN over Cloak. Репозиторий по-прежнему содержит связанные компоненты и упоминания, но актуальная документация Self-hosted предлагает прежде всего AmneziaWG, XRay VLESS Reality, WireGuard и OpenVPN. Рассчитывать на наличие старого протокола в новом интерфейсе без проверки конкретной сборки не следует.

AmneziaWG сохраняет криптографическое ядро WireGuard. Для обмена ключами используется Curve25519, для шифрования ChaCha20 с Poly1305, для хеширования BLAKE2s. Разработчики не заменяли проверенную криптографию собственным шифром. Изменения затрагивают внешний вид пакетов и временной профиль соединения.

Обычный WireGuard использует несколько типов сообщений с предсказуемыми заголовками и размерами. Сетевой фильтр может распознать такой поток без расшифровки содержимого. AmneziaWG меняет значения заголовков, добавляет дополнение и отправляет перед рукопожатием служебные пакеты.

Параметр Jc задает число мусорных пакетов, а Jmin и Jmax задают диапазон их размеров. Поля S1-S4 меняют длину разных типов сообщений. Диапазоны H1-H4 заменяют стандартные числовые заголовки WireGuard. Последовательности I1-I5 позволяют отправить перед рукопожатием заданные или случайные байты, например для имитации другого UDP-протокола.

AmneziaWG 3 добавляет защиту низкоэнтропийных полей заголовка, дополнительное заполнение полезной нагрузки и настраиваемые интервалы повторного рукопожатия. Третья версия не просто расширяет конфигурационный файл. Клиент AmneziaWG 2 не сможет подключиться к серверу AmneziaWG 3. Отдельное приложение AmneziaWG на момент проверки третью версию также не поддерживает. Нужен универсальный AmneziaVPN 5.0.0.5 или новее либо совместимый клиент DefaultVPN.

Текущий релиз клиента добавил поддержку AmneziaWG 3, встроенное обновление настольных версий, расширенные поля VLESS, контейнеры MTProxy и Telemt. Поддержка в клиенте не означает, что каждый компонент уже доступен для личного VPS.

XRay работает иначе. VLESS представляет собой легковесный протокол идентификации и передачи потока, а шифрование и маскировку обеспечивает транспорт Reality. Неавторизованное подключение должно выглядеть как обращение к обычному TLS-узлу, что усложняет активное зондирование. XRay часто полезнее AmneziaWG в сетях, где UDP ограничен.

Расширенные поля VLESS требуют осторожности. Клиент получил настройки flow, SNI, host, path и проверку значений, но документация Self-hosted пока советует самостоятельно менять только порт и SNI. Несовпадение параметров клиента и сервера полностью ломает подключение.

Маркетинговую формулировку «VPN невозможно обнаружить» я считаю неверной. Обфускация убирает простые сигнатуры, но оператор сети может анализировать адрес VPS, длительность сессии, объемы пакетов, характер UDP-потока и результаты активного сканирования. Самый совершенный транспорт не спасет сервер, если провайдер заблокировал его IP.

Маршруты, DNS и ключи доступа

Amnezia поддерживает раздельную маршрутизацию по IPv4-адресам и приложениям, но возможности различаются между платформами. Android умеет направлять выбранные приложения и адреса как через VPN, так и мимо туннеля. Windows поддерживает оба режима для IP, а для программ разрешает только исключения. На iOS, macOS и Linux маршрутизация работает по IPv4, но не по приложениям.

Правило для домена не остается динамическим. Клиент разрешает имя в текущий набор IPv4-адресов и сохраняет результат. CDN может через несколько часов выдать другие адреса. Крупные сервисы используют тысячи узлов и общие облачные подсети, поэтому правило для YouTube, Discord или Telegram может захватить посторонний трафик либо перестать работать.

Клиент заявляет поддержку только IPv4. При этом на Linux нельзя полностью отключать подсистему IPv6 командой net.ipv6.conf.all.disable_ipv6=1, поскольку кнопка подключения может перестать работать. Старый совет «выключите IPv6 через sysctl» для Amnezia опасен. Правильнее проверить маршруты и работу туннеля, а при необходимости ограничить IPv6 правилами файрвола, не отключая поддержку ядра.

ip -4 route
 ip -6 route
 ip -4 route get 1.1.1.1
 ip -6 route get 2606:4700:4700::1111
 resolvectl status
 nslookup myip.opendns.com resolver1.opendns.com
 

AmneziaDNS запускает резолвер внутри Docker-сети сервера. DNS-запросы клиента проходят через VPN, а резолвер по умолчанию обращается к Cloudflare по защищенному соединению. Локальный провайдер перестает видеть обычные DNS-запросы, но доверие переносится на владельца VPS и внешний DNS-сервис. AmneziaDNS не превращает сервер в публичный открытый резолвер.

KillSwitch блокирует интернет при неожиданном обрыве туннеля. Проверять функцию нужно на реальном разрыве, а не по положению переключателя. Можно запустить непрерывный запрос, перезапустить контейнер и посмотреть, не восстановился ли обычный маршрут раньше VPN.

ping 1.1.1.1
 
 sudo docker restart ИМЯ_КОНТЕЙНЕРА
 

Самая недооцененная часть Amnezia связана с ключами доступа. Полный ключ vpn:// дает не только возможность подключиться к VPN, но и управление сервером. Владелец полного ключа может ставить и удалять протоколы, менять настройки и получить фактический контроль над VPS. Такой ключ нельзя просто отозвать. После утечки придется менять пароль сервера и удалять установленные конфигурации.

Гостевой ключ работает только с одним протоколом и одним устройством, не дает административного доступа и может быть отозван. Я бы создавал гостевой профиль даже для собственного второго телефона. QR-код с полным доступом нельзя публиковать в переписке, сохранять в общей фотогалерее или отправлять человеку, которому нужен только интернет через VPN.

Заявления о сборе данных тоже требуют разделения продуктов. Для Self-hosted проект утверждает, что IP сервера и SSH-реквизиты остаются локально на устройстве. Amnezia Free и Premium используют серверную инфраструктуру проекта, поэтому политика допускает обработку идентификатора устройства, операционной системы, версии приложения и временную обработку IP для защиты сервиса и анализа блокировок. Историю посещений и содержимое VPN-трафика разработчики обещают не хранить.

Безопасность, ошибки и границы применимости

Открытый исходный код не означает отсутствие уязвимостей. Последний опубликованный аудит обнаружил две критические проблемы и одну уязвимость высокой опасности. Злоумышленник мог добиться выполнения команд через специально подготовленную конфигурацию OpenVPN, пользователь Premium мог получить доступ к административным функциям backend, а незащищенное обращение клиента к gateway позволяло нарушить доступность сервиса.

Повторная проверка подтвердила исправление всех найденных проблем. В отчете 7ASecurity также описаны отключенная Perfect Forward Secrecy в части IKEv2-конфигураций, устаревшие версии Go и недостаточно надежный генератор случайных значений для маскировки. Исправления прошли ретест.

Фраза на сайте проекта о том, что аудиты «не нашли критических уязвимостей», сформулирована неудачно. Критические проблемы нашли, затем разработчики их устранили. Для оценки зрелости проекта такая история выглядит лучше, чем сокрытие отчета, но читателю не стоит путать успешный ретест с отсутствием исходных находок.

Аудиторы отдельно указали на риски цепочки поставок. На момент проверки Linux-бинарники и Docker-образы не имели универсальной подписи, проект не публиковал полноценные SLSA-аттестации происхождения сборок, а автоматический анализ безопасности в CI/CD нуждался в усилении. Отчет не доказывает компрометацию релизов, но показывает, почему открытого репозитория недостаточно для проверки конкретного скачанного файла.

У версии 5.0.0.5 есть открытый отчет о регрессии на Android. Обычная конфигурация WireGuard без параметра Jc может попасть в новый парсер AmneziaWG и завершиться ошибкой. Один отчет в GitHub не подтверждает массовую проблему, однако владельцам обычного WireGuard разумно сохранить предыдущий рабочий установщик и резервную конфигурацию до обновления.

На настольных системах поддержка тоже неоднородна. Новая сборка предназначена для Windows 10 и 11 x64, Android 9 и новее, современных iOS и macOS. Официальные страницы расходятся по минимальной версии macOS, релиз указывает macOS 13, FAQ рекомендует macOS 14. Безопасным ориентиром остается macOS 14. Сборка для Android 7 и 8 временно отсутствует, как и актуальные пакеты для Debian 12 и Ubuntu 22.04.

Self-hosted VPN не обеспечивает анонимность сам по себе. Провайдер видит соединение с конкретным VPS, хостинг знает владельца учетной записи, а сайты получают постоянный и часто уникальный IP. Общий сервер коммерческого VPN смешивает трафик многих клиентов, тогда как личный VPS облегчает долговременную корреляцию активности. Cookies, браузерный fingerprint, авторизация в Google и другие идентификаторы VPN вообще не скрывает.

На практике Amnezia перестает помогать по четырем основным причинам.

  • Оператор заблокировал IP или всю подсеть хостинга.
  • Мобильная сеть пропускает только адреса из белого списка.
  • UDP полностью ограничен, поэтому AmneziaWG и WireGuard не устанавливают рабочий туннель.
  • Сайт не доверяет адресам дата-центров, показывает CAPTCHA, неверно определяет страну или блокирует вход.

Я бы настраивал личный сервер так. Брал KVM с Ubuntu 24.04 или Debian 12, отдельным IPv4 и доступом по SSH-ключу. Основным протоколом ставил AmneziaWG 2, резервным XRay VLESS Reality. После установки проверял контейнеры, DNS, IPv4 и IPv6-маршруты, KillSwitch и split tunneling. Полный ключ хранил бы только на устройстве администратора, остальным выдавал отзывные гостевые профили.

Amnezia хорошо решает задачу управляемого персонального VPN и заметно снижает порог настройки VPS. Клиент не отменяет обслуживание сервера, блокировки IP, ошибки маршрутизации и ограничения конкретных платформ. AmneziaWG усложняет распознавание трафика, но не делает соединение невидимым. Для высокой анонимности одного личного VPN недостаточно, а для надежного доступа нужен как минимум второй протокол и запасной способ подключения к серверу.

Amnezia VPN AmneziaWG VPN клиент самостоятельный VPN XRay Reality WireGuard обход блокировок VPS"
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

антипов жжёт

В санатории вас лечат.
Или просто доят?

// пиявки, озон и клизмы в вашем счёте →