DNS协议详解:互联网的“电话簿系统”
DNS(Domain Name System)是互联网最核心的基础设施之一,它将人类可读的域名(如 www.example.com)转换为机器可识别的IP地址(如 192.0.2.1)。
一、DNS核心概念
核心作用:
- 域名 ⇄ IP地址 的双向解析
- 电子邮件路由(MX记录)
- 服务发现(SRV记录)
- 负载均衡和CDN调度
域名结构:
1
2
3
4
5
6www.sub.example.com.
│ │ │ │
│ │ │ └── 根域(通常省略)
│ │ └─────── 顶级域(TLD:.com)
│ └────────── 二级域(example)
└───────────── 主机名(www)关键组件:
- 解析器(Resolver):客户端DNS软件(如Windows的dnsclient)
- 根域名服务器:全球13组(A-M),存储TLD信息
- TLD服务器:管理.com/.org等顶级域
- 权威服务器:管理具体域名的记录(如example.com)
二、DNS协议工作原理
▶ 查询流程(递归查询示例):
1 | sequenceDiagram |
▶ DNS报文结构(二进制格式):
| 偏移量 | 字段 | 长度 | 说明 |
|---|---|---|---|
| 0 | Transaction ID | 2字节 | 请求/响应匹配标识 |
| 2 | Flags | 2字节 | 控制字段(关键!) |
| 4 | Questions | 2字节 | 问题数量 |
| 6 | Answer RRs | 2字节 | 回答记录数 |
| 8 | Authority RRs | 2字节 | 权威记录数 |
| 10 | Additional RRs | 2字节 | 附加记录数 |
| 12 | Queries | 可变 | 查询的域名和类型 |
| … | Answers | 可变 | 资源记录(RR)数据 |
Flags字段详解(二进制位控制):
QR(1) Opcode(4) AA(1) TC(1) RD(1) RA(1) Z(3) RCODE(4)
- QR:0=查询,1=响应
- Opcode:0=标准查询,1=反向查询
- AA:权威回答
- TC:报文截断(UDP响应超512字节时)
- RD:期望递归查询
- RA:服务器支持递归
- RCODE:响应码(0=无错误,3=NXDOMAIN)
三、DNS资源记录(RR)类型大全
| 类型 | 值 | 说明 | 示例 |
|---|---|---|---|
| A | 1 | IPv4地址记录 | www IN A 192.0.2.1 |
| AAAA | 28 | IPv6地址记录 | www IN AAAA 2001:db8::1 |
| CNAME | 5 | 别名记录 | blog IN CNAME www |
| MX | 15 | 邮件交换记录 | @ IN MX 10 mail.example.com |
| TXT | 16 | 文本记录(SPF/DKIM等) | "v=spf1 include:_spf.google.com ~all" |
| NS | 2 | 权威名称服务器 | IN NS ns1.cloudflare.com |
| PTR | 12 | 反向解析记录 | 1.2.0.192.in-addr.arpa. IN PTR www.example.com |
| SOA | 6 | 起始授权机构(管理信息) | 包含主NS、序列号、刷新时间等 |
| SRV | 33 | 服务定位记录 | _http._tcp IN SRV 10 60 80 webserver |
| CAA | 257 | 证书颁发机构授权 | IN CAA 0 issue "letsencrypt.org" |
四、DNS传输协议
1. UDP(默认)
- 端口:53
- 特点:
- 最大512字节报文(超限触发TC标志)
- 无连接、快速响应
- 易受UDP反射攻击(放大攻击)
2. TCP(备用)
- 使用场景:
- 响应数据 > 512字节
- AXFR(区域传输)
- EDNS0扩展
- 过程:
- 客户端发送UDP查询
- 服务端返回TC=1(截断标志)
- 客户端通过TCP 53端口重发查询
3. 扩展协议EDNS0(RFC 6891)
- 解决传统DNS限制:
- 支持 >512字节报文
- 携带客户端子网信息(ECS)
- DNSSEC支持
- 报文结构扩展:
1
2
3+------------+--------------+
| OPT伪RR | 扩展数据 |
+------------+--------------+
五、DNSSEC安全扩展
解决DNS劫持/污染问题:
1 | graph LR |
- 核心机制:
- RRSIG:资源记录签名
- DNSKEY:公钥存储
- DS:父域存储子域公钥哈希
- NSEC/NSEC3:否定存在证明
六、现代DNS技术演进
DoH (DNS over HTTPS)
- 端口:443
- 格式:HTTPS承载DNS JSON报文
- 优点:防监听、突破网络限制
DoT (DNS over TLS)
- 端口:853
- 直接TLS加密DNS流量
- 运营商友好
HTTPDNS(移动端优化)
- 绕过Local DNS,直接HTTP API查询
- 腾讯云/Ali云广泛使用
Anonymized DNS(匿名化)
- 隐藏客户端IP
- 实现方案:DNS匿名中继
七、DNS报文实战分析(Wireshark示例)
查询报文:
Transaction ID: 0x9a1b
Flags: 0x0100 (Standard query)
Questions: 1
Queries:
www.google.com: type A, class IN
响应报文:
Transaction ID: 0x9a1b
Flags: 0x8180 (Standard query response, No error)
Answers: 4
Answer 1:
Name: www.google.com
Type: A (IPv4)
TTL: 300
Data: 142.250.179.68
Answer 2:
Name: www.google.com
Type: A
TTL: 300
Data: 142.250.179.67
... [CNAME记录等]
八、关键运维命令
1 | # 基础查询 |
九、DNS安全威胁与防护
| 威胁类型 | 原理 | 防护措施 |
|---|---|---|
| DNS劫持 | 篡改解析结果 | DNSSEC/DoH/DoT |
| DNS污染 | 伪造响应报文 | 加密传输+可信递归服务器 |
| DDoS攻击 | 洪水攻击DNS服务器 | Anycast+流量清洗 |
| NXDOMAIN攻击 | 查询不存在域名消耗资源 | 响应速率限制(RRL) |
| 隧道攻击 | 通过DNS通道传输恶意数据 | DNS流量深度检测 |
最佳实践:
- 权威服务器:启用DNSSEC+最小化暴露面
- 递归解析器:部署DoH/DoT+RPZ(响应策略区)
- 客户端:使用可信DNS(如Cloudflare 1.1.1.1或Google 8.8.8.8)