AmneziaWG: WireGuard Go Panic — Malformed Obfuscation Header
- Процесс
amneziawg-goаварийно завершается с сообщениемpanic: runtime error: slice bounds out of range. - В логах клиента фиксируется сбой:
fatal error: malformed obfuscation header: buffer size mismatch. - Пользовательский VPN-клиент на macOS / Windows внезапно закрывается при старте передачи данных.
- Полная потеря сетевого туннелирования при получении некорректных входящих UDP пакетов.
1. Анализ трассировки паники Go Runtime
Паника возникает в функции разбора заголовков пакета ReceiveFunc() или UnwrapHeader(), когда размер полученного сетевого буфера меньше расчетного смещения S1 или S2, либо когда размер пакета поврежден при фрагментации в канале.
2. Проверка ограничений на параметры S1 и S2
Убедитесь, что сумма S1 / S2 не превышает размер минимального полезного пакета и не выходит за границы допустимого смещения. Значения должны укладываться в диапазон от 0 до 128 байт:
# Корректные параметры в файле конфигурации
[Interface]
S1 = 15
S2 = 20
Jmin = 40
Jmax = 2003. Обновление версии клиента и бинарного файла Go-агента
Ранние версии amneziawg-go содержали ошибку валидации граничных условий (bounds check elimination). Обновите клиент до актуального релиза:
# Сборка актуального бинарника из исходного кода
git clone https://github.com/amnezia-vpn/amneziawg-go.git
cd amneziawg-go
make
sudo cp amneziawg-go /usr/local/bin/4. Принудительное ограничение MTU
Установите безопасный размер MTU для исключения фрагментированных пакетов, нарушающих границы байтовых срезов:
[Interface]
MTU = 1280 Частые вопросы (FAQ)
Почему panic происходит только на некоторых устройствах?
Сбой проявляется в сетях с Path MTU менее 1420 байт (например, мобильные сети с оверхедом GTP-U), где пакеты обфускации разрезаются на фрагменты, ломая парсер буфера Go.
Как собрать стек паники amneziawg-go для баг-репорта?
Запустите бинарник вручную с переменной окружения: GOTRACEBACK=crash amneziawg-go -f awg0 и перенаправьте stderr в файл.
Что делать, если S1/S2 установлены в 0?
Установка S1=0 и S2=0 отключает паддинг рукопожатия, переводя клиент в режим работы без рандомизации длины заголовка, что предотвращает ошибку слайсов.
Работает ли amneziawg-go с обычными конфигами WireGuard?
Да, при отсутствии специальных директив H1-H4/Jc/S1/S2 он работает в режиме полной обратной совместимости со стандартным протоколом WireGuard.