mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-10-01 19:38:14 +03:00
Direct/Freedom outbound: Add finalRules (matches network, port and ip, then action)
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
# Freedom (fragment, noises)
|
||||
# Freedom (fragment, noises)
|
||||
|
||||
Freedom — это исходящий протокол, который можно использовать для отправки (обычных) данных TCP или UDP в любую сеть.
|
||||
|
||||
::: warning
|
||||
Политика безопасности этого outbound может по умолчанию блокировать некоторые цели. Подробности см. ниже в `finalRules`.
|
||||
:::
|
||||
|
||||
## OutboundConfigurationObject
|
||||
|
||||
```json
|
||||
@@ -22,7 +26,17 @@ Freedom — это исходящий протокол, который можн
|
||||
}
|
||||
],
|
||||
"proxyProtocol": 0,
|
||||
"ipsBlocked": [] // Явно укажите пустой список, чтобы отключить блокировку частных IP по умолчанию
|
||||
"finalRules": [
|
||||
{
|
||||
"action": "block",
|
||||
"network": "tcp",
|
||||
"port": "22,25,465,587"
|
||||
},
|
||||
{
|
||||
"action": "block",
|
||||
"ip": ["geoip:cn"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -89,12 +103,46 @@ UDP-шум, используемый для отправки случайных
|
||||
|
||||
`proxyProtocol` принимает значение номера версии протокола PROXY — `1` или `2`. Если не указано, по умолчанию используется значение `0` (протокол не используется).
|
||||
|
||||
> `ipsBlocked`: [string]
|
||||
> `finalRules`: \[[FinalRuleObject](#finalruleobject)\]
|
||||
|
||||
Используется для указания списка запрещенных диапазонов IP. Формат совпадает с IP-правилами в [Routing](../routing.md#ruleobject).
|
||||
Последовательно сопоставляет финальные правила Freedom и разрешает или блокирует целевые соединения.
|
||||
|
||||
Если этот параметр задан, Freedom будет блокировать соединения с этими диапазонами IP. Обычно это используется на сервере для ограничения прямого исходящего трафика, например для блокировки внутренних сетей или запрета трафика в Китай напрямую через Freedom.
|
||||
По сравнению с блокировкой в `routing`, `finalRules` применяется на финальном этапе исходящего соединения Freedom: TCP сопоставляется после разрешения конечного IP, но до дозвона, а UDP сопоставляется для каждого пакета как при отправке, так и при приеме, поэтому работает строже и надежнее. Сопоставление каждого правила занимает около 50-150 нс.
|
||||
|
||||
Если `ipsBlocked` не задан явно, а входящий протокол — `VLESS`, `VMess`, `Trojan`, `Shadowsocks`, `Hysteria` или `WireGuard`, Freedom по умолчанию блокирует частные IP.
|
||||
Если ни одно правило не совпало, используется встроенное резервное правило: трафик от обратного прокси VLESS по умолчанию блокирует все цели; трафик от входящих `VLESS`, `VMess`, `Trojan`, `Shadowsocks`, `Hysteria` или `WireGuard` по умолчанию блокирует частные и зарезервированные диапазоны IP; прочий трафик по умолчанию разрешается.
|
||||
|
||||
По сравнению с блокировкой в `routing`, этот способ строже и надежнее, а для UDP проверка выполняется для каждого пакета, при этом каждая проверка занимает всего 50 нс; чтобы отключить это поведение по умолчанию, явно укажите `ipsBlocked: []`.
|
||||
Для семи типов входящих соединений выше или при явной настройке `finalRules`: если `domainStrategy` Freedom имеет значение `AsIs`, а цель является доменом, Freedom сначала разрешает цель в IP, а затем применяет `finalRules`. После этого цель уже не является доменом, поэтому последующий `sockopt.domainStrategy` и связанный с ним `happyEyeballs` больше не применяются.
|
||||
|
||||
Чтобы восстановить прежнее поведение, задайте ровно одно правило `allow` в `finalRules` без каких-либо условий сопоставления.
|
||||
|
||||
### FinalRuleObject
|
||||
|
||||
```json
|
||||
{
|
||||
"action": "block",
|
||||
"network": "tcp,udp",
|
||||
"port": "53,443",
|
||||
"ip": ["10.0.0.0/8", "2001:db8::/32"]
|
||||
}
|
||||
```
|
||||
|
||||
Все условия сопоставления в правиле объединяются логикой AND. Если условие опущено, оно не ограничивается.
|
||||
|
||||
> `action`: "allow" | "block"
|
||||
|
||||
Определяет действие при совпадении правила.
|
||||
|
||||
- `allow`: разрешить цель.
|
||||
- `block`: заблокировать цель.
|
||||
|
||||
> `network`: "tcp" | "udp" | "tcp,udp"
|
||||
|
||||
Сопоставляет тип сети. Правило вступает в силу, если тип соединения соответствует указанному. Также можно указать массив строк, например `["tcp", "udp"]`. Если опущено, совпадают все сети.
|
||||
|
||||
> `port`: number | string
|
||||
|
||||
Диапазон портов назначения. Синтаксис совпадает с [`port` в правилах маршрутизации](../routing.md#ruleobject). Если опущено, совпадают все порты.
|
||||
|
||||
> `ip`: \[string\]
|
||||
|
||||
Массив, каждый элемент которого представляет собой диапазон IP-адресов. Правило вступает в силу, если какой-либо элемент соответствует целевому IP-адресу. Синтаксис совпадает с [`ip` в правилах маршрутизации](../routing.md#ruleobject). Если опущено, совпадают все IP.
|
||||
|
||||
@@ -135,8 +135,18 @@ outbound:
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"redirect": "127.0.0.1:80",
|
||||
// Переопределить политику безопасности по умолчанию и разрешить только 127.0.0.1
|
||||
"ipsBlocked": ["!127.0.0.1/32"]
|
||||
// Разрешить только TCP 127.0.0.1:80 и заблокировать все остальные цели
|
||||
"finalRules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"network": "tcp",
|
||||
"port": 80,
|
||||
"ip": ["127.0.0.1/32"]
|
||||
},
|
||||
{
|
||||
"action": "block"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user