diff --git a/docs/ru/config/transports/tcp.md b/docs/ru/config/transports/tcp.md new file mode 100644 index 0000000..ee7875e --- /dev/null +++ b/docs/ru/config/transports/tcp.md @@ -0,0 +1,148 @@ +# TCP + +Режим транспорта TCP — один из рекомендуемых в настоящее время режимов транспорта. + +Может использоваться в различных комбинациях с различными протоколами. + +## TcpObject + +`TcpObject` соответствует элементу `tcpSettings` в конфигурации транспорта. + +```json +{ + "acceptProxyProtocol": false, + "header": { + "type": "none" + } +} +``` + +> `acceptProxyProtocol`: true | false + +Только для входящих подключений, указывает, следует ли принимать 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, иначе соединение будет закрыто. + +Значение по умолчанию: `false`. + +> `header`: [NoneHeaderObject](#noneheaderobject) | [HttpHeaderobject](#httpheaderobject) + +Настройки маскировки заголовка пакета данных, значение по умолчанию: `NoneHeaderObject`. + +::: tip +HTTP-маскировка не может быть разделена другими HTTP-серверами (например, Nginx), но может быть разделена с помощью VLESS fallbacks path. +::: + +### NoneHeaderObject + +Маскировка не выполняется. + +```json +{ + "type": "none" +} +``` + +> `type`: "none" + +Указывает, что маскировка не выполняется. + +### HttpHeaderObject + +Конфигурация HTTP-маскировки должна быть одинаковой как на входящем, так и на исходящем соединении, и ее содержимое должно совпадать. + +```json +{ + "type": "http", + "request": {}, + "response": {} +} +``` + +> `type`: "http" + +Указывает на выполнение HTTP-маскировки. + +> `request`: [HTTPRequestObject](#httprequestobject) + +HTTP-запрос. + +> `response`: [HTTPResponseObject](#httpresponseobject) + +HTTP-ответ. + +#### HTTPRequestObject + +```json +{ + "version": "1.1", + "method": "GET", + "path": ["/"], + "headers": { + "Host": ["www.baidu.com", "www.bing.com"], + "User-Agent": [ + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36", + "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46" + ], + "Accept-Encoding": ["gzip, deflate"], + "Connection": ["keep-alive"], + "Pragma": "no-cache" + } +} +``` + +> `version`: string + +Версия HTTP, значение по умолчанию — `"1.1"`. + +> `method`: string + +Метод HTTP, значение по умолчанию — `"GET"`. + +> `path`: \[ string \] + +Путь, массив строк. Значение по умолчанию — `["/"]`. Если имеется несколько значений, то при каждом запросе случайным образом выбирается одно из них. + +> `headers`: map{ string, \[ string \]} + +HTTP-заголовки, пары ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение является массивом. + +Каждый запрос будет содержать все ключи и случайно выбранное соответствующее значение. Значение по умолчанию см. в примере выше. + +#### HTTPResponseObject + +```json +{ + "version": "1.1", + "status": "200", + "reason": "OK", + "headers": { + "Content-Type": ["application/octet-stream", "video/mpeg"], + "Transfer-Encoding": ["chunked"], + "Connection": ["keep-alive"], + "Pragma": "no-cache" + } +} +``` + +> `version`: string + +Версия HTTP, значение по умолчанию — `"1.1"`. + +> `status`: string + +Состояние HTTP, значение по умолчанию — `"200"`. + +> `reason`: string + +Описание состояния HTTP, значение по умолчанию — `"OK"`. + +> `headers`: map {string, \[ string \]} + +HTTP-заголовки, пары ключ-значение, где каждый ключ представляет имя HTTP-заголовка, а соответствующее значение является массивом. + +Каждый запрос будет содержать все ключи и случайно выбранное соответствующее значение. Значение по умолчанию см. в примере выше.