# Wireguard Стандартная реализация протокола Wireguard. ::: danger **Протокол Wireguard не предназначен для обхода блокировок. Использование его на внешнем уровне может привести к блокировке сервера из-за характерных признаков.** ::: ## OutboundConfigurationObject ```json { "secretKey": "PRIVATE_KEY", "address": [ // необязательно, по умолчанию ["10.0.0.1", "fd59:7153:2388:b5fd:0000:0000:0000:0001"] "IPv4_CIDR", "IPv6_CIDR", "and more..." ], "peers": [ { "endpoint": "ENDPOINT_ADDR", "publicKey": "PUBLIC_KEY" } ], "noKernelTun": false, "mtu": 1420, // необязательно, по умолчанию 1420 "reserved": [1, 2, 3], "workers": 2, // необязательно, по умолчанию runtime.NumCPU() "domainStrategy": "ForceIP" } ``` ::: tip На данный момент протокол Wireguard в режиме outbound не поддерживает настройку `streamSettings`. ::: > `secretKey`: string Личный ключ пользователя. Обязательное поле. > `address`: string array Wireguard запускает локальный виртуальный сетевой интерфейс tun. Поддерживается использование одного или нескольких IP-адресов, включая IPv6. > `noKernelTun`: true | false По умолчанию система проверяет, работает ли она на Linux и имеет ли пользователь права NET_CAP_ADMIN, чтобы решить, использовать ли системный виртуальный интерфейс. Если он не используется, применяется gvisor. Системный виртуальный интерфейс обеспечивает более высокую производительность. Обратите внимание, что это относится только к обработке IP-пакетов и не связано с ядром Wireguard. Эта проверка может быть неточной. Например, некоторые виртуализации lxc могут изначально не иметь прав на TUN, что приведет к невозможности работы outbound. В таких случаях можно вручную отключить использование системного интерфейса. При использовании системного интерфейса IPv6 резервирует таблицу маршрутов с номером 10230. Для каждого нового Wireguard outbound таблица увеличивается на 1 (10231, 10232 и т.д.). Если на одной машине запускается второй экземпляр Xray, он попытается использовать таблицу 10230, что вызовет конфликт с первым экземпляром. В таких случаях необходимо отключить использование системного интерфейса. > `mtu`: int MTU нижнего уровня tun в Wireguard.
Метод расчета MTU Структура пакета Wireguard: ``` - 20-байтный заголовок IPv4 или 40-байтный заголовок IPv6 - 8-байтный заголовок UDP - 4 байта — тип - 4 байта — индекс ключа - 8 байт — nonce - N байт — зашифрованные данные - 16 байт — аутентификационный тег ``` ```N байт — зашифрованные данные``` — это значение MTU. Для IPv4 оно равно 1440, для IPv6 — 1420. В особых условиях значение может быть уменьшено (например, для PPPoE — минус 8 байт).
> `reserved` \[ number \] Зарезервированные байты Wireguard, заполняются при необходимости. > `workers`: int Количество потоков Wireguard. По умолчанию равно количеству ядер процессора. > `peers`: \[ [Peers](#peers) \] Список серверов Wireguard. Каждая запись представляет конфигурацию одного сервера. > `domainStrategy`: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP" В отличие от большинства прокси-протоколов, Wireguard не позволяет передавать доменные имена в качестве целей. Если в качестве цели передается доменное имя, оно разрешается в IP-адрес через встроенный DNS Xray. Подробнее см. поле `domainStrategy` для outbound `Freedom`. По умолчанию используется `ForceIP`. Примечание: В настройках `Freedom` доступны опции, такие как `UseIP`, которые здесь отсутствуют, так как Wireguard требует наличия действительного IP-адреса. ```json "dns": { "servers": [ "https://1.1.1.1/dns-query", { "address": "https://1.1.1.1/dns-query", "domains": [ "geosite:openai" ], "skipFallback": true, "queryStrategy": "UseIPv6" // Запрос только AAAA-записей } ], "queryStrategy": "UseIP" // Запрос A и AAAA одновременно. Если не указано, используется значение по умолчанию UseIP. }, ``` ### Peers ```json { "endpoint": "ENDPOINT_ADDR", "publicKey": "PUBLIC_KEY", "preSharedKey": "PRE_SHARED_KEY", // необязательно, по умолчанию "0000000000000000000000000000000000000000000000000000000000000000" "keepAlive": 0, // необязательно, по умолчанию 0 "allowedIPs": ["0.0.0.0/0"] // необязательно, по умолчанию ["0.0.0.0/0", "::/0"] } ``` > `endpoint`: address Адрес сервера. Обязательное поле. Формат URL:порт, например, `engage.cloudflareclient.com:2408`.
Формат IP:порт, например, `162.159.192.1:2408` или `[2606:4700:d0::a29f:c001]:2408`. > `publicKey`: string Публичный ключ сервера для проверки. Обязательное поле. > `preSharedKey`: string Дополнительный симметричный ключ шифрования. > `keepAlive`: int Интервал отправки пакетов heartbeat, в секундах. Значение по умолчанию — 0 (отсутствие heartbeat). > `allowedIPs`: string array Wireguard пропускает только трафик с определенных IP-адресов.