mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-10-10 08:05:42 +00:00
332 lines
8.3 KiB
Markdown
332 lines
8.3 KiB
Markdown
---
|
|
icon: material/new-box
|
|
---
|
|
|
|
!!! quote "sing-box 1.14.0 中的更改"
|
|
|
|
:material-delete-clock: [strategy](#strategy)
|
|
:material-plus: [evaluate](#evaluate)
|
|
:material-plus: [respond](#respond)
|
|
:material-plus: [disable_optimistic_cache](#disable_optimistic_cache)
|
|
:material-plus: [timeout](#timeout)
|
|
:material-plus: [race](#race)
|
|
:material-plus: [speculative](#speculative)
|
|
:material-plus: [remove_client_subnet](#remove_client_subnet)
|
|
|
|
!!! quote "sing-box 1.12.0 中的更改"
|
|
|
|
:material-plus: [strategy](#strategy)
|
|
:material-plus: [predefined](#predefined)
|
|
|
|
!!! question "自 sing-box 1.11.0 起"
|
|
|
|
### 结构
|
|
|
|
```json
|
|
{
|
|
"action": "",
|
|
"race": false,
|
|
|
|
... // 动作字段
|
|
}
|
|
```
|
|
|
|
#### action
|
|
|
|
要执行的动作。默认使用 `route`。
|
|
|
|
#### race
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
仅可用于 `route`、`respond`、`reject` 和 `predefined` 动作。
|
|
|
|
需要 [`match_response`](/zh/configuration/dns/rule/#match_response)(对 logical 规则,位于子规则中)。
|
|
与 `speculative` 冲突。
|
|
|
|
默认情况下,规则逐条按顺序匹配:带 `match_response` 的规则等待其引用的响应,在它被判定之前不会匹配任何后续规则。
|
|
|
|
启用 `race` 的规则成为竞态规则,不再保持这一顺序:其引用的响应尚未到达时,规则匹配会越过它继续进行,因此竞态规则的匹配相互并行、也与后续规则并行。每条竞态规则在其引用的响应可用时被判定,首个匹配的竞态规则立即终止规则评估,其余查询将被取消。
|
|
|
|
未启用 `race` 的规则仍严格按顺序生效:只要前面还有未判定的竞态规则,其他已匹配规则的动作就被扣住,直到所有竞态规则均未匹配。因此只有竞态规则之间的结果取决于服务器速度。
|
|
|
|
### route
|
|
|
|
```json
|
|
{
|
|
"action": "route", // 默认
|
|
"server": "",
|
|
"speculative": false,
|
|
"strategy": "",
|
|
"disable_cache": false,
|
|
"disable_optimistic_cache": false,
|
|
"rewrite_ttl": null,
|
|
"timeout": "",
|
|
"client_subnet": null,
|
|
"remove_client_subnet": false
|
|
}
|
|
```
|
|
|
|
`route` 继承了将 DNS 请求 路由到指定服务器的经典规则动作。
|
|
|
|
#### server
|
|
|
|
==必填==
|
|
|
|
目标 DNS 服务器的标签。
|
|
|
|
#### speculative
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
与 `race` 冲突。没有前序竞态规则时无效果。
|
|
|
|
默认情况下,查询决不与未判定的竞态规则并行发出:已匹配的 `route` 动作扣住其查询,直到所有竞态规则均未匹配后才发送。
|
|
|
|
启用 `speculative` 后,查询成为投机查询:在规则匹配时立即发出、与未判定的竞态规则并行,且可能被浪费;其响应仍仅在所有竞态规则均未匹配后才被使用。
|
|
|
|
#### strategy
|
|
|
|
!!! question "自 sing-box 1.12.0 起"
|
|
|
|
!!! failure "已在 sing-box 1.14.0 废弃"
|
|
|
|
`strategy` 已在 sing-box 1.14.0 废弃,且将在 sing-box 1.16.0 中被移除。
|
|
|
|
为此查询设置域名策略。
|
|
|
|
可选项:`prefer_ipv4` `prefer_ipv6` `ipv4_only` `ipv6_only`。
|
|
|
|
#### disable_cache
|
|
|
|
在此查询中禁用缓存。
|
|
|
|
#### disable_optimistic_cache
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
在此查询中禁用乐观 DNS 缓存。
|
|
|
|
#### rewrite_ttl
|
|
|
|
重写 DNS 回应中的 TTL。
|
|
|
|
#### timeout
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
覆盖匹配查询的 DNS 查询超时时间。
|
|
|
|
将覆盖 `dns.timeout`。
|
|
|
|
#### client_subnet
|
|
|
|
默认情况下,将带有指定 IP 前缀的 `edns0-subnet` OPT 附加记录附加到每个查询。
|
|
|
|
如果值是 IP 地址而不是前缀,则会自动附加 `/32` 或 `/128`。
|
|
|
|
将覆盖 `dns.client_subnet`.
|
|
|
|
#### remove_client_subnet
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
移除查询中的 `edns0-subnet` OPT 附加记录,并抑制 `dns.client_subnet`。
|
|
|
|
与 `client_subnet` 冲突。
|
|
|
|
### evaluate
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
```json
|
|
{
|
|
"action": "evaluate",
|
|
"server": "",
|
|
"tag": "",
|
|
"speculative": false,
|
|
"disable_cache": false,
|
|
"disable_optimistic_cache": false,
|
|
"rewrite_ttl": null,
|
|
"timeout": "",
|
|
"client_subnet": null,
|
|
"remove_client_subnet": false
|
|
}
|
|
```
|
|
|
|
`evaluate` 向指定服务器发送 DNS 查询并保存已评估的响应,供后续规则通过 [`match_response`](/zh/configuration/dns/rule/#match_response) 和响应字段进行匹配。与 `route` 不同,它**不会**终止规则评估。
|
|
|
|
仅允许在顶层 DNS 规则中使用(不可在逻辑子规则内部使用)。
|
|
使用 [`match_response`](/zh/configuration/dns/rule/#match_response) 或响应匹配字段的规则,
|
|
需要位于更早的顶层 `evaluate` 规则之后。规则自身的 `evaluate` 动作不能满足这个条件,
|
|
因为匹配发生在动作执行之前。
|
|
|
|
#### server
|
|
|
|
==必填==
|
|
|
|
目标 DNS 服务器的标签。
|
|
|
|
#### tag
|
|
|
|
已评估响应的标签。
|
|
|
|
带标签的响应仅能通过 [`match_response`](/zh/configuration/dns/rule/#match_response) 以标签引用;
|
|
`match_response: true` 引用最近一条无 `tag` 的 `evaluate` 动作的响应。
|
|
|
|
#### speculative
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
没有前序竞态规则时无效果。
|
|
|
|
默认情况下,查询决不与未判定的竞态规则并行发出:已匹配的 `evaluate` 动作扣住其查询,规则匹配在此处停止,直到所有竞态规则均未匹配。
|
|
|
|
启用 `speculative` 后,查询成为投机查询:在规则匹配时立即发出、与未判定的竞态规则并行,且可能被浪费;规则匹配继续进行而不等待竞态规则。
|
|
|
|
#### disable_cache
|
|
|
|
在此查询中禁用缓存。
|
|
|
|
#### disable_optimistic_cache
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
在此查询中禁用乐观 DNS 缓存。
|
|
|
|
#### rewrite_ttl
|
|
|
|
重写 DNS 回应中的 TTL。
|
|
|
|
#### timeout
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
覆盖匹配查询的 DNS 查询超时时间。
|
|
|
|
将覆盖 `dns.timeout`。
|
|
|
|
#### client_subnet
|
|
|
|
默认情况下,将带有指定 IP 前缀的 `edns0-subnet` OPT 附加记录附加到每个查询。
|
|
|
|
如果值是 IP 地址而不是前缀,则会自动附加 `/32` 或 `/128`。
|
|
|
|
将覆盖 `dns.client_subnet`.
|
|
|
|
#### remove_client_subnet
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
移除查询中的 `edns0-subnet` OPT 附加记录,并抑制 `dns.client_subnet`。
|
|
|
|
与 `client_subnet` 冲突。
|
|
|
|
### respond
|
|
|
|
!!! question "自 sing-box 1.14.0 起"
|
|
|
|
```json
|
|
{
|
|
"action": "respond"
|
|
}
|
|
```
|
|
|
|
`respond` 会终止规则评估,并直接返回前序 [`evaluate`](/zh/configuration/dns/rule_action/#evaluate) 动作保存的已评估的响应。
|
|
|
|
此动作不会发起新的 DNS 查询。
|
|
|
|
只能用于前面已有顶层 `evaluate` 规则的场景。如果运行时命中该动作时没有已评估的响应,则请求会直接返回错误,而不是继续匹配后续规则。
|
|
|
|
### route-options
|
|
|
|
```json
|
|
{
|
|
"action": "route-options",
|
|
"disable_cache": false,
|
|
"disable_optimistic_cache": false,
|
|
"rewrite_ttl": null,
|
|
"timeout": "",
|
|
"client_subnet": null,
|
|
"remove_client_subnet": false
|
|
}
|
|
```
|
|
|
|
`route-options` 为路由设置选项。
|
|
|
|
### reject
|
|
|
|
```json
|
|
{
|
|
"action": "reject",
|
|
"method": "",
|
|
"no_drop": false
|
|
}
|
|
```
|
|
|
|
`reject` 拒绝 DNS 请求。
|
|
|
|
#### method
|
|
|
|
- `default`: 返回 REFUSED。
|
|
- `drop`: 丢弃请求。
|
|
|
|
默认使用 `default`。
|
|
|
|
#### no_drop
|
|
|
|
如果未启用,则 30 秒内触发 50 次后,`method` 将被暂时覆盖为 `drop`。
|
|
|
|
当 `method` 设为 `drop` 时不可用。
|
|
|
|
### predefined
|
|
|
|
!!! question "自 sing-box 1.12.0 起"
|
|
|
|
```json
|
|
{
|
|
"action": "predefined",
|
|
"rcode": "",
|
|
"answer": [],
|
|
"ns": [],
|
|
"extra": []
|
|
}
|
|
```
|
|
|
|
`predefined` 以预定义的 DNS 记录响应。
|
|
|
|
#### rcode
|
|
|
|
响应码。
|
|
|
|
| 值 | 旧 rcode DNS 服务器中的值 | 描述 |
|
|
|------------|--------------------|-----------------|
|
|
| `NOERROR` | `success` | Ok |
|
|
| `FORMERR` | `format_error` | Bad request |
|
|
| `SERVFAIL` | `server_failure` | Server failure |
|
|
| `NXDOMAIN` | `name_error` | Not found |
|
|
| `NOTIMP` | `not_implemented` | Not implemented |
|
|
| `REFUSED` | `refused` | Refused |
|
|
|
|
默认使用 `NOERROR`。
|
|
|
|
#### answer
|
|
|
|
用于作为回答响应的文本 DNS 记录列表。
|
|
|
|
例子:
|
|
|
|
| 记录类型 | 例子 |
|
|
|--------|-------------------------------|
|
|
| `A` | `localhost. IN A 127.0.0.1` |
|
|
| `AAAA` | `localhost. IN AAAA ::1` |
|
|
| `TXT` | `localhost. IN TXT \"Hello\"` |
|
|
|
|
#### ns
|
|
|
|
用于作为名称服务器响应的文本 DNS 记录列表。
|
|
|
|
#### extra
|
|
|
|
用于作为额外记录响应的文本 DNS 记录列表。
|