WireGuard
Реализация протокола WireGuard в пространстве пользователя для установления туннеля WireGuard с удалённым узлом, преобразующая полученные TCP- и UDP-пакеты во внутренние прокси-запросы Xray для обработки и ответа.
DANGER
Протокол WireGuard не предназначен специально для обхода блокировок. При использовании на внешнем уровне его характерные признаки могут привести к блокировке сервера.
InboundConfigurationObject
InboundConfigurationObject соответствует элементу settings в InboundObject.
{
"inbounds": [
{
// ...
"protocol": "wireguard",
"settings": {
"secretKey": "SERVER_PRIVATE_KEY",
"peers": [
{
"publicKey": "CLIENT_PUBLIC_KEY",
"preSharedKey": "PRE_SHARED_KEY",
"keepAlive": 0,
"allowedIPs": ["0.0.0.0/0", "::/0"],
"email": "love@xray.com",
"level": 0
}
],
"mtu": 1420
}
}
]
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
secretKey: string
Закрытый ключ сервера. Обязательное поле.
При создании пары ключей сервера с помощью команды xray wg здесь указывается выведенный PrivateKey.
peers: [ PeersObject ]
Список пиров-клиентов WireGuard.
mtu: int
MTU внутренних IP-пакетов в туннеле WireGuard. Значение по умолчанию — 1420.
Расчёт 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 tag2
3
4
5
6
7
N-byte encrypted data — требуемое значение MTU. В зависимости от того, использует ли endpoint IPv4 или IPv6, оно может составлять 1440 (IPv4) или 1420 (IPv6). В особых сетевых условиях значение при необходимости следует дополнительно уменьшить, например ещё на 8 байт для домашнего подключения через PPPoE.
PeersObject
{
"publicKey": "CLIENT_PUBLIC_KEY",
"preSharedKey": "PRE_SHARED_KEY",
"keepAlive": 0,
"allowedIPs": ["0.0.0.0/0", "::/0"],
"email": "love@xray.com",
"level": 0
}2
3
4
5
6
7
8
publicKey: string
Открытый ключ клиента, используемый для проверки. Обязательное поле.
При создании пары ключей с помощью xray wg здесь указывается выведенный Password (PublicKey).
preSharedKey: string
Дополнительный симметричный ключ шифрования. Необязательное поле. Он должен совпадать с ключом в конфигурации клиента.
keepAlive: int
Интервал отправки сервером этому клиенту пакетов persistent keepalive, в секундах. Значение по умолчанию — 0, то есть пакеты не отправляются.
allowedIPs: [ string ]
Задаёт разрешённые для отправки этим клиентом IP-адреса или подсети источника в формате CIDR. Значение по умолчанию — ["0.0.0.0/0", "::/0"], то есть разрешены все адреса источников IPv4 и IPv6.
При наличии только одного клиента поле можно опустить; значение по умолчанию — ["0.0.0.0/0", "::/0"]. При настройке нескольких клиентов, в отличие от allowedIPs на стороне клиента, allowedIPs здесь не должны пересекаться: в лучшем случае это приведёт к невозможности правильно определить пир клиента, в худшем — к нарушению маршрутизации ответных пакетов.
Необязательный адрес электронной почты пользователя для различения трафика разных пользователей. Отображается в журналах и статистике.
level: number
Уровень пользователя. Для соединений применяется локальная политика, соответствующая этому уровню. Значение по умолчанию — 0.