mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-03 04:18:21 +03:00
Direct/Freedom outbound: Better Compatibility (#896)
https://github.com/XTLS/Xray-core/pull/6058
This commit is contained in:
@@ -34,16 +34,16 @@
|
||||
Рационально используя мощные возможности встроенного DNS в Xray (Fallback, ECS, фильтрация по IP, тегирование), и тщательно настраивая порядок серверов, вы получите IP-адрес как условие маршрутизации, который будет гораздо точнее и актуальнее, чем `geosite cn/!cn`. Это связано с тем, что принадлежность IP к региону (GeoIP), особенно к Китаю, меняется довольно редко.
|
||||
|
||||
Прежде чем продолжить чтение, вам необходимо внимательно изучить и понять: "Основы: Краткий анализ функции маршрутизации (routing) — [Часть 1](./routing-lv1-part1.md), [Часть 2](./routing-lv1-part2.md)".
|
||||
Предполагается, что вы уже досконально изучили официальное руководство по конфигурации и полностью понимаете работу `domainStrategy` в Routing и Outbound, назначение опций `sniffing` в Inbound, а также поведение системы при различных комбинациях этих параметров.
|
||||
Предполагается, что вы уже досконально изучили официальное руководство по конфигурации и полностью понимаете работу `domainStrategy` в Routing и `sockopt`, назначение `targetStrategy` в Outbound, назначение опций `sniffing` в Inbound, а также поведение системы при различных комбинациях этих параметров.
|
||||
|
||||
Всё готово? Попробуйте осмыслить следующий абзац:
|
||||
|
||||
При входящих соединениях `socks` или `http` запрашивается домен. Когда запрос попадает в Routing, стратегия `domainStrategy` (если она отлична от `AsIs`) может использовать встроенный DNS для резолвинга IP, который временно используется для сопоставления правил маршрутизации. При отправке в локальный `direct` Outbound, если его `domainStrategy` не `AsIs`, встроенный DNS снова резолвит IP для исходящего соединения. Запрос, отправляемый на удаленный сервер Xray, содержит только домен; какой именно IP будет использован для доступа, зависит от `direct` Outbound на сервере.
|
||||
При входящих соединениях `socks` или `http` исходный запрос адресован домену. Когда запрос попадает в модуль маршрутизации, `domainStrategy`, отличный от `AsIs`, может использовать встроенный DNS для разрешения IP, временно используемых при сопоставлении правил. Если трафик направлен в локальный `direct` Outbound, `domainStrategy` в `sockopt`, отличный от `AsIs`, может снова использовать встроенный DNS для разрешения IP исходящего соединения. Если трафик направлен на удаленный сервер Xray и `targetStrategy` локального Outbound равен `AsIs`, цель запроса по-прежнему передается в виде домена; какой именно IP будет использован, зависит от `direct` Outbound на сервере.
|
||||
|
||||
В режиме прозрачного прокси (Transparent Proxy) ситуация сложнее. Если включен `sniffing` на Inbound и `destOverride` содержит `[http, tls]`:
|
||||
|
||||
- Если `routeOnly = false`, запрошенный IP будет стерт, и дальнейший процесс аналогичен `socks` Inbound.
|
||||
- Если `routeOnly = true`, то доступны и домен, и IP. В Routing можно напрямую сопоставлять правила по домену и IP, а локальный `direct` Outbound также будет использовать этот IP. Запрос к серверу Xray содержит только IP. Как сервер его обработает? Повторит описанный выше процесс.
|
||||
- Если `routeOnly = true`, то доступны и домен, и IP. В модуле маршрутизации можно напрямую сопоставлять правила по домену и IP, а локальный `direct` Outbound также будет использовать этот IP. Запрос к серверу Xray содержит только IP. Как сервер его обработает? Повторит описанный выше процесс.
|
||||
|
||||
Возникли трудности? Вам нужно вернуться к официальному руководству и попытаться вникнуть. В противном случае вам будет сложно использовать результаты резолвинга DNS-модуля из примеров ниже для правильной маршрутизации.
|
||||
|
||||
@@ -266,7 +266,7 @@ graph TD
|
||||
|
||||
В этом сценарии, поскольку все запросы к серверу Xray передаются в виде доменов, нет необходимости использовать DNS для многократного поиска оптимального результата. Достаточно быстро определить, не "загрязнен" ли домен, и по возможности получить китайский IP, дружественный к CDN.
|
||||
|
||||
В этом примере китайский IP, полученный DNS-модулем, уже на 99% оптимизирован для CDN в Китае. Поэтому вы можете установить `domainStrategy` в `direct` Outbound в значение **не** `AsIs`, чтобы использовать кэш, если это необходимо.<br>
|
||||
В этом примере китайский IP, полученный DNS-модулем, уже на 99% оптимизирован для CDN в Китае. Поэтому вы можете установить `sockopt.domainStrategy` в `direct` Outbound в значение **не** `AsIs`, чтобы использовать кэш, если это необходимо.<br>
|
||||
Если вы стремитесь к 100% оптимизации для китайских CDN, можно установить `AsIs`, чтобы использовать системный DNS для повторного резолвинга (дополнительные затраты времени от 1 до сотен мс). Рекомендуется включить "оптимистичное кэширование" (optimistic caching) для дальнейшего снижения задержки.
|
||||
|
||||
## Послесловие
|
||||
|
||||
@@ -113,8 +113,10 @@ lsmod | grep wireguard
|
||||
"outbounds": [
|
||||
{
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
}
|
||||
}
|
||||
// Измените на UseIPv4 или UseIPv6 по вашему выбору
|
||||
},
|
||||
@@ -124,11 +126,9 @@ lsmod | grep wireguard
|
||||
"tag": "wg0",
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"mark": 255 // <mark>
|
||||
"mark": 255, // <mark>
|
||||
"domainStrategy": "UseIPv6"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv6"
|
||||
}
|
||||
}, // Трафик с меткой fwmark, равной <mark>, будет направлен через UseIPv6/UseIPv4.
|
||||
// <--Выберите один из вариантов--> Вариант 2: sendThrough
|
||||
@@ -137,8 +137,10 @@ lsmod | grep wireguard
|
||||
"protocol": "freedom",
|
||||
"sendThrough": "your wg0 v4 address",
|
||||
// Измените на UseIPv4 или UseIPv6 по вашему выбору
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
}
|
||||
}
|
||||
// Измените на UseIPv4 или UseIPv6 по вашему выбору
|
||||
},
|
||||
@@ -146,12 +148,10 @@ lsmod | grep wireguard
|
||||
{
|
||||
"tag": "wg0",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
},
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"interface": "wg0"
|
||||
"interface": "wg0",
|
||||
"domainStrategy": "UseIPv4"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -193,8 +193,7 @@ lsmod | grep wireguard
|
||||
```
|
||||
|
||||
::: tip
|
||||
Вы можете изменить "domainStrategy": "UseIPv6", чтобы управлять способом доступа для определенных пользователей.
|
||||
По моим тестам, этот параметр имеет более высокий приоритет, чем gai.config в системе.
|
||||
Вы можете управлять способом доступа для соответствующих пользователей, задав `sockopt.domainStrategy` равным `UseIPv6`.
|
||||
:::
|
||||
|
||||
## 5. Настройка системы
|
||||
|
||||
@@ -53,12 +53,10 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
|
||||
{
|
||||
"tag": "direct",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
},
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"mark": 2
|
||||
"mark": 2,
|
||||
"domainStrategy": "UseIPv4"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -95,12 +93,10 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
|
||||
"settings": {
|
||||
"rewriteAddress": "8.8.8.8"
|
||||
},
|
||||
"proxySettings": {
|
||||
"tag": "proxy"
|
||||
},
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"mark": 2
|
||||
"mark": 2,
|
||||
"dialerProxy": "proxy"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +94,10 @@
|
||||
{
|
||||
"tag": "direct",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"domainStrategy": "UseIP"
|
||||
},
|
||||
"streamSettings": {
|
||||
"sockopt": {
|
||||
"mark": 255
|
||||
"mark": 255,
|
||||
"domainStrategy": "UseIP"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user