WireGuard

Стандартная реализация протокола WireGuard.

Предупреждение

Протокол WireGuard не предназначен для обхода блокировок, и его использование может привести к блокировке сервера из-за наличия характерных признаков.

OutboundConfigurationObject

{
  "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"
}

Подсказка

В настоящее время в исходящем протоколе WireGuard не поддерживается настройка streamSettings.

secretKey: string

Приватный ключ пользователя. Обязательный параметр.

address: string array

WireGuard создаст виртуальный сетевой интерфейс TUN на локальном компьютере. Используйте один или несколько IP-адресов, IPv6 поддерживается.

kernelMode: true | false

Использовать ли TUN виртуального сетевого интерфейса ядра Linux.
Для использования TUN виртуального сетевого интерфейса ядра Linux требуется поддержка системы и права root, после использования будет занята 1023-я таблица маршрутизации IPv6.

Подсказка

Если в 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Открыть в новой вкладке, warp-reg.shОткрыть в новой вкладке.

workers: int

Количество потоков, используемых WireGuard.

peers: [ Peers ]

Список серверов WireGuard, где каждый элемент является конфигурацией сервера.

domainStrategy: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP"

Новый параметр в Xray-core v1.8.6.
Если этот параметр не указан или оставлен пустым, используется значение по умолчанию "ForceIP".
Если целевой адрес является доменным именем, для получения IP-адреса используется встроенный DNS-сервер Xray-core (если конфигурация "dns" не указана, используется системный DNS), и этот IP-адрес отправляется через WireGuard для установления соединения.

Подсказка

Если значение domainStrategy конфликтует со значением "queryStrategy" в конфигурации "dns", это может привести к ошибкам при открытии веб-сайтов.

    "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.

Подсказка

В Xray-core v1.8.0 - v1.8.4 нет "domainStrategy".
Если целевой адрес является доменным именем, для получения IP-адреса используется встроенный DNS-сервер Xray-core. Значение "queryStrategy" в конфигурации "dns" используется для управления приоритетом IPv4 или IPv6.
Если конфигурация "dns" не указана, для получения IP-адреса используется системный DNS, а приоритет IPv4 или IPv6 определяется системой.

Peers

{
  "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.

Подсказка

Если целевой адрес имеет тип 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-адресов.