|
|
|
|
# Freedom
|
|
|
|
|
|
|
|
|
|
Freedom - это исходящий протокол, который можно использовать для отправки (обычных) данных TCP или UDP в любую сеть.
|
|
|
|
|
|
|
|
|
|
## OutboundConfigurationObject
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"domainStrategy": "AsIs",
|
|
|
|
|
"redirect": "127.0.0.1:3366",
|
|
|
|
|
"userLevel": 0,
|
|
|
|
|
"fragment": {
|
|
|
|
|
"packets": "tlshello",
|
|
|
|
|
"length": "100-200",
|
|
|
|
|
"interval": "10-20" // в миллисекундах
|
|
|
|
|
},
|
|
|
|
|
"proxyProtocol": 0
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
> `domainStrategy`: "AsIs"<br>
|
|
|
|
|
> "UseIP" | "UseIPv6v4" | "UseIPv6" | "UseIPv4v6" | "UseIPv4"<br>
|
|
|
|
|
> "ForceIP" | "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4"
|
|
|
|
|
|
|
|
|
|
Значение по умолчанию: `"AsIs"`.
|
|
|
|
|
|
|
|
|
|
Если целевой адрес является доменным именем, настройте соответствующее значение для режима работы Freedom:
|
|
|
|
|
|
|
|
|
|
- При использовании `"AsIs"` Xray будет напрямую использовать системный стек для установления соединения, приоритет и выбор IP будут зависеть от системных настроек. По некоторым причинам UDP-соединения, использующие доменные имена, будут игнорировать системные настройки и отдавать приоритет IPv4.
|
|
|
|
|
- При указании других значений для разрешения будет использоваться [встроенный DNS-сервер](../dns.md) Xray-core. Если DNSObject отсутствует, будет использоваться системный DNS. Если существует несколько подходящих IP-адресов, ядро случайным образом выберет один IP-адрес в качестве целевого.
|
|
|
|
|
- `"IPv4"` означает попытку подключения только с использованием IPv4, `"IPv4v6"` - попытку подключения с использованием IPv4 или IPv6, но с предпочтением IPv4 для доменных имен с поддержкой обоих протоколов. (То же самое относится и к v4v6, но в обратном порядке, поэтому здесь не приводится).
|
|
|
|
|
- Если в настройках встроенного DNS указан параметр `"queryStrategy"`, фактическое поведение будет объединено с этой опцией, и будут разрешаться только те типы IP, которые включены в обе опции. Например, `"queryStrategy": "UseIPv4"` и `"domainStrategy": "UseIP"` фактически эквивалентны `"domainStrategy": "UseIPv4"`.
|
|
|
|
|
- При использовании опций, начинающихся с `"Use"`, если результаты разрешения не соответствуют требованиям (например, доменное имя имеет только результат разрешения IPv4, но используется UseIPv6), будет выполнен откат к AsIs.
|
|
|
|
|
- При использовании опций, начинающихся с `"Force"`, если результаты разрешения не соответствуют требованиям, соединение не будет установлено.
|
|
|
|
|
|
|
|
|
|
::: tip СОВЕТ 1
|
|
|
|
|
При использовании режимов `"UseIP"` или `"ForceIP"` и указании `sendThrough` в [конфигурации исходящего соединения](../outbound.md#outboundobject) Freedom будет автоматически определять необходимый тип IP (IPv4 или IPv6) на основе значения `sendThrough`. Если вручную указать один тип IP (например, UseIPv4), но он не совпадает с локальным адресом, указанным в `sendThrough`, соединение не будет установлено.
|
|
|
|
|
:::
|
|
|
|
|
|
|
|
|
|
> `redirect`: адрес_порт
|
|
|
|
|
|
|
|
|
|
Freedom будет принудительно отправлять все данные на указанный адрес (а не на адрес, указанный во входящем соединении).
|
|
|
|
|
|
|
|
|
|
Его значение представляет собой строку, например: `"127.0.0.1:80"`, `":1234"`.
|
|
|
|
|
|
|
|
|
|
Если адрес не указан, например, `":443"`, Freedom не будет изменять исходный целевой адрес.
|
|
|
|
|
Если порт равен `0`, например, `"xray.com: 0"`, Freedom не будет изменять исходный порт.
|
|
|
|
|
|
|
|
|
|
> `userLevel`: number
|
|
|
|
|
|
|
|
|
|
Уровень пользователя, для соединения будет использоваться [локальная политика](../policy.md#levelpolicyobject), соответствующая этому уровню пользователя.
|
|
|
|
|
|
|
|
|
|
Значение userLevel соответствует значению `level` в разделе [policy](../policy.md#policyobject). Если не указано, используется значение по умолчанию - 0.
|
|
|
|
|
|
|
|
|
|
> `fragment`: map
|
|
|
|
|
|
|
|
|
|
Некоторые пары "ключ-значение" для управления исходящей TCP-фрагментацией, которые в некоторых случаях могут обмануть систему цензуры, например, обойти черный список SNI.
|
|
|
|
|
|
|
|
|
|
`"packets"`: поддерживаются два режима фрагментации: "1-3" - это фрагментация потока TCP, применяемая к первым трем операциям записи данных на стороне клиента. "tlshello" - это фрагментация пакета TLS-рукопожатия.
|
|
|
|
|
|
|
|
|
|
`"length"`: длина фрагмента пакета (в байтах).
|
|
|
|
|
|
|
|
|
|
`"interval"`: интервал фрагментации (в миллисекундах).
|
|
|
|
|
|
|
|
|
|
> `proxyProtocol`: number
|
|
|
|
|
|
|
|
|
|
Протокол PROXY обычно используется в сочетании с `redirect` для перенаправления на Nginx или другой сервер, на котором включен протокол PROXY. Если сервер не поддерживает протокол PROXY, соединение будет разорвано.
|
|
|
|
|
|
|
|
|
|
Значение proxyProtocol - это номер версии протокола PROXY, возможные значения: `1` или `2`. Если не указано, используется значение по умолчанию - `0` (протокол не используется).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|