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
|
||||
该出站的默认安全策略可能会默认阻止一些目标,需配置 `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"]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -90,12 +104,46 @@ PROXY protocol 通常配合 `redirect` 重定向到开启了 PROXY protocol 协
|
||||
|
||||
proxyProtocol 的值为 PROXY protocol 版本号,可选 `1` 或 `2`,如不指定,默认为 `0` 不启用。
|
||||
|
||||
> `ipsBlocked`: [string]
|
||||
> `finalRules`: \[[FinalRuleObject](#finalruleobject)\]
|
||||
|
||||
用于指定一组禁止连接的 IP 范围,格式与 [路由配置](../routing.md#ruleobject) 中的 IP 规则相同。
|
||||
按顺序匹配 Freedom 最终出站规则,用于放行或阻止连接目标。
|
||||
|
||||
配置后,Freedom 会阻止连接到这些 IP 范围。常用于服务端限制直连出站,例如封锁内网地址,或阻止流量经 Freedom 直接回国。
|
||||
相比在 `routing` 中封锁,`finalRules` 位于 Freedom 最终出站阶段:TCP 在解析出最终 IP 后、拨号前匹配,UDP 收发均逐包匹配,因此更严谨、更彻底;每条规则匹配耗时约 50~150ns。
|
||||
|
||||
如果未显式配置 `ipsBlocked`,且入站协议为 `VLESS`、`VMess`、`Trojan`、`Shadowsocks`、`Hysteria` 或 `WireGuard`,Freedom 会默认阻止私有 IP。
|
||||
若未命中任何规则,则使用内置兜底规则:来自 VLESS 反向代理的流量默认阻止所有目标;来自 `VLESS`、`VMess`、`Trojan`、`Shadowsocks`、`Hysteria` 或 `WireGuard` 入站的流量默认阻止私有及保留 IP;其它情况默认放行。
|
||||
|
||||
相比在 `routing` 中封锁,这种方式更严谨、更彻底,且对于 UDP 会逐包匹配,每个仅耗时 50ns;如需关闭此默认策略,可显式设置 `ipsBlocked: []`。
|
||||
对上述七种入站,或显式配置了 `finalRules` 时:当 Freedom 的 `domainStrategy` 为 `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"]
|
||||
}
|
||||
```
|
||||
|
||||
规则中的各匹配条件为与关系;省略某个条件时,表示对此条件不作限制。
|
||||
|
||||
> `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。
|
||||
|
||||
+12
-2
@@ -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