You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
8.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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.<br>
Для использования TUN виртуального сетевого интерфейса ядра Linux требуется поддержка системы и права root, после использования будет занята 1023-я таблица маршрутизации IPv6.<br>
::: tip
Если в 1023-й таблице маршрутизации IPv6 уже есть записи маршрутов и значение `kernelMode` равно `true`, нормальная работа будет невозможна.
:::
> `mtu`: int
Размер фрагментации TUN нижнего уровня WireGuard.
<details>
<summary>Как рассчитать MTU</summary>
Структура пакета WireGuard выглядит следующим образом:
```
- 20-байтовый заголовок IPv4 или 40-байтовый заголовок IPv6
- 8-байтовый заголовок UDP
- 4 байта типа
- 4 байта индекса ключа
- 8 байтов nonce
- N байтов зашифрованных данных
- 16-байтовый тег аутентификации
```
`N байтов зашифрованных данных` - это значение MTU, которое нам нужно. В зависимости от того, использует ли конечная точка IPv4 или IPv6, конкретное значение может быть 1440 (IPv4) или 1420 (IPv6), и его можно дополнительно уменьшить, если это необходимо в особых условиях (например, PPPoE для домашнего интернета требует дополнительного вычитания 8).
</details>
> `reserved` \[ number \]
Зарезервированные байты WireGuard.
Новый параметр в Xray-core v1.8.0.<br>
При подключении к Warp через WireGuard из-за ограничений Cloudflare для некоторых IP-адресов в Гонконге и Лос-Анджелесе требуется значение `reserved` для успешного подключения.<br>
Значение `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.<br>
Если этот параметр не указан или оставлен пустым, используется значение по умолчанию `"ForceIP"`.<br>
Если целевой адрес является доменным именем, для получения IP-адреса используется [встроенный DNS-сервер](../dns.md) Xray-core (если конфигурация `"dns"` не указана, используется системный DNS), и этот IP-адрес отправляется через WireGuard для установления соединения.<br>
::: 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"`.<br>
Если целевой адрес является доменным именем, для получения IP-адреса используется встроенный DNS-сервер Xray-core. Значение `"queryStrategy"` в конфигурации `"dns"` используется для управления приоритетом IPv4 или IPv6.<br>
Если конфигурация `"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`<br>
Формат IP:порт, например, `162.159.192.1:2408` или `[2606:4700:d0::a29f:c001]:2408`.
::: tip
Если целевой адрес имеет тип URL, для получения IP-адреса будет использоваться встроенный DNS-сервер Xray-core, приоритет IPv4 или IPv6 определяется значением `domainStrategy`.<br>
Если конфигурация `"dns"` не указана, для получения IP-адреса будет использоваться системный DNS, а приоритет IPv4 или IPv6 будет определяться системой.
:::
> `publicKey`: string
Публичный ключ сервера, используемый для аутентификации, обязательный параметр.
> `preSharedKey`: string
Дополнительный ключ симметричного шифрования.
> `keepAlive`: int
Интервал отправки keep-alive пакетов в секундах, значение по умолчанию - 0, что означает отсутствие keep-alive.
> `allowedIPs`: string array
WireGuard разрешает трафик только от определенных исходных IP-адресов.