mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-09-29 10:27:57 +03:00
148 lines
7.2 KiB
Markdown
148 lines
7.2 KiB
Markdown
# 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 и имеет ли пользователь права CAP_NET_ADMIN, чтобы решить, использовать ли системный виртуальный интерфейс. Если он не используется, применяется gvisor. Системный виртуальный интерфейс обеспечивает более высокую производительность. Обратите внимание, что это относится только к обработке IP-пакетов и не связано с ядром Wireguard.
|
|
|
|
Эта проверка может быть неточной. Например, некоторые виртуализации lxc могут изначально не иметь прав на TUN, что приведет к невозможности работы outbound. В таких случаях можно вручную отключить использование системного интерфейса.
|
|
|
|
При использовании системного интерфейса IPv6 резервирует таблицу маршрутов с номером 10230. Для каждого нового Wireguard outbound таблица увеличивается на 1 (10231, 10232 и т.д.).
|
|
|
|
Если на одной машине запускается второй экземпляр Xray, он попытается использовать таблицу 10230, что вызовет конфликт с первым экземпляром. В таких случаях необходимо отключить использование системного интерфейса.
|
|
|
|
> `mtu`: int
|
|
|
|
MTU нижнего уровня tun в Wireguard.
|
|
|
|
<details>
|
|
<summary>Метод расчета MTU</summary>
|
|
|
|
Структура пакета Wireguard:
|
|
|
|
```
|
|
- 20-байтный заголовок IPv4 или 40-байтный заголовок IPv6
|
|
- 8-байтный заголовок UDP
|
|
- 4 байта — тип
|
|
- 4 байта — индекс ключа
|
|
- 8 байт — nonce
|
|
- N байт — зашифрованные данные
|
|
- 16 байт — аутентификационный тег
|
|
```
|
|
|
|
`N байт — зашифрованные данные` — это значение MTU. Для IPv4 оно равно 1440, для IPv6 — 1420. В особых условиях значение может быть уменьшено (например, для PPPoE — минус 8 байт).
|
|
|
|
</details>
|
|
|
|
> `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-адресов.
|