mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-14 10:09:16 +03:00
We only explain in detail the concepts we've introduced and the things people often confuse, rather than over-explaining every single field. (wireguard official doc already has these for advance user)
141 lines
9.7 KiB
Markdown
141 lines
9.7 KiB
Markdown
# WireGuard
|
||
|
||
Реализация протокола WireGuard в пространстве пользователя для установления туннеля WireGuard с удалённым узлом, инкапсулирующая перенаправленные в это исходящее подключение TCP/UDP-запросы в IP-пакеты и отправляющая их через туннель WireGuard.
|
||
|
||
::: danger
|
||
**Протокол WireGuard не предназначен специально для обхода блокировок. При использовании на внешнем уровне его характерные признаки могут привести к блокировке сервера.**
|
||
:::
|
||
|
||
## OutboundConfigurationObject
|
||
|
||
`OutboundConfigurationObject` соответствует элементу `settings` в [`OutboundObject`](../outbound.md).
|
||
|
||
```json
|
||
{
|
||
"outbounds": [
|
||
{
|
||
// ...
|
||
"protocol": "wireguard",
|
||
// [!code focus:20]
|
||
"settings": {
|
||
"secretKey": "CLIENT_PRIVATE_KEY",
|
||
"address": ["10.0.0.1", "fd59:7153:2388:b5fd:0000:0000:0000:0001"],
|
||
"peers": [
|
||
{
|
||
"endpoint": "example.com:2408",
|
||
"publicKey": "SERVER_PUBLIC_KEY",
|
||
"allowedIPs": ["0.0.0.0/0", "::/0"]
|
||
}
|
||
],
|
||
"noKernelTun": false,
|
||
"mtu": 1420,
|
||
"reserved": [0, 0, 0],
|
||
"remoteDNS": [
|
||
"1.1.1.1",
|
||
"1.0.0.1",
|
||
"2606:4700:4700::1111",
|
||
"2606:4700:4700::1001"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
> `secretKey`: string
|
||
|
||
Закрытый ключ клиента. Обязательное поле.
|
||
|
||
При создании пары ключей клиента с помощью команды `xray wg` здесь указывается выведенный `PrivateKey`.
|
||
|
||
> `address`: \[ string \]
|
||
|
||
Список локальных IP-адресов интерфейса WireGuard. При наличии нескольких адресов выбирается автоматически в зависимости от пира.
|
||
|
||
Значение по умолчанию — `["10.0.0.1", "fd59:7153:2388:b5fd:0000:0000:0000:0001"]`.
|
||
|
||
> `noKernelTun`: true | false
|
||
|
||
Принудительно отключает системный TUN независимо от результатов автоматического определения. Значение по умолчанию — `false`; в средах LXC или Docker может потребоваться значение `true`.
|
||
|
||
::: details О kernel TUN
|
||
Способ восстановления IP-пакетов WireGuard обратно в TCP/UDP-нагрузку в Xray.
|
||
По умолчанию Xray определяет автоматически: в Linux, если процесс Xray имеет привилегию `CAP_NET_ADMIN`, создаётся TUN-интерфейс и используется сетевой стек ядра; на других платформах или при недостаточных правах используется работающий внутри процесса сетевой стек gVisor. При значении `true` используется только сетевой стек gVisor и TUN-интерфейс не создаётся. Использование TUN обычно обеспечивает более высокую производительность.
|
||
|
||
Описанное автоматическое определение не всегда работает точно. Например, некоторые среды LXC могут не позволять использовать TUN даже при наличии привилегии `CAP_NET_ADMIN`, из-за чего исходящее подключение не будет работать; в таком случае установка `noKernelTun` в `true` решает проблему.
|
||
|
||
Этот параметр определяет только способ обработки внутренних IP-пакетов. Сам протокол WireGuard по-прежнему обрабатывается пользовательской реализацией Xray и не связан с модулем WireGuard ядра.
|
||
|
||
При использовании TUN задействуется таблица маршрутизации IPv6 с номером 10230. Каждое следующее исходящее подключение WireGuard последовательно использует следующую таблицу: например, второе подключение использует таблицу 10231 и так далее.
|
||
|
||
Если на том же компьютере запустить второй экземпляр Xray, нумерация таблиц не продолжится: второй экземпляр также попытается использовать таблицу 10230. Поскольку она уже занята первым экземпляром Xray, подключение установить не удастся. Если запуск нескольких экземпляров необходим, используйте этот параметр для отключения TUN.
|
||
:::
|
||
|
||
> `mtu`: int
|
||
|
||
MTU внутренних IP-пакетов в туннеле WireGuard. Значение по умолчанию — 1420.
|
||
|
||
::: details Расчёт MTU
|
||
Структура пакета WireGuard:
|
||
|
||
```
|
||
- 20-byte IPv4 header or 40 byte IPv6 header
|
||
- 8-byte UDP header
|
||
- 4-byte type
|
||
- 4-byte key index
|
||
- 8-byte nonce
|
||
- N-byte encrypted data
|
||
- 16-byte authentication tag
|
||
```
|
||
|
||
`N-byte encrypted data` — требуемое значение MTU. В зависимости от того, использует ли endpoint IPv4 или IPv6, оно может составлять 1440 (IPv4) или 1420 (IPv6). В особых сетевых условиях значение при необходимости следует дополнительно уменьшить, например ещё на 8 байт для домашнего подключения через PPPoE.
|
||
:::
|
||
|
||
> `reserved` \[ byte \]
|
||
|
||
Три зарезервированных байта протокола WireGuard. По умолчанию все три равны 0; при необходимости укажите требуемые значения.
|
||
|
||
> `peers`: \[ [PeersObject](#peersobject) \]
|
||
|
||
Список удалённых пиров WireGuard для подключения.
|
||
|
||
> `remoteDNS`: \[ string \]
|
||
|
||
Используется для разрешения целевых доменных имён проксируемого трафика. Каждый элемент должен быть IP-адресом. Значение по умолчанию — `["1.1.1.1", "1.0.0.1", "2606:4700:4700::1111", "2606:4700:4700::1001"]`.
|
||
|
||
В отличие от других исходящих подключений, адрес цели внутри туннеля WireGuard обязательно должен быть IP-адресом. Если проксируемая цель является доменным именем, необходим DNS-сервер для преобразования доменного имени в IP-адрес. Эти DNS-серверы настраиваются здесь и **отправляют DNS-запросы напрямую через этот туннель WireGuard**. Если вы хотите подключить встроенную систему DNS Xray, рассмотрите возможность предварительного разрешения через [`targetStrategy`](../outbound.md#outboundobject) исходящего подключения.
|
||
|
||
### PeersObject
|
||
|
||
```json
|
||
{
|
||
"endpoint": "example.com:2408",
|
||
"publicKey": "SERVER_PUBLIC_KEY",
|
||
"preSharedKey": "PRE_SHARED_KEY",
|
||
"keepAlive": 0,
|
||
"allowedIPs": ["0.0.0.0/0", "::/0"]
|
||
}
|
||
```
|
||
|
||
> `endpoint`: address
|
||
|
||
Адрес и порт сервера, может быть IP-адресом или доменным именем. Обязательное поле.
|
||
|
||
> `publicKey`: string
|
||
|
||
Открытый ключ пира, используемый для проверки. Обязательное поле.
|
||
|
||
При создании пары ключей с помощью `xray wg` здесь указывается выведенный `Password (PublicKey)`.
|
||
|
||
> `preSharedKey`: string
|
||
|
||
Дополнительный симметричный ключ шифрования. Необязательное поле. Он должен совпадать с ключом в конфигурации сервера.
|
||
|
||
> `keepAlive`: int
|
||
|
||
Интервал отправки клиентом этому серверу пакетов persistent keepalive, в секундах, для поддержания возможных сопоставлений NAT или состояния межсетевого экрана во время простоя. Требуется включать только в особых случаях и только на стороне клиента; значение по умолчанию — `0`, то есть пакеты не отправляются.
|
||
|
||
> `allowedIPs`: \[ string \]
|
||
|
||
Запросы, которые должны пересылаться через этот пир, в формате CIDR. Значение по умолчанию — `["0.0.0.0/0", "::/0"]`, то есть весь целевой трафик IPv4 и IPv6 пересылается через этот сервер. При совпадении нескольких пиров выбор осуществляется по принципу наибольшего совпадения префикса (longest prefix match).
|