DNS协议与解析流程
约 1643 字大约 5 分钟
dnsprotocol
2025-07-06
概述
DNS(Domain Name System)是互联网的"电话簿",将人类可读的域名转换为机器可读的IP地址。DNS使用分层分布式数据库架构,是互联网最关键的基础设施之一。本文深入解析DNS协议的报文格式、记录类型、解析流程和安全机制。
DNS消息格式
DNS使用UDP端口53进行查询(消息小于512字节时),TCP端口53用于区域传输和大响应。
+---------------------+
| Header | 12字节固定头部
+---------------------+
| Question | 查询问题部分
+---------------------+
| Answer | 应答资源记录
+---------------------+
| Authority | 授权资源记录
+---------------------+
| Additional | 附加资源记录
+---------------------+Header格式(12字节):
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| Opcode |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
标志位说明:
QR: 0=查询, 1=响应
Opcode: 0=标准查询, 1=反向查询, 2=状态请求
AA: 权威应答标志
TC: 截断标志(响应超过512字节时设置)
RD: 期望递归
RA: 可用递归
RCODE: 0=无错误, 1=格式错误, 2=服务器失败, 3=名称不存在(NXDOMAIN)DNS记录类型
各记录类型详解与查询示例:
# A记录:域名到IPv4
dig example.com A
# example.com. 300 IN A 93.184.216.34
# AAAA记录:域名到IPv6
dig example.com AAAA
# example.com. 300 IN AAAA 2606:2800:220:1:248:1893:25c8:1946
# CNAME记录:别名
dig www.example.com CNAME
# www.example.com. 3600 IN CNAME example.com.
# MX记录:邮件服务器(带优先级)
dig example.com MX
# example.com. 3600 IN MX 10 mail1.example.com.
# example.com. 3600 IN MX 20 mail2.example.com.
# NS记录:域名服务器
dig example.com NS
# example.com. 86400 IN NS ns1.example.com.
# example.com. 86400 IN NS ns2.example.com.
# TXT记录:SPF/DKIM/域名验证
dig example.com TXT
# example.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all"
# SRV记录:服务发现
dig _sip._tcp.example.com SRV
# _sip._tcp.example.com. 3600 IN SRV 10 60 5060 sip.example.com.
# 格式:优先级 权重 端口 目标主机
# SOA记录:区域权威信息
dig example.com SOA
# example.com. 3600 IN SOA ns1.example.com. admin.example.com. (
# 2024010101 ; 序列号
# 3600 ; 刷新间隔
# 900 ; 重试间隔
# 604800 ; 过期时间
# 86400 ; 最小TTL
# )递归查询 vs 迭代查询
关键区别:
- 递归查询: 客户端→本地解析器,解析器负责完成整个查询过程
- 迭代查询: 本地解析器→各级DNS服务器,每个服务器只返回下一步应该询问谁
缓存与TTL
DNS缓存存在于多个层级:
# 查看Linux DNS缓存(systemd-resolved)
resolvectl statistics
# 清除缓存
resolvectl flush-caches
# macOS清除DNS缓存
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
# 查看记录的TTL
dig +nocmd +noall +answer example.com
# example.com. 300 IN A 93.184.216.34
# TTL=300表示缓存300秒
# 跟踪完整解析路径
dig +trace example.com区域传输(Zone Transfer)
区域传输用于主DNS服务器向从DNS服务器同步区域数据:
# AXFR:完全区域传输
dig @ns1.example.com example.com AXFR
# IXFR:增量区域传输(基于序列号)
dig @ns1.example.com example.com IXFR=2024010100
# 安全配置:限制区域传输
# BIND named.conf
zone "example.com" {
type master;
file "example.com.zone";
allow-transfer { 10.0.0.2; 10.0.0.3; }; # 仅允许从服务器
also-notify { 10.0.0.2; 10.0.0.3; }; # 变更时通知
};DNSSEC
DNSSEC通过数字签名保证DNS响应的完整性和真实性,防止DNS劫持和缓存投毒。
新增的记录类型:
| 记录类型 | 说明 |
|---|---|
| RRSIG | 资源记录的数字签名 |
| DNSKEY | 区域的公钥 |
| DS | 委托签名者记录(指向子区域的DNSKEY摘要) |
| NSEC/NSEC3 | 证明某记录不存在 |
# 验证DNSSEC签名
dig +dnssec example.com
# 查看DNSKEY
dig example.com DNSKEY
# 查看DS记录
dig example.com DS
# 使用delv工具验证
delv @8.8.8.8 example.com A +rtraceDNS放大攻击
DNS放大攻击利用DNS的特性进行DDoS攻击:查询小(60字节),响应大(3000字节),放大倍数可达50倍以上。
防御措施:
# 限制递归查询(BIND配置)
options {
allow-recursion { 10.0.0.0/8; 172.16.0.0/12; };
rate-limit {
responses-per-second 10;
window 5;
};
};
# 禁用ANY查询类型
# 或返回最小响应(RFC 8482)
# 使用Response Rate Limiting (RRL)
rate-limit {
responses-per-second 5;
referrals-per-second 5;
nodata-per-second 5;
nxdomains-per-second 5;
errors-per-second 5;
all-per-second 100;
};
# BCP38: 在网络边界过滤伪造源IPDNS over HTTPS/TLS
# DNS over HTTPS (DoH)
curl -s -H 'accept: application/dns-json' \
'https://cloudflare-dns.com/dns-query?name=example.com&type=A'
# DNS over TLS (DoT) - 端口853
# systemd-resolved配置
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com
DNSOverTLS=yes
# 验证DoT连接
kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com常用DNS工具
# dig - 最常用的DNS查询工具
dig example.com # 基本查询
dig +short example.com # 精简输出
dig @8.8.8.8 example.com # 指定DNS服务器
dig +trace example.com # 跟踪解析路径
dig -x 93.184.216.34 # 反向解析
# nslookup - 交互式查询
nslookup example.com
nslookup -type=MX example.com
# host - 简洁查询
host example.com
host -t AAAA example.com
# whois - 域名注册信息
whois example.com总结
DNS是互联网最基础的服务之一,其分层架构和缓存机制保证了全球域名解析的高效运行。理解DNS的消息格式、记录类型和解析流程,对于网络故障排查、安全防护和基础设施管理都至关重要。随着DoH/DoT的推广,DNS的隐私保护也在不断加强。
贡献者
更新日志
2026/3/14 13:09
查看所有更新日志
9f6c2-feat: organize wiki content and refresh site setup于