translate /config/features/browser_dialer.md
							parent
							
								
									2e0f859692
								
							
						
					
					
						commit
						6189fb51c5
					
				| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
# Браузерный Dialer
 | 
			
		||||
 | 
			
		||||
<Badge text="BETA" type="warning"/> <Badge text="v1.4.1+" type="warning"/>
 | 
			
		||||
 | 
			
		||||
## Предыстория
 | 
			
		||||
 | 
			
		||||
Основываясь на [идее, возникшей год назад](https://github.com/v2ray/discussion/issues/754#issuecomment-647934994), с помощью нативного JavaScript был реализован простой WSS-браузерный Dialer, который эмулирует TLS-отпечаток и поведенческие характеристики реального браузера.
 | 
			
		||||
 | 
			
		||||
Однако WSS все еще имеет очевидные проблемы с ALPN, поэтому следующим шагом будет пересылка `HTTP/2` и `QUIC` через браузер.
 | 
			
		||||
 | 
			
		||||
## Xray и JS
 | 
			
		||||
 | 
			
		||||
Был создан очень простой и элегантный механизм связи:
 | 
			
		||||
 | 
			
		||||
- Xray прослушивает адрес и порт A в качестве HTTP-сервера.  
 | 
			
		||||
    Браузер обращается к A и загружает JavaScript-код с веб-страницы.
 | 
			
		||||
- JavaScript-код устанавливает WebSocket-соединение с A.  
 | 
			
		||||
    После успешного установления соединения Xray передает соединение в канал.
 | 
			
		||||
- При необходимости установить соединение Xray получает доступное соединение из канала и отправляет целевой URL-адрес и необязательные ранние данные (early data).
 | 
			
		||||
- JavaScript-код сообщает Xray об успешном подключении к цели и продолжает использовать это соединение для двунаправленной передачи данных.  
 | 
			
		||||
    Соединение закрывается синхронно.
 | 
			
		||||
- Соединение закрывается после использования, но JavaScript-код гарантирует, что всегда есть доступные новые соединения.
 | 
			
		||||
 | 
			
		||||
## Ранние данные (Early data)
 | 
			
		||||
 | 
			
		||||
Механизм ранних данных был скорректирован в соответствии с потребностями браузера:
 | 
			
		||||
 | 
			
		||||
- Заголовок ответа сервера содержит заголовок `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-core v1.4.1):
 | 
			
		||||
 | 
			
		||||
- Подготовьте рабочую конфигурацию WSS.  
 | 
			
		||||
    Обратите внимание, что в поле `address` нужно указать доменное имя.  
 | 
			
		||||
    Если нужно указать IP-адрес, настройте DNS или добавьте запись в файл hosts.
 | 
			
		||||
- Если трафик браузера также проходит через Xray-core, обязательно настройте прямое подключение для этого домена, чтобы избежать зацикливания трафика.
 | 
			
		||||
- Установите переменную окружения, указывающую адрес и порт, который нужно прослушивать, например, `XRAY_BROWSER_DIALER = 127.0.0.1:8080`.
 | 
			
		||||
- Сначала запустите Xray-core, а затем откройте указанный адрес и порт в любом браузере.  
 | 
			
		||||
    Вы также можете открыть инструменты разработчика (F12) и посмотреть консоль и вкладку "Сеть".
 | 
			
		||||
- Браузеры ограничивают количество WebSocket-соединений, поэтому рекомендуется включить `Mux.Cool`.
 | 
			
		||||
		Loading…
	
		Reference in New Issue