---
url: /manual/rules.md
description: 一条流如何经过匹配、动作、嗅探、解析、直连或代理
---

# 规则：一条连接的一生

路由先决定一条流看到哪些事实，再按规则顺序选择动作。代理出站遵循“先拨后应”：目标真实连上后才让客户端握手成功。

```mermaid
sequenceDiagram
  participant C as 客户端
  participant M as mayami
  participant R as 规则/嗅探/DNS
  participant O as 出站
  participant T as 目标
  C->>M: 首包或 SYN
  M->>R: 来源、地址、端口、域名
  R->>R: sniff / resolve / route-options
  R-->>M: 直连、拒绝或某个出站
  M->>O: 代理时先拨号
  O->>T: 建连
  T-->>O: 成功或失败
  O-->>M: 结果
  M-->>C: SYN-ACK / RST / ICMP
  C->>T: 后续数据经 mayami 搬运
```

## 完整配置

```yaml check
rule_sets:
  lan-private:
    rules:
      - ip_is_private: true

outbounds:
  direct:
    type: direct
  proxy:
    type: socks
    server: 127.0.0.1:1080

route:
  rules:
    - {rule_set: lan-private, outbound: direct}
    - {protocol: dns, action: hijack-dns}
    - {action: sniff, timeout: 1s, sniffer: [tls, http, quic]}
    - {domain_suffix: [blocked.example], action: reject, method: drop}
    - {domain_suffix: [example.com], outbound: proxy}
  final: direct

dns:
  servers:
    real: {type: udp, address: 1.1.1.1:53}
    fake: {type: fakeip, inet4_range: 198.18.0.0/15}
  rules:
    - {domain_suffix: [lan], server: fake}
  final: real
```

字段和动作见 [路由规则](/configuration/route/rule)、[规则动作](/configuration/route/rule-action) 和 [协议探测](/configuration/route/sniff)。

## 怎样选

* 地址直连优先放在前面，可下沉到内核快路径。
* 需要域名的规则前先放 `sniff`，否则首包还没有协议和域名。
* `hijack-dns` 把客户端写死的 DNS 交给统一 DNS 引擎。
* `resolve` 在规则链中途解析名字；`PASS`/`PASS-RULE` 继续后续规则。
* `route-options` 修改目标、UDP 空闲时间和 TLS 分片；选项只影响后续执行。

## 模式与规则集

`mode: rule` 遍历规则；`global` 走 `GLOBAL` 选择器；`direct` 全部直连。自定义模式名可通过 `clash_mode` 限定规则。规则集来自本地文件、URL、内联 payload 或 sing-box 规则，见 [rule_set](/configuration/route/rule-set)。

## 相关

* [路由总览](/configuration/route/)
* [DNS](/manual/dns)
* [providers 与组](/manual/providers-groups)
* [chaining](/manual/chaining)
