Files
XTLS_Xray-docs-next/docs/ru/config/inbounds/wireguard.md
T
2026-09-14 09:21:42 +08:00

8.6 KiB
Raw Blame History

WireGuard

Реализация протокола WireGuard в пространстве пользователя для установления туннеля WireGuard с удалённым узлом и приёма входящего через этот туннель трафика.

::: danger Протокол WireGuard не предназначен специально для обхода блокировок. При использовании на внешнем уровне его характерные признаки могут привести к блокировке сервера. :::

InboundConfigurationObject

InboundConfigurationObject соответствует элементу settings в InboundObject.

{
  "inbounds": [
    {
      // ...
      "protocol": "wireguard",
      // [!code focus:14]
      "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
      }
    }
  ]
}

secretKey: string

Закрытый ключ сервера. Обязательное поле.

Пару ключей сервера можно создать командой xray wg. Укажите здесь полученный PrivateKey; выведенный вместе с ним Password (PublicKey) является открытым ключом сервера. Если Xray используется в качестве клиента WireGuard, открытый ключ сервера следует указать в outbounds[].settings.peers[].publicKey.

peers: [ PeersObject ]

Список клиентов WireGuard, каждый элемент которого содержит конфигурацию одного клиента. Если настроено несколько клиентов, Xray сопоставляет адрес источника расшифрованного внутреннего IP-пакета с allowedIPs каждого клиента, чтобы определить, какому клиенту принадлежит трафик.

::: details Сетевая модель входящего подключения Xray WireGuard В обычной сети WireGuard, включая соединения «точка — точка», «точка — сеть» и «сеть — сеть», обе стороны участвуют в IP-маршрутизации через сетевые интерфейсы третьего уровня.

В отличие от такой схемы, входящее подключение Xray WireGuard не создаёт TUN-интерфейс в системе, а серверу не требуется назначать внутренний IP-адрес туннеля. Расшифрованные внутренние IP-пакеты обрабатываются встроенным сетевым стеком: содержащийся в них TCP- и UDP-трафик преобразуется в прокси-соединения и передаётся системе маршрутизации Xray вместо дальнейшей пересылки исходных IP-пакетов.

Клиент может отправлять как собственный трафик, так и трафик сетей за ним, выступая в роли шлюза. Сервер Xray не является доступным клиентам узлом третьего уровня внутри туннеля и не передаёт исходные IP-пакеты системному ядру для дальнейшей маршрутизации или NAT.

allowedIPs используется при обработке пакетов в обоих направлениях: при приёме WireGuard проверяет адрес источника расшифрованного внутреннего IP-пакета, а Xray использует этот адрес для определения клиента; при отправке ответных пакетов WireGuard выбирает соответствующего клиента по внутреннему адресу назначения. :::

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. :::

PeersObject

{
  "publicKey": "CLIENT_PUBLIC_KEY",
  "preSharedKey": "PRE_SHARED_KEY",
  "keepAlive": 0,
  "allowedIPs": ["0.0.0.0/0", "::/0"],
  "email": "love@xray.com",
  "level": 0
}

publicKey: string

Открытый ключ клиента, используемый для проверки. Обязательное поле.

Если Xray используется в качестве клиента WireGuard, здесь следует указать Password (PublicKey), соответствующий закрытому ключу клиента в outbounds[].settings.secretKey.

preSharedKey: string

Дополнительный симметричный ключ шифрования. Необязательное поле. Он должен совпадать с ключом в конфигурации клиента.

keepAlive: int

Интервал отправки сервером этому клиенту пакетов persistent keepalive, в секундах. Значение по умолчанию — 0, то есть пакеты не отправляются.

allowedIPs: [ string ]

Задаёт IP-адреса или подсети, которые этому клиенту разрешено использовать в качестве адреса источника. Каждый элемент указывается в формате CIDR.

Значение address исходящего подключения клиента должно входить в allowedIPs соответствующего пира на сервере. Например, если outbounds[].settings.address клиента равно ["10.0.0.2"], здесь можно указать ["10.0.0.2/32"].

В allowedIPs можно указывать не только внутренний IP-адрес клиента, но и сети, трафик которых маршрутизируется через этот пир. Например, если сторонний клиент WireGuard служит шлюзом для 192.168.10.0/24, эту сеть можно добавить сюда; на самом клиенте также необходимо настроить маршрутизацию и включить пересылку IP-пакетов.

При наличии только одного клиента поле можно опустить; значение по умолчанию — ["0.0.0.0/0", "::/0"]. Если настроено несколько клиентов, необходимо явно указать непересекающиеся значения allowedIPs, иначе надёжно различать клиентов будет невозможно.

email: string

Необязательный адрес электронной почты пользователя для различения трафика разных пользователей. Отображается в журналах и статистике.

level: number

Уровень пользователя. Для соединений применяется локальная политика, соответствующая этому уровню. Значение по умолчанию — 0.