---
url: /configuration/dns/rule-action.md
description: 询问、评估、返回、合并选项、拒绝和预定义 DNS 响应
---

# DNS 规则动作

DNS 规则默认询问一个服务器；`evaluate` 保存响应供后续匹配，`respond` 返回已保存响应，`route-options` 只合并选项，`reject` 和 `predefined` 当场回答。

```yaml check
dns:
  servers:
    local:
      type: hosts
      hosts:
        nas.lan: 192.0.2.10
    real:
      type: udp
      address: 127.0.0.1:53
  rules:
    - {domain_suffix: [nas.lan], server: local}
    - {domain_suffix: [cdn.example], action: route-options, rewrite_ttl: 60}
    - {domain: [gone.example], action: predefined, rcode: NXDOMAIN}
  final: real
```

## 字段

### action

* 类型：字符串枚举。
* 默认：`route`。
* 取值：`route`、`evaluate`、`respond`、`route-options`、`reject`、`predefined`。

### server

* 类型：DNS 服务器名。
* 必填：`route`、`evaluate` 时是。
* 行为：本次要询问的服务器。

### tag

* 类型：字符串。
* 行为：`evaluate` 给保存的响应打标签。

### method

* 类型：字符串枚举。
* 默认：`default`。
* 取值：`default`、`drop`。
* 限制：只用于 `reject`；其他值被拒绝。

### rewrite_ttl

* 类型：32 位无符号整数，单位秒。
* 行为：改写答案 TTL，并决定缓存多久；后面的规则覆盖前面的。

### disable_cache

* 类型：布尔值。
* 默认：`false`。
* 行为：合并后只要任一规则打开，本次查询就绕过缓存。

### strategy

* 类型：字符串枚举。
* 取值：`as_is`、`prefer_ipv4`、`prefer_ipv6`、`ipv4_only`、`ipv6_only`。
* 行为：后面的规则覆盖前面的地址族策略。

### client_subnet

* 类型：IP 地址或 CIDR。
* 行为：后面的规则覆盖前面的 ECS。

### remove_client_subnet

* 类型：布尔值。
* 默认：`false`。
* 行为：合并后只要任一规则打开，就删除客户端自带 ECS。

### timeout

* 类型：时长。
* 行为：本次查询等待上游的时间。

### rcode

* 类型：字符串枚举。
* 默认：`NOERROR`。
* 取值：`NOERROR`、`FORMERR`、`SERVFAIL`、`NXDOMAIN`、`NOTIMP`、`REFUSED`。
* 限制：用于 `predefined`。

### answer

* 类型：zone 文件记录字符串或数组。
* 行为：`predefined` 的 answer 区。

### ns

* 类型：zone 文件记录字符串或数组。
* 行为：`predefined` 的 authority 区。

### extra

* 类型：zone 文件记录字符串或数组。
* 行为：`predefined` 的 additional 区。

## 说明

`route` 询问服务器并立即返回；`evaluate` 询问并保存响应，不返回，继续遍历；`respond` 返回最近一次未打标签或 `match_response` 选中的响应。`route-options` 把选项并入后续查询，自身不回答。

`reject` 默认回答 `REFUSED`，`method: drop` 不回答。`predefined` 直接构造响应，记录在配置加载时解析；不写 TTL 的记录默认使用 `300` 秒。

除 `method` 外，解析器会接受字段，但动作自身不使用的选项不会产生效果；跨动作写明显矛盾字段时以 `check` 的编译错误为准。

## 相关

* [DNS 规则](/configuration/dns/rule)
* [路由规则动作](/configuration/route/rule-action)
* [DNS 总览](/configuration/dns/)
