---
url: /manual/dns.md
description: DNS 规则、FakeIP、劫持和按网段/租户选择回答来源
---

# DNS：名字、假地址与来源策略

DNS 场景的核心是把“谁在问、问什么、应该由哪个上游或本地事实回答”拆成可组合规则。`dns.servers` 定义命名服务器，`dns.rules` 按顺序决定路由、拒绝或直接回答。

## 完整配置

```yaml check
networks:
  lab:
    id: 10
    address: [10.20.0.1/24]
    capture: true

inbounds:
  router:
    type: capture
    wan: [eth0]

outbounds:
  direct:
    type: direct

route:
  final: direct

dns:
  servers:
    real: {type: udp, address: 1.1.1.1:53}
    fake: {type: fakeip, inet4_range: 198.18.0.0/15}
    local: {type: hosts, hosts: {nas.lab.internal: 10.20.0.10}}
  rules:
    - {source_network: [lab], domain_suffix: [lab.internal], server: local}
    - {source_network: [lab], query_type: [A, AAAA], server: fake}
    - {query_type: AAAA, action: reject}
  final: real
```

完整字段见 [DNS 总览](/configuration/dns/)、[DNS 规则](/configuration/dns/rule) 和 [FakeIP](/configuration/dns/fakeip)。

## 查询怎么走

1. 来源网段/租户和问题名写入 DNS Facts。
2. 规则按顺序匹配；`server` 路由到指定上游，`reject`/`predefined` 可以当场回答。
3. `evaluate` 保存响应供后续规则用 `match_response` 检查，`respond` 再返回。
4. FakeIP 把名字映射为假地址；连接回到 mayami 后按映射恢复真实名字。

## 实践

* 客户端指定公共 DNS（例如 `8.8.8.8:53`）时，在路由规则里加 `action: hijack-dns`，交给同一 DNS 引擎。
* 网段写了 `domain` 时，活租约、正向名和反向名优先由网段自己的权威答案处理。
* `source_network`、`source_tenant` 在配置编译时换成持久号；改名字或 YAML 顺序不会串租户。
* DNS 规则不提供进程、用户、MAC、主机名、DSCP 和 IN-PORT 事实。

## 相关

* [DNS 配置](/configuration/dns/)
* [DNS 服务器](/configuration/dns/server/)
* [规则](/manual/rules)
* [networks](/manual/networks)
