--- date: 2026-05-20 type: decision tags: [vpn, amnezia, amneziawg, macos, finland, server, incompatibility] status: open severity: medium --- # AmneziaVPN macOS-клиент несовместим с v1 AmneziaWG-сервером ## TL;DR macOS-клиент AmneziaVPN (текущей версии на 2026-05) умеет только новый **AmneziaWG v2** handshake-формат. На **v1**-серверах (старые `amnezia-awg` контейнеры) — handshake silently дропается, клиент видит `ErrorCode 305 — Тайм-аут подключения к серверу`. iOS-клиент, Windows-клиент и Linux-kernel-module `wireguard-go-amneziawg` шлют в v1-совместимом формате — продолжают работать. ## Симптомы Mac-клиент при попытке Connect: - На v1-сервере: шлёт **только junk-преамбулу (96-байтовые UDP-пакеты)**, реальный handshake_init (148+ байт) не уходит. Таймаут 305. - На v2-сервере: handshake проходит, туннель поднимается, всё работает. В tcpdump на v1-сервере видно множество одинаковых 96-байтных UDP-пакетов от Mac-клиента и **ноль ответных**. На v2-сервере — пакеты разных размеров (handshake → data 1452 байт). ## Подтверждённые случаи (2026-05-20) | Клиент | Сервер | Контейнер | Версия | Результат | |---|---|---|---|---| | Mac Олега | `78.17.4.225` (НИИКН) | `amnezia-awg2` | v2 | ✓ работает | | Mac Олега | `202.71.12.186` (finland5870) | `amnezia-awg` (7 мес) | v1 | ✗ ErrorCode 305 | | Mac Александра (Бенелюкс) | `202.71.12.186` | v1 | v1 | ✗ ErrorCode 305 | | iPhone Александра | `202.71.12.186` | v1 | v1 | ✓ работает | | Win 2012R2 1С Бужарово | `78.17.4.225` | v2 | v2 | ✓ работает | | Cudy TR3000 (kernel-mod) | `202.71.12.186` | v1 | v1 | ✓ работает | ## Как опознать v1 vs v2 на сервере ```bash ssh root@ 'docker ps | grep amnezia-awg' ``` - `amnezia-awg` — v1 - `amnezia-awg2` — v2 В `wg0.conf` v2-конфиг включает поля `I1..I5` (после `H1..H4`), в v1 — нет: ```bash docker exec awk '/^\[Interface\]/,/^\[Peer\]/' /opt/amnezia/awg/wg0.conf ``` ## Конфиги клиентов В `vpn://`-ключе AmneziaPanel оба формата выглядят почти одинаково (поля `I1..I5` присутствуют пустыми и в v1-конфигах). Реальная привязка к версии — на стороне сервера + версия клиентского `wireguard-go-amneziawg`. ## Решение (выбрано Олегом) **Не трогаем v1-сервер finland5870** — там 84 активных peer (iOS/Windows/Linux/kernel-WG), которые работают. Риск перевыпуска всех конфигов перевешивает пользу. Mac-юзерам, кто жалуется на 305, выдаём: - Конфиг от v2-сервера `78.17.4.225` (НИИКН), либо - Конфиг от **любого** v2-сервера в инфре Олега. Александру (Бенелюкс) — выпущен новый конфиг от НИИКН-сервера. ## Что не сделано (отложено) - **Параллельный v2-контейнер на finland5870** на другом UDP-порту (например `37210`) — старые v1-клиенты продолжают на `37209`, новые/Mac — на v2 `37210`. Без вмешательства в текущий контейнер, риск минимальный. Откладывается пока не накопится критическая масса Mac-юзеров. - **Полная миграция finland5870 v1 → v2** — массовый перевыпуск 84 конфигов. Только в плановое окно даунтайма. ## Диагностика для будущих случаев Чтобы не разбирать с нуля, чек-лист: 1. **Mac жалуется на ErrorCode 305 или тайм-аут к AmneziaVPN.** 2. Проверь — **iOS-клиент / Windows-клиент того же пользователя на том же сервере работают?** Если да — гипотеза macOS-v1-баг сильно правдоподобна. 3. **Какая версия контейнера на сервере** — `docker ps | grep amnezia` → если `amnezia-awg` (без `2`) — это v1. Если `amnezia-awg2` — v2. 4. Если v1 — выдай Mac-юзеру конфиг от v2-сервера. Не пытайся "починить" v1-контейнер. ## Снэпшот серверов на момент решения (2026-05-20) - **finland5870.com** `202.71.12.186`: `amnezia-awg` (v1, создан ~2025-10), 84 peer, port 37209/udp. Используется как основной endpoint для роутерных podkop-туннелей: Бенелюкс, Сергей, Знаменское, НИИКН-роутер, Lipki, Михуринец и др. - **finlandit5870.com** `78.17.4.225`: `amnezia-awg2` (v2, создан 2026-05-18), `amnezia-panel-web` (управляющая PHP-панель), полный VPN-стек (xray, shadowbox, socks5, mtproto, WA-proxy). Олег управляет конфигами отсюда через AmneziaApp. ## Связанные - [[../projects/dttb/finland-hostkey-vps]] — карточка finland5870 - [[../projects/dttb/vpn-clients]] — клиентский реестр - [[2026-05-20-benelux-compromise]] — параллельная история инцидента с роутером Бенелюкса