Warning

This translation was modified on 16 July 2024 and an updated version (1 November 2024) is available on the source page. View the original page

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-адресов.