009-DNS详解

DNS协议详解:互联网的“电话簿系统”

DNS(Domain Name System)是互联网最核心的基础设施之一,它将人类可读的域名(如 www.example.com)转换为机器可识别的IP地址(如 192.0.2.1)。


一、DNS核心概念

  1. 核心作用

    • 域名 ⇄ IP地址 的双向解析
    • 电子邮件路由(MX记录)
    • 服务发现(SRV记录)
    • 负载均衡和CDN调度
  2. 域名结构

    1
    2
    3
    4
    5
    6
    www.sub.example.com.
    │ │ │ │
    │ │ │ └── 根域(通常省略)
    │ │ └─────── 顶级域(TLD:.com)
    │ └────────── 二级域(example)
    └───────────── 主机名(www)
  3. 关键组件

    • 解析器(Resolver):客户端DNS软件(如Windows的dnsclient)
    • 根域名服务器:全球13组(A-M),存储TLD信息
    • TLD服务器:管理.com/.org等顶级域
    • 权威服务器:管理具体域名的记录(如example.com)

二、DNS协议工作原理

▶ 查询流程(递归查询示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sequenceDiagram
participant User
participant Resolver
participant Root
participant TLD
participant AuthNS

User->>Resolver: 查询 www.example.com
Resolver->>Root: 请求 .com 的TLD
Root-->>Resolver: 返回 .com TLD地址
Resolver->>TLD: 请求 example.com 的NS
TLD-->>Resolver: 返回 example.com 权威服务器
Resolver->>AuthNS: 请求 www.example.com 的A记录
AuthNS-->>Resolver: 返回 192.0.2.1
Resolver-->>User: 返回IP地址

▶ 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扩展
  • 过程
    1. 客户端发送UDP查询
    2. 服务端返回TC=1(截断标志)
    3. 客户端通过TCP 53端口重发查询

3. 扩展协议EDNS0(RFC 6891)

  • 解决传统DNS限制:
    • 支持 >512字节报文
    • 携带客户端子网信息(ECS)
    • DNSSEC支持
  • 报文结构扩展
    1
    2
    3
    +------------+--------------+
    | OPT伪RR | 扩展数据 |
    +------------+--------------+

五、DNSSEC安全扩展

解决DNS劫持/污染问题

1
2
3
4
5
graph LR
A[域名] --> B[生成密钥对]
B --> C[对记录签名]
C --> D[发布公钥到父域]
D --> E[验证链建立]
  • 核心机制
    • RRSIG:资源记录签名
    • DNSKEY:公钥存储
    • DS:父域存储子域公钥哈希
    • NSEC/NSEC3:否定存在证明

六、现代DNS技术演进

  1. DoH (DNS over HTTPS)

    • 端口:443
    • 格式:HTTPS承载DNS JSON报文
    • 优点:防监听、突破网络限制
  2. DoT (DNS over TLS)

    • 端口:853
    • 直接TLS加密DNS流量
    • 运营商友好
  3. HTTPDNS(移动端优化)

    • 绕过Local DNS,直接HTTP API查询
    • 腾讯云/Ali云广泛使用
  4. 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
2
3
4
5
6
7
8
9
10
11
12
# 基础查询
nslookup www.example.com
dig www.example.com A +trace # 跟踪完整解析路径

# 高级诊断
dig +dnssec example.com SOA # DNSSEC验证
dig @8.8.8.8 google.com # 指定DNS服务器
host -t MX example.com # 查询邮件记录

# 网络排查
tcpdump -i eth0 port 53 # 抓取DNS流量
dnscrypt-proxy --resolver-name=cloudflare # 加密DNS代理

九、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)