AmneziaWG: Ошибка несоответствия заголовков H1, H2, H3, H4 (Magic Headers)
- Клиент AmneziaWG отправляет пакеты инициализации (Handshake Initiation), но не получает ответа от сервера (0 B received).
- В системном журнале сервера
dmesgили контейнера появляются записиpacket has invalid typeилиinvalid magic header. - Периодические разрывы соединения при обновлении конфигураций на стороне клиента или сервера.
- Статус сессии в клиенте зависает в состоянии Connecting... без перехода в активную фазу.
1. Архитектура параметров H1–H4 в AmneziaWG
AmneziaWG заменяет стандартные 4-байтовые заголовки WireGuard (1: Handshake Init, 2: Handshake Response, 3: Cookie Reply, 4: Transport Data) на произвольные 32-битные беззнаковые целые числа (H1, H2, H3, H4). При несовпадении хотя бы одного значения сервер отбрасывает пакет без генерации ответа.
2. Проверка соответствия конфигураций
Сравните секции [Interface] на сервере и [Interface] на клиенте. Значения должны быть идентичны:
# Конфигурация сервера (/etc/amnezia/amnezia-wireguard/awg0.conf)
[Interface]
Address = 10.8.0.1/24
PrivateKey = <Server_Private_Key>
ListenPort = 51820
H1 = 1284719283
H2 = 839182734
H3 = 1928374650
H4 = 746352910
# Конфигурация клиента (client.conf)
[Interface]
Address = 10.8.0.2/32
PrivateKey = <Client_Private_Key>
DNS = 1.1.1.1
H1 = 1284719283
H2 = 839182734
H3 = 1928374650
H4 = 7463529103. Генерация валидных уникальных заголовков
Если требуется перегенерировать параметры H1-H4 в диапазоне от 1 до 2147483647:
python3 -c "import random; print('\n'.join([f'H{i} = {random.randint(100000000, 2147483640)}' for i in range(1, 5)]))"4. Перезапуск интерфейса на сервере
awg-quick down awg0 && awg-quick up awg0
# Проверка статуса
awg show awg0 Частые вопросы (FAQ)
Что произойдет, если параметры H1-H4 не указаны вовсе?
Если параметры H1-H4 отсутствуют в конфиге, AmneziaWG использует стандартные значения WireGuard (H1=1, H2=2, H3=3, H4=4), что делает протокол уязвимым для DPI-детектирования.
Могут ли параметры H1-H4 иметь одинаковые числовые значения?
Нет, значения H1, H2, H3 и H4 должны быть строго уникальными в рамках одного интерфейса, иначе парсер пакетов ядра не сможет различить типы сообщений.
Почему при ошибке H1-H4 сервер не возвращает ICMP Port Unreachable?
Это часть защитного механизма: для предотвращения атак перебором и сканирования AmneziaWG молча отбрасывает (drop) пакеты с невалидными заголовками.
Нужно ли перезапускать демон AmneziaWG на клиенте при изменении H1-H4?
Да, клиенту требуется полный перезапуск туннельного интерфейса для применения новых байтовых масок заголовков пакетов.