You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

217 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Входящие подключения
Входящие подключения используются для приема данных. Доступные протоколы см. в разделе [Входящие протоколы](./inbounds/).
## InboundObject
`InboundObject` соответствует дочернему элементу поля `inbounds` в конфигурационном файле.
```json
{
"inbounds": [
{
"listen": "127.0.0.1",
"port": 1080,
"protocol": "название протокола",
"settings": {},
"streamSettings": {},
"tag": "тег",
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
},
"allocate": {
"strategy": "always",
"refresh": 5,
"concurrency": 3
}
}
]
}
```
> `listen`: address
Адрес прослушивания, IP-адрес или Unix domain socket.
Значение по умолчанию - `"0.0.0.0"`, что означает прием подключений на всех сетевых интерфейсах.
Можно указать любой доступный в системе IP-адрес.
Поддерживается указание Unix domain socket в формате абсолютного пути, например `"/dev/shm/domain.socket"`.
Можно добавить `@` в начало пути, чтобы использовать [абстрактный сокет](https://www.man7.org/linux/man-pages/man7/unix.7.html), или `@@`, чтобы использовать абстрактный сокет с заполнением.
При указании Unix domain socket параметры `port` и `allocate` игнорируются.
В настоящее время поддерживаются протоколы VLESS, VMess, Trojan и типы транспорта TCP, WebSocket, HTTP/2, gRPC.
При указании Unix domain socket можно указать права доступа к сокету, добавив запятую и индикатор прав доступа, например `"/dev/shm/domain.socket,0666"`.
Это может помочь решить проблемы с правами доступа к сокету, которые возникают по умолчанию.
> `port`: number | "env:variable" | string
Порт.
Допустимые форматы:
- Целое число: фактический номер порта.
- Переменная окружения: начинается с `"env:"`, за которым следует имя переменной окружения, например `"env:PORT"`.
Xray будет анализировать эту переменную окружения как строку.
- Строка: может быть числом в виде строки, например `"1234"`, или диапазоном портов, например `"5-10"`, что означает порты с 5 по 10 (6 портов).
Можно использовать запятые для разделения диапазонов, например `11,13,15-17`, что означает порты 11, 13, 15, 16 и 17 (5 портов).
Если указан только один порт, Xray будет прослушивать входящие подключения на этом порту.
Если указан диапазон портов, то фактическое поведение зависит от настройки `allocate`.
> `protocol`: "dokodemo-door" | "http" | "shadowsocks" | "socks" | "vless" | "vmess" | "trojan" | "wireguard"
Название протокола подключения.
Список доступных протоколов см. в разделе "Входящие подключения" в левой части документации.
> `settings`: InboundConfigurationObject
Конкретные настройки зависят от протокола.
См. описание `InboundConfigurationObject` для каждого протокола.
> `streamSettings`: [StreamSettingsObject](./transport.md#streamsettingsobject)
Тип транспорта (transport) - это способ взаимодействия текущего узла Xray с другими узлами.
> `tag`: string
Тег этого входящего подключения, используемый для идентификации этого подключения в других настройках.
::: danger
Если это поле не пустое, его значение должно быть **уникальным** среди всех тегов.
:::
> `sniffing`: [SniffingObject](#sniffingobject)
Обнаружение трафика в основном используется для прозрачного проксирования и других целей.
Например, типичный сценарий выглядит следующим образом:
1. Устройство пытается получить доступ к abc.com.
Сначала устройство выполняет DNS-запрос и получает IP-адрес 1.2.3.4 для abc.com.
Затем устройство пытается установить соединение с 1.2.3.4.
2. Если обнаружение трафика не настроено, Xray получает запрос на подключение к 1.2.3.4 и не может использовать доменные правила для маршрутизации и разделения трафика.
3. Если в sniffing включен параметр `enabled`, Xray при обработке трафика этого соединения попытается извлечь доменное имя из данных трафика, т.е. abc.com.
4. Xray заменит 1.2.3.4 на abc.com.
Маршрутизация сможет использовать доменные правила для разделения трафика.
Так как запрос теперь направляется на abc.com, можно выполнять больше действий, например, повторное разрешение DNS, помимо разделения трафика по доменным правилам.
Если в sniffing включен параметр `enabled`, Xray также сможет обнаруживать трафик типа bittorrent, а затем можно настроить правила маршрутизации по протоколу, чтобы обрабатывать трафик BT, например, блокировать его на сервере или перенаправлять его на определенный VPS на клиенте.
> `allocate`: [AllocateObject](#allocateobject)
Настройки выделения портов при указании нескольких портов.
### SniffingObject
```json
{
"enabled": true,
"destOverride": ["http", "tls", "fakedns"],
"metadataOnly": false,
"domainsExcluded": [],
"routeOnly": false
}
```
> `enabled`: true | false
Включить обнаружение трафика.
> `destOverride`: \["http" | "tls" | "quic" | "fakedns" | "fakedns+others" \]
Заменить целевой адрес текущего подключения на указанные типы, если трафик соответствует им.
`["fakedns+others"]` эквивалентно `["http", "tls", "quic", "fakedns"]`.
Если IP-адрес находится в диапазоне FakeIP, но не найдено соответствие доменному имени, будут использованы `http`, `tls` и `quic`.
Этот параметр действителен только при `metadataOnly` = `false`.
::: tip
Xray будет использовать доменные имена, обнаруженные с помощью sniffing, только для маршрутизации.
Если вы хотите только обнаруживать доменные имена для маршрутизации, но не хотите изменять целевой адрес (например, при использовании Tor Browser изменение целевого адреса может привести к невозможности подключения), добавьте соответствующие протоколы в этот список и включите `routeOnly`.
:::
> `metadataOnly`: true | false
Если этот параметр включен, для обнаружения целевого адреса будут использоваться только метаданные подключения.
В этом случае все снифферы, кроме `fakedns`, будут отключены (включая `fakedns+others`).
Если этот параметр отключен, для определения целевого адреса будут использоваться не только метаданные, но и данные.
В этом случае клиенту необходимо сначала отправить данные, чтобы прокси-сервер установил соединение.
Это поведение несовместимо с протоколами, которые требуют, чтобы сервер первым отправил сообщение, например, SMTP.
> `domainsExcluded`: [string] <Badge text="WIP" type="warning"/>
Список доменных имен, для которых **не будет** выполняться замена целевого адреса, если они обнаружены с помощью sniffing.
Поддерживаются прямые доменные имена (точное совпадение) или регулярные выражения, начинающиеся с `regexp:`.
::: tip
Добавление некоторых доменных имен может решить проблемы с push-уведомлениями iOS, умными устройствами Mijia и голосовым чатом в некоторых играх (Rainbow Six Siege).<br>
Если вам нужно выяснить причину каких-либо проблем, попробуйте отключить `"sniffing"` или включить `"routeOnly"`.
:::
```json
"domainsExcluded": [
"courier.push.apple.com", // Push-уведомления iOS
"Mijia Cloud", // Умные устройства Mijia
"dlg.io.mi.com"
]
```
::: warning
В настоящее время `domainsExcluded` не поддерживает способы сопоставления доменов, аналогичные тем, что используются в маршрутизации.
Этот параметр может быть изменен в будущем, совместимость между версиями не гарантируется.
:::
> `routeOnly`: true | false
Использовать обнаруженные доменные имена только для маршрутизации.
Целевой адрес прокси-сервера остается IP-адресом.
Значение по умолчанию - `false`.
Этот параметр требует, чтобы `destOverride` был включен.
::: tip
Если вы уверены, что **проксируемое соединение будет правильно разрешено DNS**, то при использовании `routeOnly` и включенном `destOverride` можно установить стратегию сопоставления маршрутов `domainStrategy` в `AsIs`, чтобы реализовать разделение трафика по доменам и IP-адресам без DNS-разрешения.
В этом случае при сопоставлении правил на основе IP-адресов будет использоваться исходный IP-адрес домена.
:::
### AllocateObject
```json
{
"strategy": "always",
"refresh": 5,
"concurrency": 3
}
```
> `strategy`: "always" | "random"
Стратегия выделения портов.
- `"always"` - всегда выделять все указанные порты.
Xray будет прослушивать все порты, указанные в `port`.
- `"random"` - случайным образом открывать порты.
Каждые `refresh` минут Xray будет случайным образом выбирать `concurrency` портов из диапазона, указанного в `port`, и прослушивать их.
> `refresh`: number
Интервал обновления случайных портов в минутах.
Минимальное значение - `2`, рекомендуемое значение - `5`.
Этот параметр действителен только при `strategy` = `"random"`.
> `concurrency`: number
Количество случайных портов.
Минимальное значение - `1`, максимальное значение - треть от диапазона портов, указанного в `port`.
Рекомендуемое значение - `3`.