mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2025-04-04 22:03:35 +03:00
update transport.md
This commit is contained in:
parent
d38231b5fa
commit
9f69f1a5cc
1 changed files with 151 additions and 401 deletions
|
@ -1,14 +1,14 @@
|
|||
# Транспорт
|
||||
# Способы передачи (uTLS, REALITY)
|
||||
|
||||
Транспорт (transport) - это способ, которым текущий узел Xray взаимодействует с другими узлами.
|
||||
Способ передачи (transport) — это способ взаимодействия текущего узла Xray с другими узлами.
|
||||
|
||||
Транспорт определяет способ передачи данных. Обычно оба конца сетевого подключения должны использовать одинаковый транспорт.
|
||||
Транспорт определяет способ передачи данных. Обычно оба конца сетевого подключения должны использовать одинаковый транспорт.
|
||||
Например, если один конец использует WebSocket, то другой конец также должен использовать WebSocket, иначе соединение не будет установлено.
|
||||
|
||||
|
||||
## StreamSettingsObject
|
||||
|
||||
`StreamSettingsObject` соответствует полю `streamSettings` во входящем или исходящем подключении.
|
||||
Каждое входящее или исходящее подключение может иметь свои собственные настройки транспорта.
|
||||
`StreamSettingsObject` соответствует элементу `streamSettings` во входящем или исходящем подключении. Для каждого входящего или исходящего подключения можно настроить различные параметры передачи, и можно использовать `streamSettings` для настройки некоторых параметров передачи.
|
||||
|
||||
```json
|
||||
{
|
||||
|
@ -38,85 +38,70 @@
|
|||
"v6only": false,
|
||||
"tcpWindowClamp": 600,
|
||||
"tcpMptcp": false,
|
||||
"tcpNoDelay": false,
|
||||
"customSockopt": []
|
||||
"tcpNoDelay": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `network`: "tcp" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp"
|
||||
|
||||
Тип транспорта, используемый для передачи данных.
|
||||
Значение по умолчанию - `"tcp"`.
|
||||
Тип способа передачи, используемого потоком данных соединения, по умолчанию `"tcp"`
|
||||
|
||||
::: tip
|
||||
"h2" можно записать как "http", "grpc" - как "gun", "kcp" - как "mkcp".
|
||||
"h2" можно записать как "http", "grpc" можно записать как "gun", "kcp" можно записать как "mkcp".
|
||||
:::
|
||||
|
||||
> `security`: "none" | "tls" | "reality"
|
||||
|
||||
Включить шифрование транспортного уровня.
|
||||
Доступные значения:
|
||||
Включено ли шифрование транспортного уровня, поддерживаемые опции:
|
||||
|
||||
- `"none"` - без шифрования (значение по умолчанию).
|
||||
- `"tls"` - использовать [TLS](https://ru.wikipedia.org/wiki/Transport_Layer_Security).
|
||||
- `"reality"` - использовать REALITY.
|
||||
- `"none"` означает отсутствие шифрования (значение по умолчанию)
|
||||
- `"tls"` означает использование [TLS](https://ru.wikipedia.org/wiki/Протокол_защиты_транспортного_уровня).
|
||||
- `"reality"` означает использование REALITY.
|
||||
|
||||
> `tlsSettings`: [TLSObject](#tlsobject)
|
||||
|
||||
Настройки TLS.
|
||||
TLS предоставляется Golang.
|
||||
Обычно в результате согласования TLS используется TLS 1.3, DTLS не поддерживается.
|
||||
Конфигурация TLS. TLS предоставляется Golang, обычно результатом согласования TLS является использование TLS 1.3, DTLS не поддерживается.
|
||||
|
||||
> `realitySettings`: [RealityObject](#realityobject)
|
||||
|
||||
Настройки Reality.
|
||||
Reality - это оригинальная технология Xray.
|
||||
Reality обеспечивает более высокий уровень безопасности, чем TLS, и настраивается аналогично TLS.
|
||||
Конфигурация Reality. Reality — это оригинальная технология Xray. Reality обеспечивает более высокий уровень безопасности, чем TLS, и настраивается так же, как TLS.
|
||||
|
||||
::: tip
|
||||
Reality - это самый безопасный на данный момент способ шифрования транспорта, и внешний трафик выглядит как обычный интернет-трафик.
|
||||
Включение Reality и настройка правильного режима управления потоком XTLS Vision может привести к увеличению производительности в несколько раз.
|
||||
Reality — это самое безопасное на данный момент решение для шифрования передачи данных, и внешний вид трафика такой же, как и при обычном просмотре веб-страниц. Включение Reality и настройка подходящего режима управления потоком XTLS Vision может повысить производительность в несколько раз или даже в десятки раз.
|
||||
:::
|
||||
|
||||
> `tcpSettings`: [TcpObject](./transports/tcp.md)
|
||||
|
||||
Настройки TCP для текущего подключения, действуют только при использовании TCP.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация TCP для текущего соединения, действительна только если это соединение использует TCP.
|
||||
|
||||
> `kcpSettings`: [KcpObject](./transports/mkcp.md)
|
||||
|
||||
Настройки mKCP для текущего подключения, действуют только при использовании mKCP.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация mKCP для текущего соединения, действительна только если это соединение использует mKCP.
|
||||
|
||||
> `wsSettings`: [WebSocketObject](./transports/websocket.md)
|
||||
|
||||
Настройки WebSocket для текущего подключения, действуют только при использовании WebSocket.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация WebSocket для текущего соединения, действительна только если это соединение использует WebSocket.
|
||||
|
||||
> `httpSettings`: [HttpObject](./transports/h2.md)
|
||||
|
||||
Настройки HTTP/2 для текущего подключения, действуют только при использовании HTTP/2.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация HTTP/2 для текущего соединения, действительна только если это соединение использует HTTP/2.
|
||||
|
||||
> `grpcSettings`: [GRPCObject](./transports/grpc.md)
|
||||
|
||||
Настройки gRPC для текущего подключения, действуют только при использовании gRPC.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация gRPC для текущего соединения, действительна только если это соединение использует gRPC.
|
||||
|
||||
> `httpupgradeSettings`: [HttpUpgradeObject](./transports/httpupgrade.md)
|
||||
|
||||
Настройки HTTPUpgrade для текущего подключения, действуют только при использовании HTTPUpgrade.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация HTTPUpgrade для текущего соединения, действительна только если это соединение использует HTTPUpgrade.
|
||||
|
||||
> `splithttpSettings`: [SplitHttpObject](./transports/splithttp.md)
|
||||
|
||||
Настройки SplitHTTP для текущего подключения, действуют только при использовании SplitHTTP.
|
||||
Настройки аналогичны глобальным настройкам, описанным выше.
|
||||
Конфигурация SplitHTTP для текущего соединения, действительна только если это соединение использует SplitHTTP.
|
||||
|
||||
> `sockopt`: [SockoptObject](#sockoptobject)
|
||||
|
||||
Настройки прозрачного прокси.
|
||||
Конкретные настройки, связанные с прозрачным проксированием.
|
||||
|
||||
### TLSObject
|
||||
|
||||
|
@ -128,7 +113,7 @@ Reality - это самый безопасный на данный момент
|
|||
"alpn": ["h2", "http/1.1"],
|
||||
"minVersion": "1.2",
|
||||
"maxVersion": "1.3",
|
||||
"cipherSuites": "список наборов шифров, разделенных двоеточиями",
|
||||
"cipherSuites": "Здесь укажите названия необходимых вам наборов шифров, разделяя их двоеточиями",
|
||||
"certificates": [],
|
||||
"disableSystemRoot": false,
|
||||
"enableSessionResumption": false,
|
||||
|
@ -140,83 +125,65 @@ Reality - это самый безопасный на данный момент
|
|||
|
||||
> `serverName`: string
|
||||
|
||||
Доменное имя сертификата сервера.
|
||||
Используется, если соединение установлено по IP-адресу.
|
||||
Указывает доменное имя сертификата сервера, полезно, когда соединение устанавливается по IP-адресу.
|
||||
|
||||
Если этот параметр не указан, автоматически используется значение из `address` (если это доменное имя).
|
||||
Это значение также используется для проверки действительности сертификата сервера.
|
||||
Если оставить пустым, автоматически используется значение из адреса (если это доменное имя), это значение также используется для проверки действительности сертификата сервера.
|
||||
|
||||
::: tip
|
||||
Как упомянуто выше, поскольку это значение также используется для проверки действительности сертификата сервера, если по какой-либо причине вам нужно указать значение, отличное от доменного имени в сертификате сервера, необходимо включить параметр `allowInsecure`, иначе проверка сертификата завершится неудачей.
|
||||
Из соображений безопасности мы не рекомендуем использовать этот метод постоянно.
|
||||
Если вам нужно безопасно подменить SNI, рассмотрите возможность использования REALITY.
|
||||
Как упоминалось выше, поскольку это значение также используется для проверки действительности сертификата сервера, если вы измените его на доменное имя, отличное от доменного имени сертификата сервера, необходимо включить `allowInsecure`, иначе произойдет сбой проверки сертификата. Из соображений безопасности мы не рекомендуем использовать этот метод в течение длительного времени. Если вам нужно безопасно подделать SNI, рассмотрите возможность использования REALITY.
|
||||
|
||||
В частности, если на клиенте указан IP-адрес, Xray не будет отправлять SNI.
|
||||
Чтобы использовать эту функцию, также необходимо включить `allowInsecure`.
|
||||
В частности, если клиент устанавливает его в IP-адрес, Xray не будет отправлять SNI, и для использования этой функции также необходимо включить `allowInsecure`.
|
||||
:::
|
||||
|
||||
> `rejectUnknownSni`: bool
|
||||
|
||||
Если значение равно `true`, сервер отклонит рукопожатие TLS, если полученный SNI не совпадает с доменным именем в сертификате.
|
||||
Значение по умолчанию - `false`.
|
||||
Если значение равно `true`, то сервер отклонит рукопожатие TLS, если полученный SNI не соответствует доменному имени сертификата. По умолчанию равно `false`.
|
||||
|
||||
> `alpn`: \[ string \]
|
||||
|
||||
Массив строк, указывающий значения ALPN, используемые при рукопожатии TLS.
|
||||
Значение по умолчанию - `["h2", "http/1.1"]`.
|
||||
Массив строк, указывающий значения ALPN, указанные во время рукопожатия TLS. Значение по умолчанию: `["h2", "http/1.1"]`.
|
||||
|
||||
> `minVersion`: string
|
||||
|
||||
Минимальная допустимая версия TLS.
|
||||
`minVersion` — это минимально допустимая версия TLS.
|
||||
|
||||
> `maxVersion`: string
|
||||
|
||||
Максимальная допустимая версия TLS.
|
||||
`maxVersion` — это максимально допустимая версия TLS.
|
||||
|
||||
> `cipherSuites`: string
|
||||
|
||||
Список поддерживаемых наборов шифров, разделенных двоеточиями.
|
||||
`CipherSuites` используется для настройки списка поддерживаемых наборов шифров, разделенных двоеточиями.
|
||||
|
||||
Список наборов шифров Golang и их описания можно найти [здесь](https://golang.org/src/crypto/tls/cipher_suites.go#L500) или [здесь](https://golang.org/src/crypto/tls/cipher_suites.go#L44).
|
||||
Вы можете найти список наборов шифров Golang и их описания [здесь](https://golang.org/src/crypto/tls/cipher_suites.go#L500) или [здесь](https://golang.org/src/crypto/tls/cipher_suites.go#L44).
|
||||
|
||||
::: danger
|
||||
Эти два параметра не являются обязательными и обычно не влияют на безопасность.
|
||||
Если они не настроены, Golang автоматически выбирает их в зависимости от устройства.
|
||||
Если вы не знакомы с этими параметрами, не настраивайте их.
|
||||
Вы несете ответственность за любые проблемы, вызванные неправильной настройкой.
|
||||
Эти два параметра конфигурации не являются обязательными и обычно не влияют на безопасность. Если они не настроены, Golang автоматически выберет их в зависимости от устройства. Если вы не знакомы с ними, пожалуйста, не настраивайте эти параметры, вы несете ответственность за проблемы, вызванные неправильным заполнением.
|
||||
:::
|
||||
|
||||
> `allowInsecure`: true | false
|
||||
|
||||
Разрешить небезопасные соединения (только для клиентов).
|
||||
Значение по умолчанию - `false`.
|
||||
Разрешить ли небезопасные соединения (только для клиента). Значение по умолчанию: `false`.
|
||||
|
||||
Если значение равно `true`, Xray не будет проверять действительность сертификата TLS, предоставленного удаленным хостом.
|
||||
Если значение равно `true`, то Xray не будет проверять действительность сертификата TLS, предоставленного удаленным хостом.
|
||||
|
||||
::: danger
|
||||
Из соображений безопасности не рекомендуется устанавливать этот параметр в `true` в реальных сценариях, так как это может сделать вас уязвимыми для атак типа "человек посередине".
|
||||
Из соображений безопасности этот параметр не следует устанавливать в значение `true` в реальных сценариях, иначе вы можете подвергнуться атаке типа «человек посередине».
|
||||
:::
|
||||
|
||||
> `disableSystemRoot`: true | false
|
||||
|
||||
Отключить использование корневых сертификатов, предоставляемых операционной системой.
|
||||
Значение по умолчанию - `false`.
|
||||
Отключить ли корневые сертификаты операционной системы. Значение по умолчанию: `false`.
|
||||
|
||||
Если значение равно `true`, Xray будет использовать только сертификаты, указанные в `certificates`, для рукопожатия TLS.
|
||||
Если значение равно `false`, Xray будет использовать только корневые сертификаты, предоставляемые операционной системой, для рукопожатия TLS.
|
||||
Если значение равно `true`, то Xray будет использовать только сертификаты, указанные в `certificates`, для рукопожатия TLS. Если значение равно `false`, то Xray будет использовать только корневые сертификаты операционной системы для рукопожатия TLS.
|
||||
|
||||
> `enableSessionResumption`: true | false
|
||||
|
||||
Если этот параметр установлен в `false`, расширение `session_ticket` не будет включено в ClientHello.
|
||||
Обычно программы на Golang не используют это расширение в ClientHello, поэтому рекомендуется оставить значение по умолчанию.
|
||||
Значение по умолчанию - `false`.
|
||||
Если этот параметр установлен в `false`, то в ClientHello не будет расширения `session_ticket`. Как правило, программы на языке Go не используют это расширение в ClientHello, поэтому рекомендуется оставить значение по умолчанию. Значение по умолчанию: `false`.
|
||||
|
||||
> `fingerprint`: string
|
||||
> `fingerprint` : string
|
||||
|
||||
Этот параметр используется для настройки отпечатка `TLS Client Hello`.
|
||||
Если значение пустое, эта функция отключена.
|
||||
Если эта функция включена, Xray будет **эмулировать** отпечаток `TLS` с помощью библиотеки uTLS или генерировать его случайным образом.
|
||||
Поддерживаются три способа настройки:
|
||||
Этот параметр используется для настройки указанного отпечатка `TLS Client Hello`. Если значение пустое, эта функция отключена. При включении Xray будет **эмулировать** отпечаток `TLS` через библиотеку uTLS или генерировать его случайным образом. Поддерживаются три режима настройки:
|
||||
|
||||
1. Отпечатки TLS последних версий популярных браузеров, включая:
|
||||
|
||||
|
@ -231,45 +198,47 @@ Reality - это самый безопасный на данный момент
|
|||
|
||||
2. Автоматическая генерация отпечатка при запуске Xray:
|
||||
|
||||
- `"random"`: случайный выбор из отпечатков последних версий браузеров.
|
||||
- `"randomized"`: генерация полностью случайного уникального отпечатка (100% поддержка TLS 1.3 с использованием X25519).
|
||||
- `"random"`: случайный выбор из новых версий браузеров.
|
||||
- `"randomized"`: полная случайная генерация уникального отпечатка (100% поддержка TLS 1.3 с использованием X25519)
|
||||
|
||||
3. Использование имен переменных отпечатков uTLS, например, `"HelloRandomizedNoALPN"`, `"HelloChrome_106_Shuffle"`.
|
||||
Полный список см. в [библиотеке uTLS](https://github.com/refraction-networking/utls/blob/master/u_common.go#L434).
|
||||
3. Использование имени переменной отпечатка uTLS, например, `"HelloRandomizedNoALPN"` `"HelloChrome_106_Shuffle"`. Полный список см. в [библиотеке uTLS](https://github.com/refraction-networking/utls/blob/master/u_common.go#L434).
|
||||
|
||||
::: tip
|
||||
Эта функция только **эмулирует** отпечаток `TLS Client Hello`, поведение и другие отпечатки такие же, как у Golang.
|
||||
Если вам нужно более полно эмулировать отпечаток `TLS` и поведение браузера, используйте [Browser Dialer](./transports/websocket.md#browser-dialer).
|
||||
Эта функция только **эмулирует** отпечаток `TLS Client Hello`, поведение и другие отпечатки такие же, как у Golang. Если вам нужна более полная эмуляция отпечатка и поведения браузера `TLS`, используйте [Browser Dialer](./transports/websocket.md#browser-dialer).
|
||||
:::
|
||||
|
||||
::: tip
|
||||
При использовании этой функции некоторые параметры TLS, влияющие на отпечаток TLS, будут переопределены библиотекой utls и не будут действовать, например, ALPN.
|
||||
Передаваемые параметры:
|
||||
`"serverName" "allowInsecure" "disableSystemRoot" "pinnedPeerCertificateChainSha256" "masterKeyLog"`
|
||||
:::
|
||||
|
||||
> `pinnedPeerCertificateChainSha256`: \[string\]
|
||||
|
||||
SHA256-хэш цепочки сертификатов удаленного сервера в стандартном формате кодировки.
|
||||
Соединение TLS будет успешно установлено, только если хэш цепочки сертификатов сервера совпадает с одним из значений в этом списке.
|
||||
Используется для указания хэша SHA256 цепочки сертификатов удаленного сервера с использованием стандартного формата кодировки. Соединение TLS может быть успешно установлено только в том случае, если хэш цепочки сертификатов сервера соответствует одному из значений, указанных в настройке.
|
||||
|
||||
Если соединение не удалось установить из-за этой настройки, будет показан хэш цепочки сертификатов удаленного сервера.
|
||||
Если соединение не удалось установить из-за этой конфигурации, будет отображен хэш сертификата удаленного сервера.
|
||||
|
||||
::: danger
|
||||
Не рекомендуется использовать этот способ для получения хэша цепочки сертификатов, так как в этом случае у вас не будет возможности проверить, является ли сертификат, предоставленный сервером, подлинным, и поэтому вы не можете гарантировать, что полученный хэш сертификата будет ожидаемым.
|
||||
Не рекомендуется использовать этот способ для получения хэша цепочки сертификатов, так как в этом случае не будет возможности проверить, является ли сертификат, предоставленный сервером в данный момент, подлинным, и, следовательно, не гарантируется, что полученный хэш сертификата является ожидаемым.
|
||||
:::
|
||||
|
||||
::: tip
|
||||
Если вам нужно получить хэш сертификата, запустите команду `xray tls certChainHash --cert <cert.pem>` в командной строке, где `<cert.pem>` - это путь к файлу сертификата.
|
||||
Если вам нужно получить хэш сертификата, запустите `xray tls certChainHash --cert <cert.pem>` из командной строки, где `<cert.pem>` следует заменить на фактический путь к файлу сертификата.
|
||||
:::
|
||||
|
||||
> `certificates`: \[ [CertificateObject](#certificateobject) \]
|
||||
|
||||
Список сертификатов, каждый элемент которого представляет собой сертификат (рекомендуется использовать fullchain).
|
||||
Список сертификатов, каждый элемент которого представляет собой сертификат (рекомендуется fullchain).
|
||||
|
||||
::: tip
|
||||
Если вам нужно получить оценку A/A+ в ssllibs или myssl, см. [здесь](https://github.com/XTLS/Xray-core/discussions/56#discussioncomment-215600).
|
||||
Если вам нужно получить оценку A/A+ в ssllibs или myssl,
|
||||
пожалуйста, обратитесь к [этому](https://github.com/XTLS/Xray-core/discussions/56#discussioncomment-215600).
|
||||
:::
|
||||
|
||||
> `masterKeyLog` : string
|
||||
|
||||
Путь к файлу журнала (pre)-master-secret, который можно использовать для расшифровки TLS-соединений, отправляемых Xray, в таких программах, как Wireshark.
|
||||
Пока не поддерживается совместное использование с utls.
|
||||
Требуется Xray-Core v1.8.7.
|
||||
Путь к файлу журнала (Pre)-Master-Secret, который можно использовать для расшифровки TLS-соединений, отправляемых Xray, с помощью Wireshark и других программ, пока не поддерживается для использования с utls.
|
||||
|
||||
### RealityObject
|
||||
|
||||
|
@ -296,95 +265,91 @@ SHA256-хэш цепочки сертификатов удаленного се
|
|||
Дополнительную информацию см. в проекте [REALITY](https://github.com/XTLS/REALITY).
|
||||
:::
|
||||
|
||||
> `show`: true | false
|
||||
> `show` : true | false
|
||||
|
||||
Если значение равно `true`, выводить отладочную информацию.
|
||||
|
||||
::: tip
|
||||
Настройки для **входящего** подключения (**сервер**).
|
||||
Ниже приведена конфигурация для **входящего** подключения (**сервера**).
|
||||
:::
|
||||
|
||||
> `dest`: string
|
||||
> `dest` : string
|
||||
|
||||
Обязательный параметр, формат такой же, как у `dest` в `fallbacks` для VLESS [dest](./features/fallback.md#fallbackobject).
|
||||
Обязательный параметр, формат такой же, как у [dest](./features/fallback.md#fallbackobject) в VLESS `fallbacks`.
|
||||
|
||||
::: warning
|
||||
Для лучшей маскировки Xray **напрямую перенаправляет** трафик, не прошедший аутентификацию Reality (незаконные запросы Reality), на `dest`.
|
||||
Если IP-адрес сайта `dest` является особенным (например, сайт использует CDN CloudFlare), то ваш сервер будет действовать как переадресатор портов для CloudFlare, что может привести к утечке трафика после сканирования.
|
||||
Чтобы избежать этого, можно использовать Nginx или другие средства для фильтрации нежелательных SNI.
|
||||
Из соображений маскировки Xray будет **непосредственно перенаправлять** трафик с неудачной аутентификацией (недопустимый запрос REALITY) на `dest`.
|
||||
Если IP-адрес сайта `dest` особый (например, сайт использует CloudFlare CDN), это равносильно тому, что ваш сервер действует как port forward для CloudFlare, что может привести к злоупотреблению.
|
||||
Чтобы этого избежать, можно рассмотреть возможность использования Nginx и других методов для фильтрации нежелательных SNI.
|
||||
:::
|
||||
|
||||
> `xver`: number
|
||||
> `xver` : number
|
||||
|
||||
Необязательный параметр, формат такой же, как у `xver` в `fallbacks` для VLESS [xver](./features/fallback.md#fallbackobject).
|
||||
Необязательный параметр, формат такой же, как у [xver](./features/fallback.md#fallbackobject) в VLESS `fallbacks`.
|
||||
|
||||
> `serverNames`: \[string\]
|
||||
> `serverNames` : \[string\]
|
||||
|
||||
Обязательный параметр, список допустимых `serverName` для клиентов.
|
||||
Пока не поддерживаются подстановочные знаки \*.
|
||||
Обязательный параметр, список доступных `serverName` для клиента, подстановочные знаки \* пока не поддерживаются.
|
||||
|
||||
Обычно это значение совпадает с `dest`.
|
||||
Фактически допустимыми значениями являются любые SNI, принимаемые сервером (в зависимости от конфигурации `dest`).
|
||||
В качестве ориентира можно использовать [SAN](https://ru.wikipedia.org/wiki/Subject_Alternative_Name) возвращаемого сертификата.
|
||||
Обычно он совпадает с `dest`, фактическое допустимое значение — это любой SNI, принимаемый сервером (в зависимости от конфигурации `dest`), в качестве справки можно использовать [SAN](https://ru.wikipedia.org/wiki/Subject_Alternative_Name) возвращаемого сертификата.
|
||||
|
||||
Может содержать пустое значение `""`, что означает прием подключений без SNI.
|
||||
Может содержать пустое значение ```""```, что означает принятие соединений без SNI.
|
||||
|
||||
> `privateKey`: string
|
||||
> `privateKey` : string
|
||||
|
||||
Обязательный параметр, сгенерируйте его, выполнив команду `./xray x25519`.
|
||||
Обязательный параметр, генерируется с помощью команды `./xray x25519`.
|
||||
|
||||
> `minClientVer`: string
|
||||
> `minClientVer` : string
|
||||
|
||||
Необязательный параметр, минимальная версия Xray на клиенте, формат: `x.y.z`.
|
||||
Необязательный параметр, минимальная версия Xray клиента, формат: `x.y.z`.
|
||||
|
||||
> `maxClientVer`: string
|
||||
> `maxClientVer` : string
|
||||
|
||||
Необязательный параметр, максимальная версия Xray на клиенте, формат: `x.y.z`.
|
||||
Необязательный параметр, максимальная версия Xray клиента, формат: `x.y.z`.
|
||||
|
||||
> `maxTimeDiff`: number
|
||||
> `maxTimeDiff` : number
|
||||
|
||||
Необязательный параметр, максимально допустимая разница во времени в миллисекундах.
|
||||
|
||||
> `shortIds`: \[string\]
|
||||
> `shortIds` : \[string\]
|
||||
|
||||
Обязательный параметр, список допустимых `shortId` для клиентов, которые можно использовать для различения разных клиентов.
|
||||
Обязательный параметр, список доступных `shortId` для клиента, можно использовать для различения разных клиентов.
|
||||
|
||||
Состоит из символов от 0 до f, длина должна быть кратна 2, максимальная длина - 16.
|
||||
Требования к формату см. в `shortId`.
|
||||
|
||||
Если список содержит пустое значение, `shortId` на клиенте может быть пустым.
|
||||
Если содержит пустое значение, `shortId` клиента может быть пустым.
|
||||
|
||||
::: tip
|
||||
Настройки для **исходящего** подключения (**клиент**).
|
||||
Ниже приведена конфигурация для **исходящего** подключения (**клиента**).
|
||||
:::
|
||||
|
||||
> `serverName`: string
|
||||
> `serverName` : string
|
||||
|
||||
Одно из значений `serverNames` на сервере.
|
||||
Один из `serverNames` сервера.
|
||||
|
||||
Если `serverNames` на сервере содержит пустое значение, на клиенте можно использовать `"serverName": "0.0.0.0"`, как и в TLS, для установления соединения без SNI.
|
||||
В отличие от TLS, в REALITY для использования этой функции не нужно включать параметр `allowInsecure`.
|
||||
При использовании этой функции убедитесь, что `dest` возвращает сертификат по умолчанию при приеме соединений без SNI.
|
||||
Если `serverNames` сервера содержит пустое значение, то, как и в случае с TLS, клиент может использовать ```"serverName": "0.0.0.0"``` для установления соединения без SNI. В отличие от TLS, REALITY не требует и не имеет опции разрешения небезопасных соединений для этой функции. При использовании этой функции убедитесь, что `dest` возвращает сертификат по умолчанию при принятии соединений без SNI.
|
||||
|
||||
> `fingerprint`: string
|
||||
> `fingerprint` : string
|
||||
|
||||
Обязательный параметр, такой же, как в [TLSObject](#tlsobject).
|
||||
|
||||
> `shortId`: string
|
||||
> `shortId` : string
|
||||
|
||||
Одно из значений `shortIds` на сервере.
|
||||
Один из `shortIds` сервера.
|
||||
|
||||
Состоит из символов от 0 до f, длина должна быть кратна 2, максимальная длина - 16.
|
||||
Длина — 8 байт, то есть 16 шестнадцатеричных цифр (0-f), может быть меньше 16, ядро автоматически добавит 0 в конец, но количество цифр должно быть **четным** (потому что один байт состоит из 2 шестнадцатеричных цифр).
|
||||
|
||||
Если `shordIDs` на сервере содержит пустое значение, этот параметр на клиенте может быть пустым.
|
||||
Например, `aa1234` будет автоматически дополнено до `aa12340000000000`, а `aaa1234` приведет к ошибке.
|
||||
|
||||
> `publicKey`: string
|
||||
0 также является четным числом, поэтому, если `shordIDs` сервера содержит пустое значение `""`, клиент также может быть пустым.
|
||||
|
||||
Обязательный параметр, открытый ключ, соответствующий закрытому ключу сервера.
|
||||
Сгенерируйте его с помощью команды `./xray x25519 -i "закрытый ключ сервера"`.
|
||||
> `publicKey` : string
|
||||
|
||||
> `spiderX`: string
|
||||
Обязательный параметр, открытый ключ, соответствующий закрытому ключу сервера. Генерируется с помощью команды `./xray x25519 -i "закрытый_ключ_сервера"`.
|
||||
|
||||
Начальный путь и параметры для краулера, рекомендуется использовать разные значения для каждого клиента.
|
||||
> `spiderX` : string
|
||||
|
||||
Начальный путь и параметры для краулера, рекомендуется использовать разные для каждого клиента.
|
||||
|
||||
#### CertificateObject
|
||||
|
||||
|
@ -393,6 +358,7 @@ SHA256-хэш цепочки сертификатов удаленного се
|
|||
"ocspStapling": 3600,
|
||||
"oneTimeLoading": false,
|
||||
"usage": "encipherment",
|
||||
"buildChain": false,
|
||||
"certificateFile": "/path/to/certificate.crt",
|
||||
"keyFile": "/path/to/key.key",
|
||||
"certificate": [
|
||||
|
@ -448,76 +414,70 @@ SHA256-хэш цепочки сертификатов удаленного се
|
|||
|
||||
> `ocspStapling`: number
|
||||
|
||||
Интервал обновления OCSP-стейплинга.
|
||||
Совпадает с интервалом перезагрузки сертификата.
|
||||
Единица измерения: секунды.
|
||||
Значение по умолчанию - `3600` (1 час).
|
||||
Интервал обновления OCSP-скрепления, совпадает с интервалом перезагрузки сертификата. Единица измерения: секунды. Значение по умолчанию: `3600`, то есть один час.
|
||||
|
||||
> `oneTimeLoading`: true | false
|
||||
|
||||
Загрузить только один раз.
|
||||
Если значение равно `true`, функция перезагрузки сертификата и OCSP-стейплинга отключаются.
|
||||
|
||||
Загружать только один раз. Если значение равно `true`, то функция горячей перезагрузки сертификата и функция OCSP-скрепления будут отключены.
|
||||
::: warning
|
||||
Если значение равно `true`, OCSP-стейплинг будет отключен.
|
||||
Если значение равно `true`, то OCSP-скрепление будет отключено.
|
||||
:::
|
||||
|
||||
> `usage`: "encipherment" | "verify" | "issue"
|
||||
|
||||
Назначение сертификата.
|
||||
Значение по умолчанию - `"encipherment"`.
|
||||
Использование сертификата, значение по умолчанию: `"encipherment"`.
|
||||
|
||||
- `"encipherment"`: сертификат используется для аутентификации и шифрования TLS.
|
||||
- `"verify"`: сертификат используется для проверки сертификата удаленного TLS-сервера.
|
||||
При использовании этого значения текущий сертификат должен быть сертификатом ЦС.
|
||||
- `"issue"`: сертификат используется для выпуска других сертификатов.
|
||||
При использовании этого значения текущий сертификат должен быть сертификатом ЦС.
|
||||
- `"verify"`: сертификат используется для проверки сертификата удаленного TLS. При использовании этого значения текущий сертификат должен быть сертификатом ЦС.
|
||||
- `"issue"`: сертификат используется для выпуска других сертификатов. При использовании этого значения текущий сертификат должен быть сертификатом ЦС.
|
||||
|
||||
::: tip Совет 1
|
||||
В Windows можно установить самозаверяющий сертификат ЦС в систему, чтобы проверять сертификаты удаленных TLS-серверов.
|
||||
::: tip СОВЕТ 1
|
||||
В Windows вы можете установить самоподписанный сертификат ЦС в систему, чтобы проверить сертификат удаленного TLS.
|
||||
:::
|
||||
|
||||
::: tip Совет 2
|
||||
При получении нового запроса от клиента, если указанный `serverName` равен `"xray.com"`, Xray сначала ищет в списке сертификатов сертификат, который можно использовать для `"xray.com"`.
|
||||
Если подходящий сертификат не найден, Xray использует любой сертификат с `usage` = `"issue"` для выпуска нового сертификата для `"xray.com"` со сроком действия один час.
|
||||
Новый сертификат добавляется в список сертификатов для последующего использования.
|
||||
::: tip СОВЕТ 2
|
||||
Когда поступает новый запрос от клиента, предполагая, что указанный `serverName` равен `"xray.com"`, Xray сначала ищет в списке сертификатов сертификат, который можно использовать для `"xray.com"`, и, если он не найден, использует любой сертификат с `usage`, равным `"issue"`, для выпуска сертификата, подходящего для `"xray.com"`, со сроком действия один час. Новый сертификат будет добавлен в список сертификатов для последующего использования.
|
||||
:::
|
||||
|
||||
::: tip Совет 3
|
||||
Если указаны и `certificateFile`, и `certificate`, Xray использует `certificateFile`.
|
||||
То же самое относится к `keyFile` и `key`.
|
||||
::: tip СОВЕТ 3
|
||||
Если одновременно указаны `certificateFile` и `certificate`, Xray отдает приоритет `certificateFile`. То же самое касается `keyFile` и `key`.
|
||||
:::
|
||||
|
||||
::: tip Совет 4
|
||||
Если `usage` равен `"verify"`, `keyFile` и `key` могут быть пустыми.
|
||||
::: tip СОВЕТ 4
|
||||
Когда `usage` равно `"verify"`, то `keyFile` и `key` могут быть пустыми.
|
||||
:::
|
||||
|
||||
::: tip Совет 5
|
||||
Можно сгенерировать самозаверяющий сертификат ЦС с помощью команды `xray tls cert`.
|
||||
::: tip СОВЕТ 5
|
||||
Используйте `xray tls cert` для генерации самоподписанного сертификата ЦС.
|
||||
:::
|
||||
|
||||
::: tip Совет 6
|
||||
Если у вас есть доменное имя, вы можете легко получить бесплатный сторонний сертификат с помощью таких инструментов, как [acme.sh](https://github.com/acmesh-official/acme.sh).
|
||||
::: tip СОВЕТ 6
|
||||
Если у вас уже есть доменное имя, вы можете использовать инструменты для удобного получения бесплатных сторонних сертификатов, например, [acme.sh](https://github.com/acmesh-official/acme.sh).
|
||||
:::
|
||||
|
||||
> `buildChain`: true | false
|
||||
|
||||
Вступает в силу только при использовании сертификата `"issue"`, если значение равно `true`, то сертификат ЦС будет встроен в цепочку сертификатов при выпуске сертификата.
|
||||
|
||||
::: tip СОВЕТ 1
|
||||
Не следует встраивать корневой сертификат в цепочку сертификатов. Этот параметр следует включать только при подписании сертификата ЦС в качестве промежуточного сертификата.
|
||||
:::
|
||||
|
||||
> `certificateFile`: string
|
||||
|
||||
Путь к файлу сертификата, например, сертификат, сгенерированный OpenSSL, с расширением .crt.
|
||||
Путь к файлу сертификата, например, сгенерированному с помощью OpenSSL, с расширением .crt.
|
||||
|
||||
> `certificate`: \[ string \]
|
||||
|
||||
Массив строк, представляющий содержимое сертификата, как показано в примере.
|
||||
`certificate` и `certificateFile` - взаимоисключающие параметры.
|
||||
Массив строк, представляющий содержимое сертификата, формат см. в примере. Используйте либо `certificate`, либо `certificateFile`.
|
||||
|
||||
> `keyFile`: string
|
||||
|
||||
Путь к файлу ключа, например, ключ, сгенерированный OpenSSL, с расширением .key.
|
||||
В настоящее время не поддерживаются файлы ключей, защищенные паролем.
|
||||
Путь к файлу ключа, например, сгенерированному с помощью OpenSSL, с расширением .key. В настоящее время не поддерживаются файлы ключей, защищенные паролем.
|
||||
|
||||
> `key`: \[ string \]
|
||||
|
||||
Массив строк, представляющий содержимое ключа, как показано в примере.
|
||||
`key` и `keyFile` - взаимоисключающие параметры.
|
||||
Массив строк, представляющий содержимое ключа, формат см. в примере. Используйте либо `key`, либо `keyFile`.
|
||||
|
||||
### SockoptObject
|
||||
|
||||
|
@ -536,7 +496,7 @@ SHA256-хэш цепочки сертификатов удаленного се
|
|||
"tcpcongestion": "bbr",
|
||||
"interface": "wg0",
|
||||
"V6Only": false,
|
||||
"tcpWindowClamp": 600,
|
||||
"tcpWindowClamp": 600
|
||||
"tcpMptcp": false,
|
||||
"tcpNoDelay": false,
|
||||
"customSockopt": []
|
||||
|
@ -545,63 +505,48 @@ SHA256-хэш цепочки сертификатов удаленного се
|
|||
|
||||
> `mark`: number
|
||||
|
||||
Целое число.
|
||||
Если значение не равно нулю, исходящее соединение будет помечено этим значением SO_MARK.
|
||||
Целое число. Если значение не равно нулю, то исходящее соединение помечается этим значением с помощью SO_MARK.
|
||||
|
||||
- Работает только в Linux.
|
||||
- Требуются права CAP_NET_ADMIN.
|
||||
|
||||
> `tcpMaxSeg`: number
|
||||
|
||||
Устанавливает максимальный размер сегмента TCP (MSS).
|
||||
Используется для установки максимального сегмента TCP-пакета (Maximum Segment Size).
|
||||
|
||||
> `tcpFastOpen`: true | false | number
|
||||
|
||||
Включить [TCP Fast Open](https://ru.wikipedia.org/wiki/TCP_Fast_Open) (TFO).
|
||||
Включить [TCP Fast Open](https://ru.wikipedia.org/wiki/TCP_Fast_Open).
|
||||
|
||||
Если значение равно `true` или **положительному целому числу**, TFO включен.
|
||||
Если значение равно `false` или **отрицательному числу**, TFO принудительно отключен.
|
||||
Если этот параметр не указан или равен `0`, используются настройки системы по умолчанию.
|
||||
Может использоваться как для входящих, так и для исходящих подключений.
|
||||
Если значение равно `true` или **положительному целому числу**, то TFO включается; если значение равно `false` или **отрицательному числу**, то TFO принудительно отключается; если параметр отсутствует или равен `0`, то используются настройки системы по умолчанию. Можно использовать как для входящих, так и для исходящих подключений.
|
||||
|
||||
- Доступно только в следующих (или более поздних) версиях операционных систем:
|
||||
- Доступно только в следующих (или более новых) версиях операционных систем:
|
||||
|
||||
- Linux 3.16: требуется настроить параметр ядра `net.ipv4.tcp_fastopen`.
|
||||
Этот параметр представляет собой битовую маску, где `0x1` означает, что TFO разрешен для клиентов, а `0x2` - для серверов.
|
||||
Значение по умолчанию - `0x1`.
|
||||
Если вы хотите включить TFO на сервере, установите значение этого параметра ядра в `0x3`.
|
||||
- ~~Windows 10 (1607)~~ (неправильная реализация).
|
||||
- Mac OS 10.11 / iOS 9 (требуется тестирование).
|
||||
- FreeBSD 10.3 (сервер) / 12.0 (клиент): необходимо установить параметры ядра `net.inet.tcp.fastopen.server_enabled` и `net.inet.tcp.fastopen.client_enabled` в `1`.
|
||||
(Требуется тестирование.)
|
||||
- Linux 3.16: требуется настройка параметра ядра `net.ipv4.tcp_fastopen`, который представляет собой битовую маску, где `0x1` означает, что клиент может включать TFO, а `0x2` означает, что сервер может включать TFO; значение по умолчанию — `0x1`, если серверу необходимо включить TFO, установите значение этого параметра ядра в `0x3`.
|
||||
- ~~Windows 10 (1607)~~ (реализовано неправильно)
|
||||
- Mac OS 10.11 / iOS 9 (требуется тестирование)
|
||||
- FreeBSD 10.3 (Server) / 12.0 (Client): необходимо установить параметры ядра `net.inet.tcp.fastopen.server_enabled` и `net.inet.tcp.fastopen.client_enabled` в значение `1`. (Требуется тестирование)
|
||||
|
||||
- Для входящих подключений указанное здесь **положительное целое число** представляет собой [максимальное количество ожидающих запросов на подключение TFO](https://tools.ietf.org/html/rfc7413#section-5.1).
|
||||
**Обратите внимание, что не все операционные системы поддерживают эту настройку:**
|
||||
- Для входящих подключений установленное здесь **положительное целое число** представляет собой [максимальное количество ожидающих запросов на подключение TFO](https://tools.ietf.org/html/rfc7413#section-5.1), **обратите внимание, что не все операционные системы поддерживают эту настройку**:
|
||||
|
||||
- Linux / FreeBSD: указанное здесь **положительное целое число** представляет собой максимальное значение, максимальное допустимое значение - 2147483647.
|
||||
Если значение равно `true`, используется значение `256`.
|
||||
Обратите внимание, что в Linux параметр `net.core.somaxconn` ограничивает максимальное значение этого параметра.
|
||||
Если значение превышает `somaxconn`, увеличьте `somaxconn`.
|
||||
- Mac OS: если значение равно `true` или **положительному целому числу**, это означает только, что TFO включен.
|
||||
Максимальное значение нужно настроить отдельно с помощью параметра ядра `net.inet.tcp.fastopen_backlog`.
|
||||
- Windows: если значение равно `true` или **положительному целому числу**, это означает только, что TFO включен.
|
||||
- Linux / FreeBSD: установленное здесь **положительное целое число** представляет собой максимальное значение, максимально допустимое значение — 2147483647, если установлено значение `true`, то используется значение `256`; обратите внимание, что в Linux `net.core.somaxconn` ограничивает максимальное значение, если оно превышает `somaxconn`, то необходимо также увеличить `somaxconn`.
|
||||
- Mac OS: если здесь установлено значение `true` или **положительное целое число**, это означает только включение TFO, максимальное значение необходимо установить отдельно с помощью параметра ядра `net.inet.tcp.fastopen_backlog`.
|
||||
- Windows: если здесь установлено значение `true` или **положительное целое число**, это означает только включение TFO.
|
||||
|
||||
- Для исходящих подключений значение `true` или **положительное целое число** означает только, что TFO включен, во всех операционных системах.
|
||||
- Для исходящих подключений установка значения `true` или **положительного целого числа** в любой операционной системе означает только включение TFO.
|
||||
|
||||
> `tproxy`: "redirect" | "tproxy" | "off"
|
||||
|
||||
Включить прозрачное проксирование (только для Linux).
|
||||
Включить ли прозрачное проксирование (только для Linux).
|
||||
|
||||
- `"redirect"`: использовать прозрачное проксирование в режиме Redirect.
|
||||
Поддерживаются все TCP-соединения на основе IPv4/6.
|
||||
- `"tproxy"`: использовать прозрачное проксирование в режиме TProxy.
|
||||
Поддерживаются все TCP- и UDP-соединения на основе IPv4/6.
|
||||
- `"redirect"`: использовать прозрачное проксирование в режиме перенаправления. Поддерживаются все TCP-соединения на основе IPv4/6.
|
||||
- `"tproxy"`: использовать прозрачное проксирование в режиме TProxy. Поддерживаются все TCP- и UDP-соединения на основе IPv4/6.
|
||||
- `"off"`: отключить прозрачное проксирование.
|
||||
|
||||
Для прозрачного проксирования требуются права root или `CAP\_NET\_ADMIN`.
|
||||
|
||||
::: danger
|
||||
Если в [Dokodemo-door](./inbounds/dokodemo.md) параметр `followRedirect` установлен в `true`, а параметр `tproxy` в Sockopt не указан, значение `tproxy` в Sockopt будет установлено в `"redirect"`.
|
||||
Если в [Dokodemo-door](./inbounds/dokodemo.md) указано `followRedirect: true` и `tproxy` в настройках Sockopt пуст, то значение `tproxy` в настройках Sockopt будет установлено в `"redirect"`.
|
||||
:::
|
||||
|
||||
> `domainStrategy`: "AsIs"<br>
|
||||
|
@ -609,199 +554,4 @@ SHA256-хэш цепочки сертификатов удаленного се
|
|||
> "ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"
|
||||
|
||||
|
||||
В предыдущих версиях, когда Xray пытался установить системное соединение с использованием доменного имени, разрешение доменного имени выполнялось системой и не контролировалось Xray.
|
||||
Это приводило к таким проблемам, как [невозможность разрешения доменных имен в нестандартных средах Linux](https://github.com/v2ray/v2ray-core/issues/1909).
|
||||
Чтобы решить эту проблему, в Xray 1.3.1 был добавлен параметр `domainStrategy` в Sockopt, аналогичный параметру в Freedom.
|
||||
|
||||
Значение по умолчанию - `"AsIs"`.
|
||||
|
||||
При использовании доменного имени в качестве целевого адреса поведение Freedom зависит от значения этого параметра:
|
||||
|
||||
- `"AsIs"`: Xray будет использовать системный стек для установления соединения, приоритет и выбор IP-адреса зависят от настроек системы.
|
||||
- При указании других значений будет использоваться [встроенный DNS-сервер](../dns.md) Xray-core для разрешения доменного имени.
|
||||
Если `DnsObject` не настроен, будет использоваться системный DNS.
|
||||
Если для домена найдено несколько подходящих IP-адресов, ядро случайным образом выберет один из них в качестве целевого IP-адреса.
|
||||
- `"IPv4"` - попытаться использовать только IPv4 для подключения, `"IPv4v6"` - попытаться использовать IPv4 или IPv6, но для доменов с двумя стеками отдать предпочтение IPv4.
|
||||
(То же самое относится к `IPv6v4`, не будем повторяться.)
|
||||
- Если в настройках встроенного DNS указан параметр `"queryStrategy"`, фактическое поведение будет определяться пересечением этих двух параметров, будут разрешены только IP-адреса тех типов, которые указаны в обоих параметрах.
|
||||
Например, если `"queryStrategy": "UseIPv4"` и `"domainStrategy": "UseIP"`, это фактически эквивалентно `"domainStrategy": "UseIPv4"`.
|
||||
- Если используется значение, начинающееся с `"Use"`, и результат разрешения не соответствует требованиям (например, у домена есть только IPv4-адрес, но используется `UseIPv6`), Xray переключится на `AsIs`.
|
||||
- Если используется значение, начинающееся с `"Force"`, и результат разрешения не соответствует требованиям, соединение не будет установлено.
|
||||
|
||||
::: tip Совет
|
||||
При использовании режимов `"UseIP"` и `"ForceIP"` и указании `sendThrough` в [настройках исходящего подключения](../outbound.md#outboundobject) Freedom автоматически определит необходимый тип IP-адреса (IPv4 или IPv6) на основе значения `sendThrough`.
|
||||
Если вручную указан один тип IP-адреса (например, `UseIPv4`), но он не совпадает с локальным адресом, указанным в `sendThrough`, соединение не будет установлено.
|
||||
:::
|
||||
|
||||
::: danger
|
||||
|
||||
Неправильная настройка этой функции может привести к бесконечному циклу.
|
||||
|
||||
Коротко говоря: для подключения к серверу нужно дождаться результата DNS-запроса, а для завершения DNS-запроса нужно подключиться к серверу.
|
||||
|
||||
> Тони: Что было раньше, курица или яйцо?
|
||||
|
||||
Подробное объяснение:
|
||||
|
||||
1. Условия возникновения: прокси-сервер (proxy.com), встроенный DNS-сервер, не локальный режим.
|
||||
2. **Перед** установлением TCP-соединения с proxy.com Xray пытается разрешить proxy.com с помощью встроенного DNS-сервера.
|
||||
3. Встроенный DNS-сервер устанавливает соединение с dns.com и отправляет запрос для получения IP-адреса proxy.com.
|
||||
4. **Неправильные** правила маршрутизации приводят к тому, что proxy.com проксирует запрос, отправленный на шаге 3.
|
||||
5. Xray пытается установить еще одно TCP-соединение с proxy.com.
|
||||
6. Перед установлением соединения Xray пытается разрешить proxy.com с помощью встроенного DNS-сервера.
|
||||
7. Встроенный DNS-сервер повторно использует соединение, установленное на шаге 3, и отправляет запрос.
|
||||
8. Возникает проблема: установление соединения на шаге 3 ожидает результата запроса на шаге 7, а завершение запроса на шаге 7 ожидает полного установления соединения на шаге 3.
|
||||
9. Игра окончена!
|
||||
|
||||
Решения:
|
||||
|
||||
- Изменить правила разделения трафика для встроенного DNS-сервера.
|
||||
- Использовать Hosts.
|
||||
- ~~Если вы все еще не знаете, как решить эту проблему, не используйте эту функцию.~~
|
||||
|
||||
Поэтому **не рекомендуется** неопытным пользователям использовать эту функцию без необходимости.
|
||||
:::
|
||||
|
||||
> `dialerProxy`: ""
|
||||
|
||||
Тег исходящего прокси.
|
||||
Если значение не пустое, исходящие соединения будут устанавливаться через указанное исходящее подключение.
|
||||
Этот параметр можно использовать для цепочечной пересылки с поддержкой транспорта.
|
||||
|
||||
::: danger
|
||||
Этот параметр несовместим с `ProxySettingsObject.Tag`.
|
||||
:::
|
||||
|
||||
> `acceptProxyProtocol`: true | false
|
||||
|
||||
Только для входящих подключений.
|
||||
Указывает, следует ли принимать PROXY protocol.
|
||||
|
||||
[PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) используется для передачи реального IP-адреса и порта источника запроса.
|
||||
**Если вы не знакомы с ним, пропустите этот параметр.**
|
||||
|
||||
Распространенные обратные прокси (например, HAProxy, Nginx) можно настроить на отправку PROXY protocol, VLESS fallbacks xver также может отправлять его.
|
||||
|
||||
Если значение равно `true`, то после установления TCP-соединения на самом нижнем уровне отправитель запроса должен сначала отправить PROXY protocol v1 или v2, иначе соединение будет разорвано.
|
||||
|
||||
> `tcpKeepAliveInterval`: number
|
||||
|
||||
Интервал между отправкой пакетов TCP keep-alive в секундах. ~~Работает только в Linux.~~
|
||||
|
||||
Это keep-alive-пакеты, отправляемые при ненормальном состоянии соединения (не получен ACK).
|
||||
|
||||
Если этот параметр не указан или равен 0, используется значение по умолчанию Golang.
|
||||
|
||||
::: tip
|
||||
Если указать отрицательное значение, например `-1`, TCP keep-alive будет отключен.
|
||||
:::
|
||||
|
||||
> `tcpKeepAliveIdle`: number
|
||||
|
||||
Порог простоя TCP-соединения в секундах.
|
||||
Keep-alive-пакеты будут отправляться, когда время простоя TCP-соединения достигнет этого порога.
|
||||
|
||||
Это keep-alive-пакеты, отправляемые при нормальном состоянии соединения.
|
||||
|
||||
Если этот параметр не указан или равен 0, используется значение по умолчанию Golang.
|
||||
|
||||
::: tip
|
||||
Если указать отрицательное значение, например `-1`, TCP keep-alive будет отключен.
|
||||
:::
|
||||
|
||||
> `tcpUserTimeout`: number
|
||||
|
||||
Измеряется в миллисекундах.
|
||||
Подробнее: https://github.com/grpc/proposal/blob/master/A18-tcp-user-timeout.md
|
||||
|
||||
> `tcpcongestion`: ""
|
||||
|
||||
Алгоритм управления перегрузкой TCP.
|
||||
Поддерживается только в Linux.
|
||||
Если этот параметр не указан, используется значение по умолчанию системы.
|
||||
|
||||
::: tip Распространенные алгоритмы
|
||||
|
||||
- bbr (рекомендуется)
|
||||
- cubic
|
||||
- reno
|
||||
|
||||
:::
|
||||
|
||||
::: tip
|
||||
Выполните команду `sysctl net.ipv4.tcp_congestion_control`, чтобы узнать значение по умолчанию системы.
|
||||
:::
|
||||
|
||||
> `interface`: ""
|
||||
|
||||
Имя сетевого интерфейса, к которому нужно привязаться.
|
||||
Поддерживается в Linux / iOS / Mac OS / Windows.<br>
|
||||
Для iOS / Mac OS требуется Xray-core v1.8.6 или более поздней версии.<br>
|
||||
Для Windows требуется Xray-core v1.8.7 или более поздней версии.
|
||||
|
||||
> `V6Only`: true | false
|
||||
|
||||
Если значение равно `true`, адрес `::` будет принимать только IPv6-соединения.
|
||||
Поддерживается только в Linux.
|
||||
|
||||
> `tcpWindowClamp`: number
|
||||
|
||||
Привязать размер рекламируемого окна к этому значению.
|
||||
Ядро выберет максимальное значение между этим значением и SOCK_MIN_RCVBUF/2.
|
||||
|
||||
> `tcpMptcp`: true | false
|
||||
|
||||
Новый параметр в Xray-core v1.8.6.<br>
|
||||
Значение по умолчанию - `false`.
|
||||
Если значение равно `true`, включить [Multipath TCP](https://ru.wikipedia.org/wiki/Multipath_TCP).
|
||||
Этот параметр нужно включить как на сервере, так и на клиенте.
|
||||
В настоящее время поддерживается только в Linux, требуется ядро Linux версии 5.6 или выше.
|
||||
|
||||
> `tcpNoDelay`: true | false
|
||||
|
||||
Значение по умолчанию - `false`.
|
||||
Рекомендуется включать вместе с `"tcpMptcp": true`.
|
||||
|
||||
> `customSockopt`: []
|
||||
|
||||
Массив, позволяющий опытным пользователям указать любые необходимые параметры sockopt.
|
||||
Теоретически все настройки, связанные с подключением, описанные выше, можно настроить с помощью этого параметра.
|
||||
Вы также можете настроить другие параметры, доступные в Linux, но не добавленные в ядро, например, следующий пример эквивалентен `"tcpcongestion": "bbr"` в ядре.
|
||||
|
||||
Перед использованием убедитесь, что вы понимаете принципы программирования сокетов в Linux.
|
||||
|
||||
```json
|
||||
"customSockopt": [
|
||||
{
|
||||
"type": "str",
|
||||
"level":"6",
|
||||
"opt": "13",
|
||||
"value": "bbr"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
> `type`: ""
|
||||
|
||||
Обязательный параметр, тип настройки, в настоящее время доступны `int` и `str`.
|
||||
|
||||
> `level`: ""
|
||||
|
||||
Необязательный параметр, уровень протокола, используемый для указания области действия.
|
||||
Значение по умолчанию - `6` (TCP).
|
||||
|
||||
> `opt`: ""
|
||||
|
||||
Название настраиваемого параметра в десятичном формате (в этом примере используется значение TCP_CONGESTION, которое равно 0xd в шестнадцатеричном формате и 13 в десятичном формате).
|
||||
|
||||
> `value`: ""
|
||||
|
||||
Значение, которое нужно установить.
|
||||
В этом примере используется значение `bbr`.
|
||||
|
||||
Если `type` равен `int`, значение должно быть десятичным числом.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
В предыдущих версиях, когда Xray пытался установить системное соединение с использованием доменного имени, разрешение доменного имени выполнялось системой и не контролировалось Xray. Это приводило к таким проблемам, как [невозможность разрешить доменные имена в нестандартных средах Linux](https://github.com/v2ray/v2ray-core/issues/1909). Для решения этой проблемы в X
|
Loading…
Add table
Reference in a new issue