mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2025-04-02 21:06:15 +03:00
RU transport: recover a lost text partition and remove TCP no delay
This commit is contained in:
parent
d9c37aaadb
commit
11dcb2a755
1 changed files with 154 additions and 0 deletions
|
@ -596,3 +596,157 @@ x25519Kyber768Draft00
|
|||
- Если во встроенном DNS установлен параметр `"queryStrategy"`, то фактическое поведение будет комбинацией с этим параметром, и будут разрешаться только типы IP-адресов, присутствующие в обоих параметрах. Например:
|
||||
`"queryStrategy": "UseIPv4"` и `"domainStrategy": "UseIP"` фактически эквивалентны `"domainStrategy": "UseIPv4"`.
|
||||
|
||||
::: tip TIP
|
||||
При использовании режимов `"UseIP"` и `"ForceIP"` и если в [конфигурации исходящего подключения](../outbound.md#outboundobject) указан `sendThrough`, ядро автоматически определит необходимый тип IP (IPv4 или IPv6) на основе значения `sendThrough`. Если вручную указан один тип IP (например, UseIPv4), но он не соответствует локальному адресу, указанному в `sendThrough`, подключение завершится неудачно.
|
||||
:::
|
||||
|
||||
::: danger
|
||||
Неправильная конфигурация после включения этой функции может привести к бесконечному циклу.
|
||||
|
||||
Кратко: для подключения к серверу необходимо дождаться результата DNS-запроса; для завершения DNS-запроса необходимо подключиться к серверу.
|
||||
|
||||
> Tony: Что было раньше, курица или яйцо?
|
||||
|
||||
Подробное объяснение:
|
||||
|
||||
1. Условие возникновения: прокси-сервер (proxy.com). Встроенный DNS-сервер, режим не Local.
|
||||
2. Xray пытается установить TCP-соединение с proxy.com **до** того, как запросит proxy.com через встроенный DNS-сервер.
|
||||
3. Встроенный DNS-сервер устанавливает соединение с dns.com и отправляет запрос для получения IP-адреса proxy.com.
|
||||
4. **Неправильные** правила маршрутизации приводят к тому, что proxy.com проксирует запрос, отправленный на шаге 3.
|
||||
5. Xray пытается установить другое TCP-соединение с proxy.com.
|
||||
6. Перед установкой соединения запрашивает proxy.com через встроенный DNS-сервер.
|
||||
7. Встроенный DNS-сервер повторно использует соединение с шага 3 и отправляет запрос.
|
||||
8. Возникает проблема. Установка соединения на шаге 3 требует ожидания результата запроса на шаге 7; завершение запроса на шаге 7 требует полного установления соединения на шаге 3.
|
||||
9. Игра окончена!
|
||||
|
||||
Решение:
|
||||
|
||||
- Изменить правила маршрутизации для встроенного DNS-сервера.
|
||||
- Использовать Hosts.
|
||||
- ~~Если вы все еще не знаете решения, не используйте эту функцию.~~
|
||||
|
||||
Поэтому **не рекомендуется** неопытным пользователям самостоятельно использовать эту функцию.
|
||||
:::
|
||||
|
||||
> `dialerProxy`: ""
|
||||
|
||||
Идентификатор исходящего прокси. Если значение не пустое, для установления соединения будет использоваться указанный outbound. Эта опция может быть использована для поддержки цепочной переадресации на уровне транспорта.
|
||||
|
||||
::: danger
|
||||
Эта опция несовместима с ProxySettingsObject.Tag
|
||||
:::
|
||||
|
||||
> `acceptProxyProtocol`: true | false
|
||||
|
||||
Только для inbound, указывает, следует ли принимать PROXY protocol.
|
||||
|
||||
[PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) предназначен для передачи реального исходного IP-адреса и порта запроса. **Если вы не знакомы с ним, проигнорируйте этот параметр**.
|
||||
|
||||
Распространенное программное обеспечение обратного прокси (например, HAProxy, Nginx) может быть настроено на его отправку, VLESS fallbacks xver также может его отправлять.
|
||||
|
||||
Если установлено значение `true`, после установления TCP-соединения на самом нижнем уровне, запрашивающая сторона должна сначала отправить PROXY protocol v1 или v2, иначе соединение будет закрыто.
|
||||
|
||||
> `tcpKeepAliveInterval`: number
|
||||
|
||||
Интервал отправки пакетов TCP Keep-Alive в секундах. ~~Этот параметр применим только в Linux.~~
|
||||
|
||||
Это пакет проверки связи, когда соединение не работает нормально (не получен ack).
|
||||
|
||||
Если этот параметр не настроен или установлен в 0, используется значение по умолчанию для Go.
|
||||
|
||||
::: tip
|
||||
При отрицательном значении, например `-1`, TCP Keep-Alive не включается.
|
||||
:::
|
||||
|
||||
> `tcpKeepAliveIdle`: number
|
||||
|
||||
Порог времени простоя TCP в секундах. Когда время простоя TCP-соединения достигает этого порога, начинают отправляться Keep-Alive пакеты.
|
||||
|
||||
Это пакет проверки связи, когда соединение работает нормально.
|
||||
|
||||
Если этот параметр не настроен или установлен в 0, используется значение по умолчанию для Go.
|
||||
|
||||
::: 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, macOS и Windows.
|
||||
|
||||
|
||||
> `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://en.wikipedia.org/wiki/Multipath_TCP). Необходимо включить как на стороне сервера, так и на стороне клиента.
|
||||
В настоящее время поддерживается только в Linux, требуется ядро Linux 5.6 и выше.
|
||||
|
||||
|
||||
> `tcpNoDelay`: true | false
|
||||
|
||||
Этот параметр удален, так как golang по умолчанию включает TCP no delay. Если вы хотите отключить его, используйте customSockopt.
|
||||
|
||||
> `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, значение должно быть десятичным числом.
|
||||
|
|
Loading…
Add table
Reference in a new issue