强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第 01 章:DNS 协议与 BIND 简介

本章概述

本章介绍 DNS(Domain Name System)协议的基本原理、BIND 的历史与定位,以及权威服务器和递归服务器的区别。通过本章,你将建立对 DNS 体系的整体认知,为后续章节的实操打下基础。


1.1 DNS 协议基础

1.1.1 什么是 DNS

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

1.1.2 DNS 的历史

年份事件
1983Paul Mockapetris 发明 DNS(RFC 882/883)
1987DNS 规范更新(RFC 1034/1035,至今仍为核心标准)
1993BIND 4.x 发布,成为最广泛使用的 DNS 软件
1997BIND 8.x 发布,增强安全和性能
2000BIND 9.x 发布,完全重写,支持视图、DNSSEC 等
2021BIND 9.18 LTS 发布,支持 DoT/DoH
2024BIND 9.20 发布,持续优化性能和安全性

1.1.3 DNS 查询流程

一次完整的 DNS 查询过程如下:

客户端                递归服务器              根服务器    TLD服务器    权威服务器
  │                      │                      │          │           │
  │  1. 查询 example.com │                      │          │           │
  │─────────────────────>│                      │          │           │
  │                      │  2. 查询根            │          │           │
  │                      │─────────────────────>│          │           │
  │                      │  3. 返回 .com NS      │          │           │
  │                      │<─────────────────────│          │           │
  │                      │  4. 查询 .com         │          │           │
  │                      │─────────────────────────────>   │           │
  │                      │  5. 返回 example.com NS│         │           │
  │                      │<─────────────────────────────   │           │
  │                      │  6. 查询 example.com  │          │           │
  │                      │──────────────────────────────────────────>│
  │                      │  7. 返回 A 记录       │          │           │
  │                      │<──────────────────────────────────────────│
  │  8. 返回最终结果     │                      │          │           │
  │<─────────────────────│                      │          │           │

1.1.4 DNS 记录类型概览

记录类型全称用途
AAddress将域名映射到 IPv4 地址
AAAAIPv6 Address将域名映射到 IPv6 地址
CNAMECanonical Name域名别名
MXMail Exchanger邮件服务器
NSName Server域名服务器
TXTText文本记录(SPF、DKIM 等)
SOAStart of Authority区域授权信息
SRVService服务发现
PTRPointer反向解析
CAACertification Authority AuthorizationCA 授权

1.1.5 DNS 协议端口与传输层

协议端口说明
DNS over UDP53传统查询,响应小于 512 字节
DNS over TCP53区域传输、大响应(超过 512 字节时回退)
DNS over TLS (DoT)853加密查询(RFC 7858)
DNS over HTTPS (DoH)443基于 HTTPS 的加密查询(RFC 8484)

1.2 BIND 简介

1.2.1 什么是 BIND

BIND(Berkeley Internet Name Domain)是目前世界上使用最广泛的 DNS 服务器软件,由 ISC(Internet Systems Consortium)维护。据估算,全球约 70% 的 DNS 服务器运行 BIND。

1.2.2 BIND 的核心能力

能力说明
权威 DNS托管区域文件,响应域名查询
递归 DNS代替客户端完成完整的 DNS 解析链
转发将查询转发给上游 DNS
视图(Views)根据来源 IP 返回不同解析结果
DNSSECDNS 安全扩展,防止缓存投毒
动态更新运行时修改区域记录(DDNS)
RPZ响应策略区域,用于安全拦截
TSIG事务签名,保护区域传输和动态更新

1.2.3 BIND 版本线

# 查看当前安装的 BIND 版本
named -v
# 输出示例: BIND 9.18.30-1~ubuntu22.04.1-Ubuntu (Extended Support Version)
版本状态特性
9.16EOL(生命周期结束)不再推荐
9.18LTS(长期支持)推荐生产使用,支持到 2026 年
9.20最新稳定版新特性优先,支持到 2028 年

注意: 生产环境推荐使用 LTS 版本(9.18),除非你需要 9.20 中的特定新特性。


1.3 权威服务器 vs 递归服务器

这是理解 DNS 最关键的区分之一。

1.3.1 权威 DNS 服务器(Authoritative DNS Server)

权威服务器是域名数据的"源头"。它存储区域文件,对特定域名的查询给出最终答案

场景:example.com 的权威服务器

客户端问:www.example.com 的 IP 是什么?
权威服务器答:93.184.216.34(直接从区域文件读取,这是"权威"答案)

特点

  • 存储域名的区域文件(Zone File)
  • 响应带有 AA(Authoritative Answer)标志
  • 不负责递归查询其他域名
  • 通常由域名注册商或企业自建

1.3.2 递归 DNS 服务器(Recursive/Resolving DNS Server)

递归服务器是客户端的"代理人"。它代替客户端去完成完整的 DNS 解析链路,包括查询根服务器、TLD 服务器、权威服务器等。

场景:企业内网递归服务器

客户端问:www.example.com 的 IP 是什么?
递归服务器:(先查缓存,没有则逐级查询)
  → 问根服务器:.com 的 NS 是谁?
  → 问 .com TLD:example.com 的 NS 是谁?
  → 问 example.com 权威服务器:www 的 A 记录?
  → 最终返回:93.184.216.34

特点

  • 不存储权威数据(除非同时充当权威服务器)
  • 有缓存机制,减少重复查询
  • 需要开启递归功能(recursion yes
  • 通常部署在内网或 ISP 侧

1.3.3 对比总结

维度权威服务器递归服务器
数据来源本地区域文件上游权威服务器
是否缓存通常不缓存核心功能
服务对象全球用户特定客户端
安全重点数据完整性、防篡改防缓存投毒、防滥用
典型部署面向公网面向内网/ISP
配置重点区域文件、传输安全转发、缓存、ACL

1.3.4 同一台服务器同时充当两种角色

BIND 允许在同一实例中同时运行权威服务和递归服务,但强烈建议不要这样做

# ⚠️ 不推荐的配置(安全风险)
options {
    recursion yes;          # 开启递归
    allow-recursion { any; }; # 允许所有人递归
};

zone "example.com" {
    type primary;           # 同时是权威服务器
    file "example.com.zone";
};

为什么混合角色不好?

  • 递归服务器容易遭受缓存投毒攻击(Cache Poisoning)
  • 攻击者可能通过递归查询获取你的权威区域数据
  • 增加攻击面,难以实施细粒度安全策略
  • 维护复杂度高

推荐做法:使用 views(视图)将权威服务和递归服务分离,详见 第 08 章


1.4 适用场景

1.4.1 什么时候需要自建 DNS

场景推荐方案说明
企业内部域名解析BIND 递归 + 内部权威解析 .internal.corp 等内部域名
托管多个域名BIND 权威为多个域名提供权威解析
合规要求(金融/政府)BIND 权威 + DNSSEC数据主权、日志审计
安全防护BIND + RPZ拦截恶意域名、钓鱼网站
开发测试环境BIND 递归自定义解析规则、模拟 DNS 故障
CDN / 负载均衡BIND + GeoIP/Views基于来源 IP 的智能解析
Kubernetes 集群CoreDNS(K8s 内) + BIND(外部)混合方案

1.4.2 什么时候不需要自建 DNS

  • 个人网站:使用域名注册商或云厂商的免费 DNS 即可
  • 小型企业:直接使用 8.8.8.8(Google)或 1.1.1.1(Cloudflare)
  • 纯云环境:使用 AWS Route 53、阿里云 DNS 等云 DNS 服务

1.4.3 典型企业架构

┌─────────────────────────────────────────────────────┐
│                    互联网                              │
└─────────┬───────────────────────┬───────────────────┘
          │                       │
    ┌─────▼─────┐          ┌─────▼─────┐
    │ 权威 DNS  │          │ 权威 DNS  │  ← 主从架构(公网)
    │ (主/Primary)│         │(从/Secondary)│
    └─────┬─────┘          └───────────┘
          │
    ┌─────▼─────┐
    │ 防火墙     │
    └─────┬─────┘
          │
    ┌─────▼─────┐          ┌───────────┐
    │ 递归 DNS  │          │ 内网权威  │  ← 内部域名
    │ (主/Primary)│         │ DNS       │
    └─────┬─────┘          └───────────┘
          │
    ┌─────▼─────┐
    │  客户端    │  ← DHCP 下发递归服务器地址
    └───────────┘

1.5 与其他 DNS 软件对比

特性BINDUnboundPowerDNSCoreDNSdnsmasq
权威服务
递归服务✅(Recursor)
DNSSEC✅(有限)
视图
动态更新
RPZ
配置复杂度
资源占用中-高极低
适用场景企业级、ISP纯递归大规模权威Kubernetes家庭/小型

1.6 BIND 的安装目录标准(FHS)

了解 BIND 的标准文件路径,后续章节会频繁使用:

路径说明
/etc/named.conf/etc/bind/named.conf主配置文件
/var/named//var/cache/bind/区域文件存放目录
/var/named/dynamic/动态更新区域文件
/var/named/data/统计数据
/var/log/named/日志目录(可配置)
/var/run/named//run/named/PID 文件、Unix Socket
/etc/named.root.key根区域 DNSSEC 密钥

注意: 不同 Linux 发行版路径略有不同:

  • RHEL/CentOS: /etc/named.conf + /var/named/
  • Debian/Ubuntu: /etc/bind/named.conf + /var/cache/bind/

1.7 本章小结

概念要点
DNS互联网的域名解析系统,基于 UDP/TCP 53 端口
BIND最广泛使用的 DNS 服务器软件,由 ISC 维护
权威服务器存储域名数据的源头,给出最终答案
递归服务器代替客户端完成完整解析链,有缓存机制
版本选择生产推荐 9.18 LTS,新特性选 9.20

📖 扩展阅读