AmneziaWG в Docker: установка, настройка и обход DPI с веб-интерфейсом

Подробное руководство по развертыванию AmneziaWG в Docker: установка, настройка, управление клиентами, обход DPI, мониторинг и ответы на частые вопросы.

Что такое AmneziaWG и зачем он нужен

AmneziaWG — это форк WireGuard, разработанный для обхода Deep Packet Inspection (DPI). В отличие от классического WireGuard, AmneziaWG использует дополнительные параметры, такие как случайные размеры пакетов, мусорные пакеты и изменяемые заголовки, что делает трафик неотличимым от обычного HTTPS. Это особенно актуально в странах, где провайдеры активно блокируют VPN-протоколы.

Основное преимущество AmneziaWG — сохранение высокой производительности и простоты WireGuard, но с добавлением механизмов противодействия блокировкам. Он совместим с большинством клиентов WireGuard, но для полной функциональности рекомендуется использовать официальные клиенты AmneziaVPN, доступные для Linux, Windows, macOS, Android и iOS.

Развертывание AmneziaWG в Docker позволяет быстро создать VPN-сервер с веб-интерфейсом управления, не углубляясь в ручную настройку. Контейнер включает в себя все необходимые компоненты: сам VPN-сервер, генерацию ключей, управление клиентами и статистику подключений.

Системные требования и подготовка хоста

Для запуска AmneziaWG в Docker потребуется Linux-хост с установленным Docker Engine. Поддерживаются большинство дистрибутивов, включая Ubuntu, Debian, CentOS и Alpine. Важно, чтобы ядро поддерживало WireGuard (версии 5.6+ или модуль wireguard).

Перед установкой убедитесь, что порты UDP 51820 (для VPN) и TCP 51821 (для веб-интерфейса) свободны. Если они заняты, их можно изменить через переменные окружения. Также необходимо открыть эти порты в файрволе, если он активен.

Для установки Docker можно использовать официальный скрипт:

curl -sSL https://get.docker.com | sh

После установки добавьте текущего пользователя в группу docker, чтобы не использовать sudo для каждой команды:

sudo usermod -aG docker $(whoami)

Затем выйдите из системы и войдите снова, чтобы изменения вступили в силу.

Установка AmneziaWG Easy через docker run

Самый простой способ запустить AmneziaWG с веб-интерфейсом — использовать готовый образ ghcr.io/w0rng/amnezia-wg-easy. Этот образ включает в себя и VPN-сервер, и удобную админ-панель.

Пример команды запуска:

docker run -d \
  --name=amnezia-wg-easy \
  -e LANG=en \
  -e WG_HOST=<ваш_IP_или_домен> \
  -e PASSWORD_HASH=<bcrypt_хэш_пароля> \
  -e PORT=51821 \
  -e WG_PORT=51820 \
  -v ~/.amnezia-wg-easy:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --sysctl="net.ipv4.ip_forward=1" \
  --device=/dev/net/tun:/dev/net/tun \
  --restart unless-stopped \
  ghcr.io/w0rng/amnezia-wg-easy

Замените <ваш_IP_или_домен> на публичный IP-адрес сервера или динамический DNS-хостнейм. <bcrypt_хэш_пароля> — это хэш пароля для входа в веб-интерфейс. Сгенерировать его можно с помощью утилиты htpasswd или онлайн-сервисов.

После запуска веб-интерфейс будет доступен по адресу http://ваш_сервер:51821. Все конфигурационные файлы сохраняются в каталоге ~/.amnezia-wg-easy на хосте.

Установка через Docker Compose

Для более удобного управления конфигурацией рекомендуется использовать Docker Compose. Создайте файл docker-compose.yml со следующим содержимым:

services:
  amnezia-wg-easy:
    image: ghcr.io/w0rng/amnezia-wg-easy
    container_name: amnezia-wg-easy
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
    devices:
      - /dev/net/tun:/dev/net/tun
    volumes:
      - ~/.amnezia-wg-easy:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    environment:
      - WG_HOST=vpn.example.com
      - PASSWORD_HASH=$2y$05$Ci...
      - PORT=51821
      - WG_PORT=51820
      - LANG=en
    restart: unless-stopped

Затем выполните команду docker compose up -d для запуска. Этот подход упрощает обновление и изменение параметров — достаточно отредактировать файл и перезапустить контейнер.

Обратите внимание, что переменная PASSWORD_HASH должна содержать bcrypt-хэш. В примере выше показан сокращенный вариант, вам нужно подставить реальный хэш.

Настройка параметров AmneziaWG для обхода DPI

Ключевая особенность AmneziaWG — возможность тонкой настройки параметров, которые делают трафик недетектируемым. Эти параметры задаются через переменные окружения в контейнере.

Основные параметры:

  • JC — количество мусорных пакетов, отправляемых перед началом сессии (по умолчанию случайное значение).
  • JMIN и JMAX — минимальный и максимальный размер мусорных пакетов.
  • S1 и S2 — размер случайных данных, добавляемых к init и response пакетам.
  • H1H4 — магические заголовки для различных типов пакетов (handshake, underload, transport).

Эти параметры можно задать в команде docker run через -e, например:

-e JC=5 -e JMIN=50 -e JMAX=1000 -e S1=75 -e S2=75 -e H1=1234567891 -e H2=1234567892 -e H3=1234567893 -e H4=1234567894

Важно понимать, что значения должны совпадать на сервере и на клиенте. Если вы используете официальные клиенты AmneziaVPN, они автоматически подхватывают эти параметры из конфигурационного файла. При ручной настройке сторонних клиентов необходимо вручную указать эти параметры.

Экспериментируйте с параметрами, чтобы добиться максимальной устойчивости к DPI в вашей сети, но помните, что слишком большие значения могут снизить скорость соединения.

Управление клиентами через веб-интерфейс

Веб-интерфейс AmneziaWG Easy предоставляет удобные инструменты для управления клиентами. После входа в админ-панель вы можете:

  • Создавать новых клиентов, задавая имя и опционально срок действия.
  • Просматривать список существующих клиентов с их статусом подключения.
  • Редактировать или удалять клиентов.
  • Показывать QR-код для быстрого добавления на мобильные устройства.
  • Скачивать конфигурационные файлы для настольных клиентов.
  • Отслеживать статистику трафика (RX/TX) для каждого клиента.

Для создания клиента нажмите кнопку "Add Client", введите имя и, при необходимости, установите дату истечения. После создания вы получите конфигурационный файл и QR-код.

Включить дополнительные функции, такие как статистика трафика, одноразовые ссылки или срок действия клиентов, можно через переменные окружения при запуске контейнера. Например, UI_TRAFFIC_STATS=true включает детальную статистику, а WG_ENABLE_EXPIRES_TIME=true — поддержку истечения срока действия.

Мониторинг и метрики Prometheus

Для продвинутого мониторинга AmneziaWG Easy поддерживает экспорт метрик в формате Prometheus. Это позволяет интегрировать VPN-сервер в существующую систему мониторинга (например, Grafana).

Чтобы включить метрики, установите переменную ENABLE_PROMETHEUS_METRICS=true. После этого метрики будут доступны по адресу http://ваш_сервер:51821/metrics. Для защиты этого эндпоинта можно задать пароль через PROMETHEUS_METRICS_PASSWORD (bcrypt-хэш).

Для Grafana существует готовый дашборд с ID 21733, который можно импортировать для визуализации данных. Метрики включают количество активных клиентов, объем переданного трафика, состояние интерфейса и другие полезные показатели.

Пример настройки метрик в docker-compose:

environment:
  - ENABLE_PROMETHEUS_METRICS=true
  - PROMETHEUS_METRICS_PASSWORD=$2y$05$...

Мониторинг особенно полезен, если вы управляете несколькими VPN-серверами или хотите отслеживать нагрузку и аномалии.

Обновление и резервное копирование

Обновление AmneziaWG Easy до новой версии выполняется стандартными командами Docker:

docker stop amnezia-wg-easy
docker rm amnezia-wg-easy
docker pull ghcr.io/w0rng/amnezia-wg-easy

Затем снова запустите контейнер с теми же параметрами, что и при первоначальной установке. Все данные (конфигурации клиентов, ключи) сохраняются в томе ~/.amnezia-wg-easy, поэтому они не будут потеряны.

Для резервного копирования достаточно скопировать каталог ~/.amnezia-wg-easy на другой носитель. Это включает в себя все ключи и конфигурации. Рекомендуется регулярно создавать резервные копии, особенно перед обновлением.

Если вы используете Docker Compose, обновление упрощается: достаточно выполнить docker compose pull и docker compose up -d.

Альтернативный образ metaligh/amneziawg

Помимо AmneziaWG Easy, существует более легковесный образ metaligh/amneziawg, который предоставляет только VPN-сервер без веб-интерфейса. Он подходит для тех, кто предпочитает управлять через командную строку.

Запуск контейнера:

docker run -d --name amnezia_container --cap-add NET_ADMIN --device /dev/net/tun -p 51820:51820/udp metaligh/amneziawg

После запуска необходимо настроить конфигурацию внутри контейнера. Для этого войдите в него:

docker exec -it amnezia_container /bin/bash

Внутри вы найдете файлы serverip.cfg (IP сервера, DNS, порт) и vpn_params.cfg (параметры AmneziaWG). Отредактируйте их, затем выполните команду awgstart для генерации первого клиента. Для добавления новых клиентов используйте awguser.

Этот образ требует ручной настройки, но дает больше контроля и меньше потребляет ресурсов. Он также поддерживает Docker Compose, как показано в документации.

Решение типичных проблем и ограничения

При развертывании AmneziaWG могут возникнуть некоторые проблемы. Рассмотрим наиболее частые:

  • Нет доступа к веб-интерфейсу: проверьте, что порт 51821 открыт в файрволе и контейнер запущен. Также убедитесь, что WG_HOST указан правильно.
  • Клиенты не подключаются: убедитесь, что на сервере включен IP-форвардинг (net.ipv4.ip_forward=1) и настроен NAT (обычно это делается автоматически, но в некоторых случаях требуется вручную добавить правила iptables).
  • Проблемы с DPI: если трафик блокируется, попробуйте изменить параметры JC, JMIN, JMAX и другие. Также проверьте, что клиент использует те же параметры.
  • Ошибка /dev/net/tun: убедитесь, что модуль tun загружен (modprobe tun) и устройство существует.

Ограничения: AmneziaWG не гарантирует 100% обход DPI, особенно если провайдер использует продвинутые методы анализа. Также использование нестандартных параметров может снизить скорость. Для максимальной совместимости используйте официальные клиенты AmneziaVPN.

Вопросы и ответы

Чем AmneziaWG отличается от обычного WireGuard?

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

Как сгенерировать bcrypt-хэш для пароля веб-интерфейса?

Для генерации bcrypt-хэша можно использовать утилиту htpasswd из пакета apache2-utils: htpasswd -bnBC 10 "" ваш_пароль | tr -d ':\n'. Также подойдут онлайн-сервисы, но будьте осторожны с передачей пароля третьим лицам. Хэш нужно указать в переменной PASSWORD_HASH при запуске контейнера.

Можно ли использовать AmneziaWG с обычными клиентами WireGuard?

Да, базовое подключение возможно, но для полноценной работы с параметрами обхода DPI (JC, JMIN и т.д.) необходимо использовать клиенты, поддерживающие AmneziaWG. Официальные клиенты AmneziaVPN доступны для всех основных платформ и автоматически подхватывают эти параметры из конфигурационного файла.

Как изменить порт для веб-интерфейса и VPN?

Порт веб-интерфейса задается переменной PORT (по умолчанию 51821), порт VPN — WG_PORT (по умолчанию 51820). При изменении порта VPN не забудьте также изменить проброс портов в Docker (-p или ports в compose-файле). Например, -e WG_PORT=12345 -p 12345:12345/udp.

Как добавить нового клиента через командную строку в образе metaligh/amneziawg?

Войдите в контейнер: docker exec -it amnezia_container /bin/bash. Затем выполните команду awguser для создания нового пользователя. После этого запустите awgstart, чтобы применить изменения и сгенерировать QR-код. Конфигурационные файлы будут сохранены в каталоге /etc/amnezia/amneziawg.

Какие метрики Prometheus доступны в AmneziaWG Easy?

При включении ENABLE_PROMETHEUS_METRICS=true становятся доступны метрики по адресу /metrics. Они включают количество активных клиентов, объем входящего и исходящего трафика, состояние интерфейса и другие. Для визуализации можно использовать готовый дашборд Grafana с ID 21733.

Что делать, если VPN не работает после обновления контейнера?

Убедитесь, что вы используете те же переменные окружения и проброс портов, что и раньше. Проверьте, что том с конфигурациями смонтирован правильно. Если проблема сохраняется, проверьте логи контейнера: docker logs amnezia-wg-easy. Также убедитесь, что на хосте включен IP-форвардинг.