DNS区域是什么?
DNS区域是DNS命名空间中由特定组织或管理员管理的不同部分。区域包含一个或多个域的DNS记录,由权威名称服务器提供。虽然域是DNS树中的名称,但区域是定义哪些名称服务器负责回答查询的管理边界。
域与区域
理解这种区别至关重要:
域
域是DNS层次结构中的名称:
example.com(域)
└── www.example.com(子域)
└── blog.example.com(子域)
└── api.example.com(子域)
区域
区域是对记录的管理控制:
单个区域用于域和子域:example.com区域包含:
- example.com
- www.example.com
- blog.example.com
- api.example.com
管理者:ns1.example.com、ns2.example.com
委派的子域区域:
example.com区域包含:
- example.com
- www.example.com
- 委派:api.example.com → 不同的名称服务器
api.example.com区域(单独)包含:
- api.example.com
- v1.api.example.com
- v2.api.example.com
管理者:ns1.apihost.com、ns2.apihost.com
区域成分
区域文件
包含区域所有DNS记录的文本文件:
; example.com区域文件
$TTL 3600
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; 序列号
7200 ; 刷新
3600 ; 重试
1209600 ; 过期
3600 ; 最小TTL
)
; 名称服务器记录
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A记录
@ IN A 203.0.113.50
www IN A 203.0.113.50
blog IN A 203.0.113.51
; MX记录
@ IN MX 10 mail.example.com.
mail IN A 203.0.113.52
; CNAME记录
ftp IN CNAME www.example.com.
; TXT记录
@ IN TXT "v=spf1 include:_spf.google.com ~all"
SOA记录(权威起始)
每个区域必须恰好有一个SOA记录:
example.com. IN SOA ns1.example.com. admin.example.com. (
2024010101 ; 序列号
7200 ; 刷新
3600 ; 重试
1209600 ; 过期
3600 ; 最小TTL
)
SOA字段:
| 字段 | 用途 | 示例值 |
|---|---|---|
| 主要NS | 主名称服务器 | ns1.example.com |
| 管理员邮箱 | 联系人(@ → .) | admin.example.com(admin@example.com) |
| 序列号 | 区域版本号 | 2024010101 |
| 刷新 | 辅助NS检查间隔 | 7200秒(2小时) |
| 重试 | 刷新失败的重试间隔 | 3600秒(1小时) |
| 过期 | 辅助NS放弃的时间 | 1209600秒(14天) |
| 最小TTL | 负缓存持续时间 | 3600秒(1小时) |
NS记录(名称服务器)
指定哪些服务器对区域具有权威性:
example.com. IN NS ns1.example.com.
example.com. IN NS ns2.example.com.
这些告诉世界哪些服务器要查询此区域中的记录。
区域类型
主区域(主)
区域记录编辑的权威来源:
ns1.example.com(主)
→ 区域文件在这里编辑
→ 直接进行更改
→ 通知辅助区域的更新
辅助区域(从)
从主区域复制的只读副本:
ns2.example.com(辅助)
→ 从主区域检索区域数据
→ 无法直接编辑
→ 根据SOA刷新间隔自动同步
区域转移(AXFR):
1. 辅助检查SOA序列号
2. 如果主序列较高→请求完整区域转移
3. 主发送整个区域
4. 辅助更新其副本
增量转移(IXFR):
1. 辅助仅请求上次序列号后的更改
2. 主发送差异
3. 对于具有小更改的大型区域更有效
前向区域
将域名映射到IP地址(最常见):
example.com → 203.0.113.50
www.example.com → 203.0.113.50
反向区域
将IP地址映射到域名(PTR记录):
50.113.0.203.in-addr.arpa → example.com
用于:
- 电子邮件服务器验证
- 记录和安全
- 故障排除
区域委派
委派为子域创建单独的区域:
父区域(example.com)
; example.com区域
@ IN A 203.0.113.50
www IN A 203.0.113.50
; 将api.example.com委派给不同的名称服务器
api IN NS ns1.apihost.com.
api IN NS ns2.apihost.com.
; 粘胶记录(如需要)
ns1.api IN A 198.51.100.1
ns2.api IN A 198.51.100.2
委派区域(api.example.com)
完全单独的区域文件,位于不同的名称服务器上:
; api.example.com区域(在ns1.apihost.com上)
@ IN A 198.51.100.10
v1 IN A 198.51.100.11
v2 IN A 198.51.100.12
为什么要委派?
- 组织:不同的团队管理不同的区域
- 技术:使用不同的DNS提供商(例如API在AWS上,网站在Cloudflare上)
- 性能:分散DNS负载
- 安全:隔离敏感服务
区域管理
序列号管理
序列号跟踪区域版本(通常为YYYYMMDDnn格式):
2024010101 ; 2024年1月1日,版本01
2024010102 ; 2024年1月1日,版本02
2024010201 ; 2024年1月2日,版本01
关键规则:序列号必须随每次更改增加,否则辅助区域不会更新。
区域转移安全
问题:区域转移暴露所有DNS记录 解决方案:将区域转移限制为授权的辅助区域 BIND配置:zone "example.com" {
type master;
file "/var/named/example.com.zone";
allow-transfer { 203.0.113.52; 203.0.113.53; }; // 仅辅助IP
notify yes;
};
TSIG(事务签名):使用共享密钥验证区域转移:
key "transfer-key" {
algorithm hmac-sha256;
secret "base64编码密钥";
};
allow-transfer { key transfer-key; };
检查区域配置
查询SOA记录
dig example.com SOA
; 答案部分:
example.com. 3600 IN SOA ns1.example.com. admin.example.com. (
2024010101 7200 3600 1209600 3600 )
查询NS记录
dig example.com NS
; 答案部分:
example.com. 86400 IN NS ns1.example.com.
example.com. 86400 IN NS ns2.example.com.
请求区域转移(AXFR)
dig @ns1.example.com example.com AXFR
# 如果允许,返回整个区域
# 如果被拒绝,返回转移失败
大多数公共名称服务器拒绝AXFR以防止信息泄露。
常见区域配置
简单网站
example.com区域:
@ A 203.0.113.50
www A 203.0.113.50
@ MX 10 mail.example.com
mail A 203.0.113.51
@ TXT "v=spf1 mx -all"
多服务区域
example.com区域:
@ A 203.0.113.50
www A 203.0.113.50
blog CNAME hosting.wordpress.com.
shop CNAME shops.myshopify.com.
cdn CNAME d111111abcdef8.cloudfront.net.
@ MX 10 aspmx.l.google.com.
委派子域
example.com区域:
@ A 203.0.113.50
www A 203.0.113.50
; 将api委派给AWS Route 53
api NS ns-123.awsdns-01.com.
api NS ns-456.awsdns-02.net.
; 将cdn委派给Cloudflare
cdn NS ns1.cloudflare.com.
cdn NS ns2.cloudflare.com.
区域文件最佳实践
1. 始终增加序列号:每次更改后,否则辅助区域不会更新
2. 使用基于日期的序列号:格式YYYYMMDDnn便于理解
3. 限制区域转移:仅允许授权的辅助区域
4. 使用多个名称服务器:至少2个,最好在不同网络上
5. 设置适当的TTL:平衡缓存收益与更新速度
6. 应用前测试:在加载前验证区域文件语法
7. 监控区域转移:确保辅助区域同步
8. 记录委派:记录哪些区域被委派及其位置
9. 备份区域文件:定期备份防止数据丢失
10. 使用版本控制:跟踪区域文件随时间的变化
高级区域功能
DNSSEC(区域签名)
对区域记录进行密码签名:
example.com. IN A 203.0.113.50
example.com. IN RRSIG A 8 2 3600 (
签名数据在此 )
防止缓存中毒和篡改。
动态DNS(DDNS)
允许程序化区域更新:
# 动态更新A记录
nsupdate -k Kupdate.key <<EOF
server ns1.example.com
update delete www.example.com A
update add www.example.com 300 A 203.0.113.51
send
EOF
用于:
- 家庭IP地址更新
- 自动扩展基础设施
- 服务发现
区域视图(分割视界DNS)
根据客户端IP提供不同的区域数据:
内部客户端:example.com → 10.0.0.50(内部)
外部客户端:example.com → 203.0.113.50(公共)
使用场景:
- 内部与外部网站版本
- 私有网络资源
- 基于地理的响应
故障排除区域问题
区域转移失败
症状:辅助区域不同步 检查:# 检查主区域是否允许转移
dig @ns1.example.com example.com AXFR
# 检查辅助日志以查找错误
tail -f /var/log/named.log
解决方案:
- 验证allow-transfer设置
- 检查服务器之间的网络连接
- 确保序列号增加
序列号未增加
症状:更改未传播到辅助区域 解决方案:每次区域编辑时始终增加序列号委派不工作
症状:子域无法解析 检查:# 验证委派
dig example.com NS
dig api.example.com NS
# 应为委派的子域显示不同的名称服务器
解决方案:
- 验证父区域中的NS记录
- 检查粘胶记录(如果名称服务器在子域内)
- 确认子区域已配置
DNS区域是分布式DNS管理的基础——理解区域结构、委派和管理使您能够为任何规模的组织有效地架构DNS。