RU syncing
* Update splithttp.md
d1a94e2f8b
* Update browser_dialer.md
https://github.com/XTLS/Xray-docs-next/pull/533
* Update ru.ts
make titles more intuitive
pull/535/head
parent
6615754a1e
commit
51bb9617f7
|
@ -32,7 +32,7 @@ export const sidebarRu: SidebarConfig = {
|
|||
],
|
||||
},
|
||||
{
|
||||
text: 'Входящий прокси',
|
||||
text: 'Входящие подключения',
|
||||
children: [
|
||||
'/ru/config/inbounds/dokodemo.md',
|
||||
'/ru/config/inbounds/http.md',
|
||||
|
@ -44,7 +44,7 @@ export const sidebarRu: SidebarConfig = {
|
|||
],
|
||||
},
|
||||
{
|
||||
text: 'Исходящий прокси',
|
||||
text: 'Исходящие подключения',
|
||||
children: [
|
||||
'/ru/config/outbounds/blackhole.md',
|
||||
'/ru/config/outbounds/dns.md',
|
||||
|
@ -146,4 +146,4 @@ export const sidebarRu: SidebarConfig = {
|
|||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,47 +1,54 @@
|
|||
# Браузерный Dialer
|
||||
# Browser Dialer
|
||||
|
||||
<Badge text="BETA" type="warning"/> <Badge text="v1.4.1+" type="warning"/>
|
||||
<Badge text="БЕТА" type="warning"/> <Badge text="v1.4.1+" type="warning"/>
|
||||
|
||||
## Предыстория
|
||||
|
||||
Основываясь на [идее, возникшей год назад](https://github.com/v2ray/discussion/issues/754#issuecomment-647934994), с помощью нативного JavaScript был реализован простой WSS-браузерный Dialer, который эмулирует TLS-отпечаток и поведенческие характеристики реального браузера.
|
||||
Xray обычно использует uTLS для имитации поведения популярных браузеров, и им можно управлять с помощью настройки `fingerprint`. Однако отпечатки, создаваемые uTLS, являются несовершенной копией реальных, и поскольку uTLS является популярной библиотекой, они сами могут стать целью.
|
||||
|
||||
Однако WSS все еще имеет очевидные проблемы с ALPN, поэтому следующим шагом будет пересылка `HTTP/2` и `QUIC` через браузер.
|
||||
Итак, [идея Browser Dialer](https://github.com/v2ray/discussion/issues/754#issuecomment-647934994) заключается в том, что Xray использует настоящий браузер для установления TLS-соединений. Это работает так: Xray запускает небольшой веб-сайт на `localhost:8080`, пользователь открывает этот веб-сайт в выбранном им браузере, а JavaScript на этой странице будет действовать как сетевой стек Xray (HTTP-клиент, TLS-клиент).
|
||||
|
||||
## Xray и JS
|
||||
Таким образом, поведение снятия отпечатков TLS является идеальным, и поэтому может быть возможно оживить серверы, которые отлично открываются как веб-сайты в браузере, но не подключаются с использованием какого-либо программного обеспечения для проксирования.
|
||||
|
||||
Был создан очень простой и элегантный механизм связи:
|
||||
Однако есть много недостатков:
|
||||
|
||||
- Xray прослушивает адрес и порт A в качестве HTTP-сервера.
|
||||
Браузер обращается к A и загружает JavaScript-код с веб-страницы.
|
||||
- JavaScript-код устанавливает WebSocket-соединение с A.
|
||||
После успешного установления соединения Xray передает соединение в канал.
|
||||
- При необходимости установить соединение Xray получает доступное соединение из канала и отправляет целевой URL-адрес и необязательные ранние данные (early data).
|
||||
- JavaScript-код сообщает Xray об успешном подключении к цели и продолжает использовать это соединение для двунаправленной передачи данных.
|
||||
Соединение закрывается синхронно.
|
||||
- Соединение закрывается после использования, но JavaScript-код гарантирует, что всегда есть доступные новые соединения.
|
||||
* Пользователь должен запускать браузер рядом с клиентом Xray только для открытия прокси-соединения.
|
||||
* Browser Dialer не должен быть туннелирован через сам прокси, иначе возникнет петля. Пользователи TUN должны быть осторожны.
|
||||
* Браузер может работать только со стандартным HTTP, что означает, что поддерживаются только [WebSocket](../../transports/websocket.md) и [SplitHTTP](../../transports/splithttp.md).
|
||||
* [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) необходимо учитывать при выполнении запросов с одного веб-сайта (`localhost:8080`) на другой (`proxy.example.com:443`).
|
||||
* Браузер туннелирует ваш трафик с помощью JavaScript, поэтому наблюдается значительное снижение производительности (или разрядка аккумулятора).
|
||||
* Конфигурация, используемая с Browser Dialer, не может использовать собственные заголовки SNI или хоста. `SNI == host == address`. Пользовательские заголовки HTTP и `tlsSettings` игнорируются полностью.
|
||||
|
||||
## Ранние данные (Early data)
|
||||
## Конфигурация
|
||||
|
||||
Механизм ранних данных был скорректирован в соответствии с потребностями браузера:
|
||||
1. Подготовьте рабочую конфигурацию WebSocket или SplitHTTP. Помните о вышеуказанных ограничениях.
|
||||
2. Запустите Xray с помощью `XRAY_BROWSER_DIALER=127.0.0.1:8080`. В Windows это можно сделать как `set XRAY_BROWSER_DIALER=...`, а затем запустить ядро из консоли, в Linux ядро можно запустить как `XRAY_BROWSER_DIALER=127.0.0.1:8080 ./xray -c config.json`.
|
||||
3. Откройте браузер, который не туннелирован через прокси, или измените маршрутизацию конфигурации таким образом, чтобы домен сервера Xray переходил к `freedom` непосредственно с клиента. Перейдите по адресу `localhost:8080` и откройте консоль разработчика с помощью `F12`, чтобы отслеживать ошибки.
|
||||
4. Для повышения производительности и обхода произвольных ограничений на подключение, применяемых браузером, рекомендуется включить `Mux.Cool`.
|
||||
|
||||
- Заголовок ответа сервера содержит заголовок `Sec-WebSocket-Protocol` запроса, что также частично скрывает характеристики длины ответа рукопожатия WSS.
|
||||
- Для кодирования ранних данных, отправляемых браузеру, используется `base64.RawURLEncoding`, а не `StdEncoding`.
|
||||
Сервер обеспечивает совместимость.
|
||||
- Кроме того, из-за [Xray-core#375](https://github.com/XTLS/Xray-core/pull/375) рекомендуется использовать `?ed=2048`.
|
||||
В этом PR также увеличен `MaxHeaderBytes` на сервере до 4096.
|
||||
~~(Хотя, кажется, это не обязательно)~~
|
||||
## Внутренняя работа
|
||||
|
||||
## Конфигурация <Badge text="v1.4.1" type="warning"/>
|
||||
- Xray прослушивает `http://127.0.0.1:8080`, а браузер обращается к `http://127.0.0.1:8080`, чтобы загрузить `JS` на веб-страницу.
|
||||
- `JS` активно устанавливает соединение WebSocket с `http://127.0.0.1:8080`. Xray будет использовать это соединение для отправки инструкций, но пока оно попадает в пул соединений (реализованный как канал Go).
|
||||
- Когда необходимо установить соединение, Xray получает доступное соединение из пула и отправляет имя протокола, целевой URL-адрес и необязательные ранние данные.
|
||||
- Как только `JS` успешно подключается к цели, он сообщает об этом Xray и продолжает использовать это соединение для двунаправленной пересылки данных.
|
||||
- После закрытия соединения с сервером соединение с localhost также закрывается, но JS гарантирует, что всегда доступно как минимум одно незанятое соединение.
|
||||
|
||||
Это экспериментальный процесс.
|
||||
В настоящее время конфигурация выглядит следующим образом (Xray-core v1.4.1):
|
||||
## WebSocket
|
||||
|
||||
<Badge text="v1.4.1+" type="warning"/>
|
||||
|
||||
В соответствии с потребностями браузера механизм ранних данных был скорректирован следующим образом:
|
||||
|
||||
- Заголовок ответа сервера будет содержать запрошенный `Sec-WebSocket-Protocol`, который также изначально obfuscates the length characteristic of the WSS handshake response.
|
||||
- Кодировка, используемая для ранних данных для браузеров, - это `base64.RawURLEncoding` вместо `StdEncoding`, и сервер сделал ее совместимой.
|
||||
- Кроме того, в связи с [Xray-core#375](https://github.com/XTLS/Xray-core/pull/375) рекомендациями по `?ed=2048` этот PR также увеличил сервер `MaxHeaderBytes` на 4096. ~~(Хотя, похоже, это будет работать и без модификации.)~~
|
||||
|
||||
## SplitHTTP
|
||||
|
||||
<Badge text="v1.8.19+" type="warning"/>
|
||||
|
||||
SplitHTTP поддерживает QUIC, но также может использоваться собственный стек QUIC браузера. В Chrome это можно сделать через `chrome://flags`, в других браузерах он может быть уже включен или для него может потребоваться другой флаг.
|
||||
|
||||
В общем, `tlsSettings` полностью игнорируются при использовании Browser Dialer. Xray никак не контролирует, какую версию HTTP выбирает браузер.
|
||||
|
||||
- Подготовьте рабочую конфигурацию WSS.
|
||||
Обратите внимание, что в поле `address` нужно указать доменное имя.
|
||||
Если нужно указать IP-адрес, настройте DNS или добавьте запись в файл hosts.
|
||||
- Если трафик браузера также проходит через Xray-core, обязательно настройте прямое подключение для этого домена, чтобы избежать зацикливания трафика.
|
||||
- Установите переменную окружения, указывающую адрес и порт, который нужно прослушивать, например, `XRAY_BROWSER_DIALER = 127.0.0.1:8080`.
|
||||
- Сначала запустите Xray-core, а затем откройте указанный адрес и порт в любом браузере.
|
||||
Вы также можете открыть инструменты разработчика (F12) и посмотреть консоль и вкладку "Сеть".
|
||||
- Браузеры ограничивают количество WebSocket-соединений, поэтому рекомендуется включить `Mux.Cool`.
|
|
@ -78,4 +78,10 @@
|
|||
|
||||
* Следует предполагать, что все HTTP-соединения не поддерживают потоковые запросы, поэтому размер каждого пакета, отправляемого исходящим соединением, должен определяться с учетом задержки, пропускной способности и ограничений самого промежуточного сервера (аналогично MTU TCP и алгоритму Нейгла).
|
||||
|
||||
* Что касается версии HTTP, ядро в настоящее время не поддерживает h2c, поэтому Xray будет отправлять только запросы http/1.1 при использовании без HTTPS. Чтобы избежать дополнительных сложностей, связанных с согласованием ALPN, клиент Xray использует h2 при использовании HTTPS (если только alpn не указан вручную как http/1.1 в tlsSettings), а сервер Xray совместим с различными типами входящих подключений (h3 пока нет), поскольку входящие соединения могут быть различных типов из-за промежуточных серверов.
|
||||
* Что касается версий HTTP, ядро временно не поддерживает h2c, поэтому при отсутствии HTTPS Xray отправляет только запросы http/1.1.
|
||||
|
||||
Во избежание дополнительных сложностей, связанных с согласованием ALPN, клиент Xray использует h2 при использовании HTTPS. Вы также можете вручную указать alpn как http/1.1 или h3 в настройках TLS клиента, чтобы использовать соответствующую версию HTTP для отправки запросов. Сервер Xray, с другой стороны, совместим со всеми типами входящих соединений, включая h2c (h3 пока не поддерживается), поскольку входящие соединения могут использовать различные типы запросов из-за перенаправления через промежуточные узлы.
|
||||
|
||||
## BrowserDialer
|
||||
|
||||
При использовании HTTPS этот транспорт также поддерживает [BrowserDialer](../features/browser_dialer.md).
|
||||
|
|
Loading…
Reference in New Issue