# 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", "и так далее..." ], "peers": [ { "endpoint": "ENDPOINT_ADDR", "publicKey": "PUBLIC_KEY" } ], "kernelMode": true, // необязательно, по умолчанию true, если поддерживается и есть достаточные права "mtu": 1420, // необязательно, по умолчанию 1420 "reserved": [1, 2, 3], "workers": 2, // необязательно, по умолчанию runtime.NumCPU() "domainStrategy": "ForceIP" } ``` ::: tip В настоящее время в исходящем протоколе WireGuard не поддерживается настройка `streamSettings`. ::: > `secretKey`: string Приватный ключ пользователя. Обязательный параметр. > `address`: string array WireGuard создаст виртуальный сетевой интерфейс TUN на локальном компьютере. Используйте один или несколько IP-адресов, IPv6 поддерживается. > `kernelMode`: true | false Использовать ли TUN виртуального сетевого интерфейса ядра Linux.
Для использования TUN виртуального сетевого интерфейса ядра Linux требуется поддержка системы и права root, после использования будет занята 1023-я таблица маршрутизации IPv6.
::: tip Если в 1023-й таблице маршрутизации IPv6 уже есть записи маршрутов и значение `kernelMode` равно `true`, нормальная работа будет невозможна. ::: > `mtu`: int Размер фрагментации TUN нижнего уровня WireGuard.
Как рассчитать MTU Структура пакета WireGuard выглядит следующим образом: ``` - 20-байтовый заголовок IPv4 или 40-байтовый заголовок IPv6 - 8-байтовый заголовок UDP - 4 байта типа - 4 байта индекса ключа - 8 байтов nonce - N байтов зашифрованных данных - 16-байтовый тег аутентификации ``` `N байтов зашифрованных данных` - это значение MTU, которое нам нужно. В зависимости от того, использует ли конечная точка IPv4 или IPv6, конкретное значение может быть 1440 (IPv4) или 1420 (IPv6), и его можно дополнительно уменьшить, если это необходимо в особых условиях (например, PPPoE для домашнего интернета требует дополнительного вычитания 8).
> `reserved` \[ number \] Зарезервированные байты WireGuard. Новый параметр в Xray-core v1.8.0.
При подключении к Warp через WireGuard из-за ограничений Cloudflare для некоторых IP-адресов в Гонконге и Лос-Анджелесе требуется значение `reserved` для успешного подключения.
Значение `reserved` можно получить с помощью сторонних инструментов, таких как: [warp-reg](https://github.com/badafans/warp-reg), [warp-reg.sh](https://github.com/chise0713/warp-reg.sh). > `workers`: int Количество потоков, используемых WireGuard. > `peers`: \[ [Peers](#peers) \] Список серверов WireGuard, где каждый элемент является конфигурацией сервера. > `domainStrategy`: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP" Новый параметр в Xray-core v1.8.6.
Если этот параметр не указан или оставлен пустым, используется значение по умолчанию `"ForceIP"`.
Если целевой адрес является доменным именем, для получения IP-адреса используется [встроенный DNS-сервер](../dns.md) Xray-core (если конфигурация `"dns"` не указана, используется системный DNS), и этот IP-адрес отправляется через WireGuard для установления соединения.
::: tip Если значение `domainStrategy` конфликтует со значением `"queryStrategy"` в конфигурации `"dns"`, это может привести к ошибкам при открытии веб-сайтов. ::: ```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 }, ``` Если `domainStrategy: "ForceIPv4"`, а в поле DNS, управляющем запросами домена geosite:openai, используется `"queryStrategy": "UseIPv6"`, это приведет к ошибкам при открытии веб-сайтов geosite:openai. ::: tip В Xray-core v1.8.0 - v1.8.4 нет `"domainStrategy"`.
Если целевой адрес является доменным именем, для получения IP-адреса используется встроенный DNS-сервер Xray-core. Значение `"queryStrategy"` в конфигурации `"dns"` используется для управления приоритетом IPv4 или IPv6.
Если конфигурация `"dns"` не указана, для получения IP-адреса используется системный DNS, а приоритет IPv4 или IPv6 определяется системой. ::: ### 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`. ::: tip Если целевой адрес имеет тип URL, для получения IP-адреса будет использоваться встроенный DNS-сервер Xray-core, приоритет IPv4 или IPv6 определяется значением `domainStrategy`.
Если конфигурация `"dns"` не указана, для получения IP-адреса будет использоваться системный DNS, а приоритет IPv4 или IPv6 будет определяться системой. ::: > `publicKey`: string Публичный ключ сервера, используемый для аутентификации, обязательный параметр. > `preSharedKey`: string Дополнительный ключ симметричного шифрования. > `keepAlive`: int Интервал отправки keep-alive пакетов в секундах, значение по умолчанию - 0, что означает отсутствие keep-alive. > `allowedIPs`: string array WireGuard разрешает трафик только от определенных исходных IP-адресов.