Перейти к содержанию

WireGuard/AmneziaWG

Серверы WireGuard и AmneziaWG работают как любые другие: стоят в одном списке рядом с VLESS/Trojan/Shadowsocks, пользователь выбирает их так же. Отдельного режима нет, дополнительной настройки нет. Работает на штатном ядре Xray (outbound wireguard) — со стороны провайдера ничего нового не требуется, кроме самого конфига.

Способ А — в JSON-подписке

Обычный конфиг Xray, где у outbound "protocol": "wireguard":

{
  "remarks": "🇳🇱 Нидерланды — WG",
  "outbounds": [{
    "tag": "proxy",
    "protocol": "wireguard",
    "settings": {
      "secretKey": "<приватный ключ клиента>",
      "address": ["10.0.0.2/32"],
      "mtu": 1420,
      "peers": [{
        "publicKey": "<публичный ключ сервера>",
        "preSharedKey": "<необязательно>",
        "endpoint": "example.com:51820",
        "allowedIPs": ["0.0.0.0/0", "::/0"],
        "keepAlive": 25
      }]
    }
  }]
}

Адрес сервера, который показывается в приложении, берётся из peers[0].endpoint. У WireGuard нет блоков vnext или servers — строка endpoint единственное место, где живёт хост.

Поля AmneziaWG. Тот же outbound принимает параметры обфускации — добавьте их рядом с обычными. Они нужны только для AmneziaWG; для обычного WireGuard их просто не указывают (нулевые значения игнорируются, соединение ведёт себя ровно как раньше).

{
  "protocol": "wireguard",
  "settings": {
    "secretKey": "…",
    "address": ["10.66.66.17/32"],
    "mtu": 1420,
    "jc": 4, "jmin": 40, "jmax": 70,
    "s1": 15, "s2": 25, "s3": 0, "s4": 0,
    "h1": 1111111, "h2": 2222222, "h3": 3333333, "h4": 4444444,
    "peers": [
      { "publicKey": "…", "endpoint": "1.2.3.4:51820", "allowedIPs": ["0.0.0.0/0"] }
    ]
  }
}
Поле Что задаёт
jc Сколько мусорных пакетов слать перед рукопожатием (4–12)
jmin / jmax Границы размера мусорного пакета, байты (примерно 8–80)
s1 / s2 Размер префикса у init- и response-пакета (15–150)
s3 / s4 Размер префикса у cookie- и транспортных пакетов; необязательны — не указывайте, если сервер их не задаёт
h1–h4 Переписанные типы заголовков: без них пакеты опознаются по сигнатуре. Одно число или, для серверов AmneziaWG 3.1, диапазон "a-b" строкой ("h1": "1000-2000"); диапазоны применяются начиная с Android 428, iOS/macOS/tvOS 2.0.10 (315) и desktop 203 — старые сборки принимают только числа

s1s4 и h1h4 обязаны совпадать на сервере и в конфиге клиента, иначе соединение молча не работает: туннель поднимается, а трафик не идёт. jc, jmin и jmax совпадать не обязаны — каждая сторона шлёт свой мусор.

Версия сервера — 3.1 и ниже. Приложение собрано на ветке AmneziaWG 3.1 и совместимо со всеми предыдущими, обновлять на своей стороне ничего не нужно. Присылайте только те параметры, которые сервер действительно использует: всё, что не указано, остаётся по умолчанию и игнорируется.

Появилось в Параметры
0.2.11 и ранее jc, jmin, jmax, s1, s2, h1–h4
0.2.13 s3, s4
0.2.16 i1–i5
3.0 header_protection_key, content_padding_addition, rekey_after_time, rekey_timeout, reject_after_time, keepalive_timeout, max_handshake_attempts
3.1 random_trailers, disable_cookies, диапазоны a-b для h1–h4 и PersistentKeepalive

Параметр из 3.1, отправленный старому серверу, тот просто не поймёт — держите стороны в согласии: настраивайте клиент ровно тем, что работает на сервере.

Способ Б — ссылкой wireguard://

wireguard://<base64 стандартного .conf> — в base64 лежит обычный конфигурационный файл WireGuard, ровно тот текст, который выдают официальному клиенту. Необязательный якорь #Имя задаёт отображаемое название:

wireguard://W0ludGVyZmFjZV0K…#🇳🇱%20Нидерланды

Раскодированный payload — просто:

[Interface]
PrivateKey = <приватный ключ клиента>
Address = 10.0.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <публичный ключ сервера>
PresharedKey = <необязательно>
Endpoint = example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0

Эта форма работает везде, где и остальные share-ссылки: вставка в форму добавления, внутри зашифрованной crypt1-ссылки, отдельной строкой в теле подписки.

Сборка ссылки без кода

Вставьте .conf на служебной странице — она соберёт wireguard:// и QR прямо в браузере, без запросов наружу. Открыть сборщик ссылок →

Ключи уходят в ядро как есть — приложение их не перекодирует.

Импорт на стороне клиента

Начиная с Android 379, iOS/macOS 2.0.3 (277+) и десктопа 169 экран добавления принимает конфиг WireGuard/AmneziaWG четырьмя способами — раздавать пользователям можно любым из них:

  1. Файл .conf — кнопка «Выбрать файл конфигурации» (Android, iOS, macOS, Windows, Linux; на Apple TV кнопки нет — там добавление «с телефона»).
  2. Голый текст конфига — содержимое [Interface]…[Peer] вставляется прямо в поле ввода, на всех платформах.
  3. Ссылка, отдающая конфиг — https-адрес, по которому лежит сам текст .conf. Многие панели раздают конфиги именно так.
  4. Ссылка-схема и QRwireguard:// / amneziawg:// / awg:// / wg:// с base64 конфига, как описано выше.

Параметры маскировки AmneziaWG (Jc, Jmin, Jmax, S1, S2, H1H4) подхватываются из [Interface] во всех четырёх способах. В более старых сборках работают только схема-ссылка и QR.

C. AmneziaWG — WireGuard с обфускацией

AmneziaWG — это тот же WireGuard плюс обфускация: мусорные пакеты и переписанные типы заголовков, из-за которых DPI не распознаёт хендшейк WireGuard.

Схемы ссылок. wireguard://, amneziawg://, awg:// и wg:// принимаются и разбираются одинаково — полезная нагрузка это base64 обычного .conf, с необязательным фрагментом #Name.

amneziawg://<base64url файла .conf>#Germany

Параметры обфускации живут в секции [Interface] этого .conf, рядом с обычными ключами:

[Interface]
PrivateKey = …
Address = 10.66.66.17/32
MTU = 1420
Jc = 4            ; сколько мусорных пакетов отправить до хендшейка
Jmin = 40         ; размер мусорного пакета, нижняя граница
Jmax = 70         ; размер мусорного пакета, верхняя граница
S1 = 15           ; размер префикса init-пакета
S2 = 25           ; размер префикса response-пакета
S3 = 0            ; префикс cookie-пакета — необязательно, если сервер не задаёт
S4 = 0            ; префикс транспортного пакета — то же
H1 = 1111111      ; переписанные типы заголовков — иначе узнаются по сигнатуре (серверы 3.1 могут задавать диапазон: H1 = 1000-2000)
H2 = 2222222
H3 = 3333333
H4 = 4444444

[Peer]
PublicKey = …
Endpoint = 194.61.120.25:57932
AllowedIPs = 0.0.0.0/0,::/0

Не указывайте их — получите обычный WireGuard: приложение и ядро ведут себя точно как раньше. То же поле за полем: присылайте только то, что работает на вашем сервере. Подходит любая версия AmneziaWG, 3.1 и старше — см. таблицу версий в разделе A. 🛠️ — Соберите ссылку из .conf — Генератор принимает и конфиги AmneziaWG — параметры обфускации переносятся как есть. Всё считается в браузере. — Генератор ссылок →

Несколько локаций в одном файле. URL подписки может вернуть JSON-контейнер вместо ссылок:

{
  "type": "amneziawg",
  "version": 1,
  "servers": [
    { "name": "Germany",     "config": "<base64url файла .conf>" },
    { "name": "Netherlands", "config": "<base64url файла .conf>" }
  ]
}

type принимается как amneziawg, awg, wireguard или wg. Некорректная запись пропускается, не ломая остальной список.

Заметки для операторов

  • IPv6-endpoint поддерживается, пишется стандартно: [2606:4700:d0::a29f:c001]:2408.

  • keepAlive (секунды) — persistent keepalive. Ставьте, если клиенты за NAT: без него трансляция истекает и туннель замолкает в одну сторону.

  • MTU в конфиге управляет тем, что шлёт клиент. Что шлёт сервер, задаётся MTU интерфейса wg0 на ноде — настраивайте оба, иначе путь, не несущий полноразмерные пакеты, пропустит хэндшейк и встанет.

  • Маршрутизация на ноде важна: ip route get <ip клиента> должен резолвиться через wg0. Если указывает на дефолтный шлюз — хэндшейк всё равно пройдёт (демон отвечает на него напрямую), но данные до клиента не дойдут никогда. Выглядит как блокировка, но это не она.