105 lines
5.0 KiB
Markdown
105 lines
5.0 KiB
Markdown
# DNS Checker
|
||
|
||
`type: dns` 支持两种解析模式:本机解析器检查和指定 DNS server 协议级检查。
|
||
|
||
## resolver 模式
|
||
|
||
| 模式 | 说明 |
|
||
| -------- | ----------------------------------------------------------------------------- |
|
||
| `system` | 使用本机 DNS 解析器检查域名是否能解析到预期地址 |
|
||
| `server` | 直接向指定 DNS server 发起 UDP/TCP 深度拨测,检查 RCODE、TTL、flags、记录值等 |
|
||
|
||
## `dns.resolver: system` 配置项
|
||
|
||
| 字段 | 说明 | 必填 | 默认值 |
|
||
| -------------- | ----------------------------- | ---- | -------- |
|
||
| `dns.resolver` | 解析模式 | 是 | `system` |
|
||
| `dns.name` | 待解析域名 | 是 | 无 |
|
||
| `dns.family` | 地址族:`any`、`ipv4`、`ipv6` | 否 | `any` |
|
||
|
||
### system 模式 expect
|
||
|
||
| 字段 | 说明 | 断言模型 |
|
||
| ------------ | -------------------- | --------------------------------- |
|
||
| `values` | 解析结果地址集合断言 | DNS 集合(include/exclude/exact) |
|
||
| `valueCount` | 解析结果数量 | ValueMatcher |
|
||
| `durationMs` | 解析耗时 | ValueMatcher |
|
||
|
||
```yaml
|
||
- id: "dns-system-api"
|
||
name: "本机 DNS 解析"
|
||
type: dns
|
||
dns:
|
||
resolver: system
|
||
name: "api.example.com"
|
||
family: any
|
||
expect:
|
||
values:
|
||
exact:
|
||
- "203.0.113.10"
|
||
durationMs:
|
||
lte: 500
|
||
```
|
||
|
||
## `dns.resolver: server` 配置项
|
||
|
||
| 字段 | 说明 | 必填 | 默认值 |
|
||
| ---------------------- | --------------------------------- | ---- | -------- |
|
||
| `dns.resolver` | 解析模式 | 是 | `server` |
|
||
| `dns.server` | DNS server 地址 | 是 | 无 |
|
||
| `dns.name` | 查询域名 | 是 | 无 |
|
||
| `dns.port` | DNS server 端口 | 否 | `53` |
|
||
| `dns.protocol` | 传输协议:`udp`、`tcp` | 否 | `udp` |
|
||
| `dns.recordType` | DNS 记录类型 | 否 | `A` |
|
||
| `dns.recursionDesired` | 是否设置 RD flag | 否 | `true` |
|
||
| `dns.tcpFallback` | UDP 响应 TC=1 时是否 TCP fallback | 否 | `true` |
|
||
| `dns.maxResponseBytes` | 响应最大字节数 | 否 | `4KB` |
|
||
|
||
`recordType` 可选值:`A`、`AAAA`、`CNAME`、`NS`、`MX`、`TXT`、`SOA`、`SRV`、`CAA`、`PTR`。
|
||
|
||
### server 模式 expect
|
||
|
||
| 字段 | 说明 | 断言模型 |
|
||
| -------------------- | ---------------------------------- | --------------------------------- |
|
||
| `responded` | 是否收到 DNS response | boolean |
|
||
| `rcode` | 期望 RCODE 列表,如 `NOERROR` | string[] |
|
||
| `values` | 目标类型记录值集合断言 | DNS 集合(include/exclude/exact) |
|
||
| `valueCount` | 目标类型记录数量 | ValueMatcher |
|
||
| `answerCount` | answer section 总记录数 | ValueMatcher |
|
||
| `ttlMin` | answer 中最小 TTL | ValueMatcher |
|
||
| `ttlMax` | answer 中最大 TTL | ValueMatcher |
|
||
| `authoritative` | AA flag | boolean |
|
||
| `recursionAvailable` | RA flag | boolean |
|
||
| `truncated` | TC flag | boolean |
|
||
| `authenticatedData` | AD flag | boolean |
|
||
| `result` | 完整结构化响应的 JSONPath 兜底断言 | ContentExpectations |
|
||
| `durationMs` | 完整查询耗时 | ValueMatcher |
|
||
|
||
```yaml
|
||
- id: "dns-server-api"
|
||
name: "Cloudflare DNS A 记录"
|
||
type: dns
|
||
dns:
|
||
resolver: server
|
||
server: "1.1.1.1"
|
||
name: "api.example.com"
|
||
recordType: A
|
||
expect:
|
||
rcode: ["NOERROR"]
|
||
values:
|
||
include:
|
||
- "203.0.113.10"
|
||
ttlMin:
|
||
gte: 60
|
||
durationMs:
|
||
lte: 200
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- 未配置 expect 时,`system` 模式默认要求解析成功且 `valueCount > 0`,`server` 模式默认要求 `NOERROR + valueCount > 0`。
|
||
- 显式配置非 `NOERROR` rcode(如 `NXDOMAIN`)时,不自动要求 `valueCount > 0`。
|
||
- `values.exact` 忽略返回顺序。
|
||
- 对 A/AAAA 查询,CNAME 链不计入 `values`,单独放入 `cnameChain`。
|
||
- `values` 按记录类型规范化为字符串,例如 MX 为 `"10 mail.example.com"`,SRV 为 `"10 60 443 server.example.com"`。
|