translate /config/outbounds/*.md

pull/529/head
Nikita Korotaev 2024-07-16 18:26:34 +05:00
parent 1cf58c7906
commit 6deb427a5a
No known key found for this signature in database
GPG Key ID: 82915BEF12A2A204
6 changed files with 716 additions and 0 deletions

View File

@ -0,0 +1,123 @@
# Shadowsocks
Протокол [Shadowsocks](https://ru.wikipedia.org/wiki/Shadowsocks), совместимый с большинством других реализаций.
Текущая совместимость:
- Поддерживает пересылку пакетов TCP и UDP, при этом UDP можно выборочно отключить;
- Рекомендуемые методы шифрования:
- 2022-blake3-aes-128-gcm
- 2022-blake3-aes-256-gcm
- 2022-blake3-chacha20-poly1305
- Другие методы шифрования:
- aes-256-gcm
- aes-128-gcm
- chacha20-poly1305 или chacha20-ietf-poly1305
- xchacha20-poly1305 или xchacha20-ietf-poly1305
- none или plain
Новый формат протокола Shadowsocks 2022 повышает производительность и обеспечивает полную защиту от повторов, решая следующие проблемы безопасности старого протокола:
- [Серьезные уязвимости в шифровании Shadowsocks AEAD, которые не могут гарантировать целостность содержимого](https://github.com/shadowsocks/shadowsocks-org/issues/183)
- Возрастающий коэффициент ложных срабатываний исходного фильтра повторов TCP с течением времени
- Отсутствие защиты от повторов UDP
- Поведение TCP, которое можно использовать для активного зондирования
::: danger
При использовании метода шифрования "none" трафик передается в открытом виде. В целях безопасности не используйте этот метод в общедоступных сетях.
:::
## OutboundConfigurationObject
```json
{
"servers": [
{
"email": "love@xray.com",
"address": "127.0.0.1",
"port": 1234,
"method": "метод_шифрования",
"password": "пароль",
"uot": true,
"UoTVersion": 2,
"level": 0
}
]
}
```
> `servers`: \[[ServerObject](#serverobject)\]
Массив, представляющий собой набор настроек сервера Shadowsocks, каждый элемент которого является [ServerObject](#serverobject).
### ServerObject
```json
{
"email": "love@xray.com",
"address": "127.0.0.1",
"port": 1234,
"method": "метод_шифрования",
"password": "пароль",
"uot": true,
"UoTVersion": 2,
"level": 0
}
```
> `email`: string
Адрес электронной почты, необязательный параметр, используется для идентификации пользователя.
> `address`: address
Адрес сервера Shadowsocks, поддерживаются IPv4, IPv6 и доменные имена. Обязательный параметр.
> `port`: number
Порт сервера Shadowsocks. Обязательный параметр.
> `method`: string
Обязательный параметр.
> `password`: string
Обязательный параметр.
> `uot`: bool
Включить `udp over tcp`.
> `UoTVersion`: number
Версия реализации `UDP over TCP`.
Допустимые значения: `1`, `2`.
- Shadowsocks 2022
В качестве пароля используется предварительный общий ключ, аналогичный ключам WireGuard.
Используйте `openssl rand -base64 <длина>`, чтобы сгенерировать ключ, совместимый с shadowsocks-rust, длина зависит от используемого метода шифрования.
| Метод шифрования | Длина ключа |
| ------------------------------------ | ----------: |
| 2022-blake3-aes-128-gcm | 16 |
| 2022-blake3-aes-256-gcm | 32 |
| 2022-blake3-chacha20-poly1305 | 32 |
В реализации Go всегда работают 32-битные ключи.
- Другие методы шифрования
Любая строка. Длина пароля не ограничена, но короткие пароли более уязвимы для взлома, рекомендуется использовать пароли длиной 16 символов или более.
> `level`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Значение `level` соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.

View File

@ -0,0 +1,94 @@
# Socks
Стандартная реализация протокола Socks, совместимая с [Socks 4](http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol), [Socks 4a](https://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4A.protocol) и Socks 5.
::: danger
**Протокол Socks не обеспечивает шифрования передачи, поэтому он не подходит для передачи данных через общедоступные сети.**
:::
## OutboundConfigurationObject
```json
{
"servers": [
{
"address": "127.0.0.1",
"port": 1234,
"users": [
{
"user": "test user",
"pass": "test pass",
"level": 0
}
]
}
]
}
```
> `servers`: \[ [ServerObject](#serverobject) \]
Список Socks-серверов, где каждый элемент представляет собой конфигурацию сервера.
### ServerObject
```json
{
"address": "127.0.0.1",
"port": 1234,
"users": [
{
"user": "test user",
"pass": "test pass",
"level": 0
}
]
}
```
> `address`: address
Адрес сервера, обязательный параметр.
::: tip
Поддерживается подключение только к Socks 5 серверам.
:::
> `port`: number
Порт сервера, обязательный параметр.
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий список пользователей, где каждый элемент представляет собой конфигурацию пользователя.
Если список не пуст, Socks-клиент будет использовать информацию о пользователе для аутентификации; если не указан, аутентификация не выполняется.
Значение по умолчанию: пустой массив.
#### UserObject
```json
{
"user": "test user",
"pass": "test pass",
"level": 0
}
```
> `user`: string
Имя пользователя, тип данных: строка. Обязательный параметр.
> `pass`: string
Пароль, тип данных: строка. Обязательный параметр.
> `level`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Значение userLevel соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.

View File

@ -0,0 +1,67 @@
# Trojan
Протокол [Trojan](https://trojan-gfw.github.io/trojan/protocol).
::: danger
Trojan предназначен для работы в правильно настроенном зашифрованном TLS-туннеле.
:::
## OutboundConfigurationObject
```json
{
"servers": [
{
"address": "127.0.0.1",
"port": 1234,
"password": "password",
"email": "love@xray.com",
"level": 0
}
]
}
```
> `servers`: \[ [ServerObject](#serverobject) \]
Массив, каждый элемент которого является [ServerObject](#serverobject).
### ServerObject
```json
{
"address": "127.0.0.1",
"port": 1234,
"password": "password",
"email": "love@xray.com",
"level": 0
}
```
> `address`: address
Адрес сервера, поддерживаются IPv4, IPv6 и доменные имена. Обязательный параметр.
> `port`: number
Порт сервера, обычно тот же, что и порт, прослушиваемый сервером.
> `password`: string
Пароль. Обязательный параметр, любая строка.
> `email`: string
Адрес электронной почты, необязательный параметр, используется для идентификации пользователя.
> `level`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Значение level соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.

View File

@ -0,0 +1,139 @@
# VLESS
::: danger
VLESS не предусматривает встроенного шифрования, поэтому обязательным условием для его использования является наличие надежного канала, такого как TLS или REALITY.
:::
VLESS - это легкий транспортный протокол без сохранения состояния, который разделен на входящую и исходящую части и может служить мостом между клиентом и сервером Xray.
В отличие от [VMess](./vmess.md), VLESS не зависит от системного времени, аутентификация также осуществляется с помощью UUID.
## OutboundConfigurationObject
```json
{
"vnext": [
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0
}
]
}
]
}
```
> `vnext`: \[ [ServerObject](#serverobject) \]
Массив, представляющий список серверов VLESS, содержащий набор конфигураций, указывающих на сервер, где каждый элемент является конфигурацией сервера.
### ServerObject
```json
{
"address": "example.com",
"port": 443,
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0
}
]
}
```
> `address`: address
Адрес сервера, указывающий на сервер, поддерживаются доменные имена, IPv4 и IPv6.
> `port`: number
Порт сервера, обычно тот же, что и порт, прослушиваемый сервером.
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий список пользователей, распознаваемых сервером, где каждый элемент является конфигурацией пользователя.
### UserObject
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"encryption": "none",
"flow": "xtls-rprx-vision",
"level": 0
}
```
> `id`: string
Идентификатор пользователя VLESS, может быть любой строкой длиной менее 30 байт или допустимым UUID.
Пользовательская строка и ее UUID-отображение эквивалентны, это означает, что вы можете использовать следующие способы записи id в файле конфигурации для идентификации одного и того же пользователя:
- Напишите `"id": "Я люблю арбуз учителя 1314"`,
- Или напишите `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (этот UUID является UUID-отображением строки "Я люблю арбуз учителя 1314")
Стандарт сопоставления описан в [VLESS UUID Mapping Standard: Mapping Custom Strings to a UUIDv5](https://github.com/XTLS/Xray-core/issues/158).
Вы можете использовать команду `xray uuid -i "Пользовательская строка"` для генерации UUID, соответствующего пользовательской строке. Вы также можете использовать команду `xray uuid` для генерации случайного UUID.
> `encryption`: "none"
Необходимо указать `"none"`, значение не может быть пустым.
Это требование призвано напомнить пользователю об отсутствии шифрования, а также предотвратить ошибки пользователей при вводе имени атрибута или его расположения в будущем, когда будут доступны методы шифрования.
Если значение encryption установлено неверно, при использовании Xray или -test будет выдано сообщение об ошибке.
> `flow`: string
Режим управления потоком, используется для выбора алгоритма XTLS.
В настоящее время для исходящего протокола доступны следующие режимы управления потоком:
- Отсутствует `flow` или пустая строка: используется обычный TLS-прокси.
- `xtls-rprx-vision`: используется новый режим XTLS, включает случайное заполнение внутреннего рукопожатия, поддерживает uTLS для имитации отпечатка клиента.
- `xtls-rprx-vision-udp443`: аналогично `xtls-rprx-vision`, но разрешает UDP-трафик, направленный на порт 443.
Кроме того, в настоящее время XTLS поддерживает только три транспортных протокола: TCP, mKCP и DomainSocket.
<!-- prettier-ignore -->
::: tip О режимах управления потоком xtls-rprx-*-udp443
Когда XTLS в Xray-core включен, трафик, направленный на UDP-порт 443 (обычно QUIC), по умолчанию блокируется, чтобы приложение не использовало QUIC, а использовало TLS, чтобы XTLS действительно вступил в силу. Фактически, QUIC сам по себе не подходит для проксирования, поскольку QUIC имеет встроенные функции TCP, и когда он передается по протоколу VLESS как UDP-трафик, базовый протокол - TCP, что эквивалентно двум уровням TCP.
Если блокировка не требуется, укажите `xtls-rprx-*-udp443` на стороне клиента, на стороне сервера оставляйте без изменений.
:::
::: tip О режиме Splice
Splice - это функция, предоставляемая ядром Linux, где ядро системы напрямую пересылает TCP, минуя память Xray, что значительно сокращает количество операций копирования данных и переключения контекста процессора.
Ограничения использования режима Splice:
- Среда Linux.
- Входящий протокол: `Dokodemo door`, `Socks`, `HTTP` и другие чистые TCP-соединения или другие входящие протоколы, использующие XTLS.
- Исходящий протокол: VLESS + XTLS.
- Обратите внимание, что при использовании протокола mKCP Splice не будет использоваться (да, хотя ошибки и нет, на самом деле он не используется).
Кроме того, при использовании Splice отображение скорости сети будет запаздывать, это особенность, а не ошибка.
При использовании режима Vision Splice будет включен автоматически, если выполнены вышеуказанные условия.
:::
> `level`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Значение level соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.

View File

@ -0,0 +1,124 @@
# VMess
[VMess](../../development/protocols/vmess.md) - это зашифрованный транспортный протокол, который обычно используется в качестве моста между клиентами и серверами Xray.
::: danger
VMess полагается на системное время. Убедитесь, что системное время UTC, используемое Xray, находится в пределах 120 секунд от фактического времени, независимо от часового пояса. В системах Linux вы можете установить службу `ntp` для автоматической синхронизации системного времени.
:::
## OutboundConfigurationObject
```json
{
"vnext": [
{
"address": "127.0.0.1",
"port": 37192,
"users": [
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
"experiments": ""
}
]
}
]
}
```
> `vnext`: \[ [ServerObject](#serverobject) \]
Массив, содержащий набор конфигураций сервера.
Каждый элемент - это конфигурация сервера [ServerObject](#serverobject).
### ServerObject
```json
{
"address": "127.0.0.1",
"port": 37192,
"users": []
}
```
> `address`: address
Адрес сервера, поддерживается IP-адрес или доменное имя.
> `port`: number
Номер порта, который прослушивает сервер, обязательный параметр.
> `users`: \[ [UserObject](#userobject) \]
Массив, представляющий группу пользователей, распознаваемых сервером.
Каждый элемент - это пользователь [UserObject](#userobject).
#### UserObject
```json
{
"id": "5783a3e7-e373-51cd-8642-c83782b807c5",
"security": "auto",
"level": 0,
"experiments": ""
}
```
> `id`: string
Идентификатор пользователя VMess, может быть любой строкой длиной менее 30 байт или допустимым UUID.
Пользовательская строка и соответствующий ей UUID эквивалентны, что означает, что вы можете использовать любой из следующих вариантов в файле конфигурации для идентификации одного и того же пользователя:
- Напишите `"id": "Я люблю арбуз учителя 1314"`,
- Или напишите `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (этот UUID является сопоставлением строки "Я люблю арбуз учителя 1314")
Стандарт сопоставления описан в [VLESS UUID Mapping Standard: Mapping Custom Strings to a UUIDv5](https://github.com/XTLS/Xray-core/issues/158).
Вы можете использовать команду `xray uuid -i "пользовательская строка"` для создания UUID, соответствующего пользовательской строке. Вы также можете использовать команду `xray uuid` для создания случайного UUID.
> `level`: number
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
Значение level соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.
> `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
Метод шифрования. Клиент будет отправлять данные с использованием настроенного метода шифрования, сервер автоматически распознает его, настройка на сервере не требуется.
- `"aes-128-gcm"`: рекомендуется для использования на ПК.
- `"chacha20-poly1305"`: рекомендуется для использования на мобильных устройствах.
- `"auto"`: значение по умолчанию, автоматический выбор (метод шифрования aes-128-gcm, если платформа выполнения - AMD64, ARM64 или s390x, в противном случае - Chacha20-Poly1305).
- `"none"`: без шифрования.
* `"zero"`: без шифрования и проверки подлинности сообщений (v1.4.0+).
::: tip
Рекомендуется использовать метод шифрования `"auto"`, чтобы обеспечить безопасность и совместимость в долгосрочной перспективе.
Метод псевдошифрования `"none"` будет вычислять и проверять контрольные суммы пакетов данных, но поскольку алгоритм аутентификации не имеет аппаратной поддержки, на некоторых платформах он может быть медленнее, чем `"aes-128-gcm"` с аппаратным ускорением.
Метод псевдошифрования `"zero"` не шифрует сообщения и не вычисляет контрольные суммы данных, поэтому теоретически он должен быть быстрее любого другого метода шифрования. Фактическая скорость может зависеть от других факторов.
Не рекомендуется использовать методы псевдошифрования `"none"` и `"zero"` без включенного TLS-шифрования и обязательной проверки сертификатов.
Если для установления соединения используется CDN или другая промежуточная платформа, расшифровывающая TLS, или сетевая среда, не рекомендуется использовать методы псевдошифрования `"none"` и `"zero"`.
Независимо от используемого метода шифрования, заголовок пакета VMess защищен шифрованием и аутентификацией.
:::
> `experiments`: string
Включенные экспериментальные функции протокола VMess. (Функции здесь нестабильны и могут быть удалены в любое время). Несколько включенных экспериментов можно разделить символом |, например, "AuthenticatedLength|NoTerminationSignal".
"AuthenticatedLength" включает эксперимент с аутентифицированной длиной пакета. Этот эксперимент необходимо включить одновременно на клиенте и сервере, а также запустить одну и ту же версию программы.
"NoTerminationSignal" включает эксперимент с отключением сигнала завершения соединения. Этот эксперимент может повлиять на стабильность проксируемого соединения.

View File

@ -0,0 +1,169 @@
# 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-адресов.