---
url: /configuration/route/rule-set.md
description: 从文件、URL、内联文本或内联规则构造命名规则集
---

# rule_set

`rule_sets` 在顶层按名字定义规则集，路由/DNS 规则用 `rule_set` 引用。来源可以是本地文件、远程 URL、内联 payload 或 sing-box 风格的内联 `rules`。

```yaml check
rule_sets:
  private:
    rules:
      - {ip_is_private: true}
  adguard:
    format: adguard
    payload:
      - "||ads.example^"

outbounds:
  direct:
    type: direct

route:
  rules:
    - {rule_set: [private], outbound: direct}
    - {rule_set: [adguard], action: reject}
  final: direct

dns:
  servers:
    default: {type: udp, address: 127.0.0.1:53}
  final: default
```

## 字段

### path

* 类型：路径。
* 必填：与 `url`、`payload` 或 `rules` 组成来源选择。
* 默认：有 `url` 且未写时，是数据目录下 `rule-sets/<name>`。
* 行为：相对路径以数据目录为基准。

### url

* 类型：HTTP/HTTPS URL。
* 必填：可选。
* 行为：副本缺失或超过 `refresh` 时抓取；抓取失败时继续使用已有副本或 `payload`。

### refresh

* 类型：时长。
* 默认：`1d`。

### http_client

* 类型：`http_clients` 名字。
* 必填：可选。
* 默认：`route.default_http_client`，再没有时使用普通客户端。

### via

* 类型：出站名。
* 必填：可选。
* 默认：`http_client` 的 `via`；两边都没有时使用 `route.final`。

### header

* 类型：映射；每个请求头可写一个字符串或字符串数组。
* 默认：空。

### size_limit

* 类型：大小。
* 默认：`64MiB`。

### format

* 类型：字符串枚举。
* 必填：可选。
* 默认：按内容自动识别；AdGuard 列表必须显式写 `adguard`。
* 取值：`srs`、`mrs`、`json`、`text`、`adguard`。

### behavior

* 类型：字符串枚举。
* 默认：`classical`。
* 取值：`domain`、`ipcidr`、`classical`。
* 行为：文本规则集的条目语义。

### payload

* 类型：字符串数组。
* 必填：可选。
* 行为：内联文本行；有 `url` 时作为首次抓取前的临时内容。

### initial

* 类型：路径。
* 必填：可选。
* 行为：远程规则集第一份副本出现前读取的初始文件。

### rules

* 类型：`RuleSpec` 数组。
* 必填：可选。
* 限制：必须单独使用，不能同时写 `path`、`url` 或 `payload`；规则是无动作的 headless 规则。

## 说明

不写 `rules` 时，`path`、`url`、`payload` 至少要有一个。`rules`、路径/URL/payload 之外还写动作字段会被拒绝。内联 `rules` 和 sing-box source JSON 使用同一套匹配字段，见[路由规则](/configuration/route/rule)。

## 相关

* [路由总览](/configuration/route/)
* [路由规则](/configuration/route/rule)
* [http_clients](/configuration/http-client)
