参考资料
DNS 概述
- DNS(Domain Name System)是互联网中用于将域名解析为对应 IP 地址的分布式数据库系统
- DNS 充当了互联网的电话簿,通过将易于记忆的域名转换为计算机可识别的 IP 地址
用于绑定动态分配 IP 地址的动态 DNS(DDNS)
- 动态域名(Dynamic DNS,DDNS)允许将动态分配的 IP 地址与一个固定的域名关联起来,解决了动态 IP 地址的变化对于使用域名访问网络服务的问题
- 动态域名允许用户定期向动态 DNS 服务器报告其当前的 IP 地址,然后动态 DNS 服务器会相应地更新域名的 DNS 记录,将域名解析到最新的 IP 地址上
DDNS 基本工作流程
- 用户在动态 DNS 服务提供商注册一个域名,并将其与初始 IP 地址关联
- 用户的路由器或计算机上运行一个动态 DNS 客户端软件。该客户端监测定期更改的 IP 地址
- 当 IP 地址更改时,动态 DNS 客户端会向动态 DNS 服务器发送一个更新请求,报告新的 IP 地址
- 动态 DNS 服务器接收到更新请求后,会相应地更新域名的 DNS 记录,将域名解析到新的 IP 地址
- 其他网络用户在访问该域名时,会向 DNS 服务器发送查询请求,DNS 服务器会返回最新的 IP 地址给用户
DNS 服务器
- DNS 服务器(Domain Name System Server,也称为 DNS 名称服务器 (nameserver))是运行DNS 软件并提供 DNS 服务的计算机或服务器。它负责接收和处理 DNS 查询请求,并返回与域名相关联的IP地址或其他DNS记录
多种类型的 DNS 服务器
根(Root)域名服务器:DNS 层次结构的最高级别
- 存储着根域的DNS信息,并负责将查询转发到顶级域域名服务器

- DNS 原始架构的限制要求根区域中最多只能有 13 个服务器地址
- 只有 13 个 IP 地址用于查询不同的根服务器网络,但每一个都对应多个服务器,这些服务器使用 Anycast 路由基于负荷和距离分发请求
- 递归解析器无法在 DNS 查找中被引导到根域名服务器,因此每个解析器都在其软件中内置了 13 个 IP 根服务器地址的列表
- 根域名服务器目前由互联网域名系统管理机构(Internet Assigned Numbers Authority,简称IANA)和 Internet Corporation for Assigned Names and Numbers(ICANN)共同管理。
顶级域(Top-level Domain,TLD)域名服务器:每个顶级域都有自己的顶级域名服务器。它们管理该顶级域名下的次级域名服务器,并负责处理与该顶级域名相关的DNS查询请求
顶级域是域名系统中最高级别的域名分类,主要有两大类
通用顶级域(Generic Top-Level Domain,gTLD)
- 广泛用于不特定于任何国家或地区的域名
常见的通用顶级域
- .com:商业用途(商业组织)
- .org:非营利组织
- .net:网络基础设施服务提供者
- .edu:教育机构
- .gov:政府部门
- .mil:军事部门
- .int:国际组织
国家/地区顶级域(Country Code Top-Level Domain,ccTLD)
- 用于表示国家或地区的域名,如
.cn、.us、.jp等
新通用顶级域(New Generic Top-Level Domain,ngTLD)
- 通常与特定行业、兴趣或品牌相关,如
.app、.shop、.music、.blog等
基础设施顶级域(Infrastructure Top-Level Domain)
- 用于互联网基础设施和协议
- 有且只有一个域:
.arpa,其用于互联网基础设施的逆向 DNS
- 每个顶级域都有一组域名服务器,这些服务器存储与该顶级域相关的域名记录。当进行针对特定顶级域的DNS查询时,请求会被发送到该顶级域的域名服务器
权威域名服务器(Authoritative Nameservers):也称为授权域名服务器。实际管理特定域名区域的相关 DNS 记录,并提供与该域名相关的解析服务
- 权威域名服务器负责管理特定的域名区域,可以是一个顶级域名(例如.com、.net)或一个具体的域名(例如example.com)
- 权威域名服务器存储着该区域内的权威DNS记录,包括域名与IP地址的映射关系(A记录)、邮件服务器记录(MX记录)、别名记录(CNAME记录)等。
- 在完整的 DNS 解析过程中,权威域名服务器提供最终的域名解析结果,供发起查询的客户端使用
递归解析器(Recursive Resolver):用户计算机或本地网络中设置的 DNS 服务器。它们接收来自客户端的 DNS 递归查询请求,并负责迭代查询其他 DNS 服务器以获取解析结果
参考资料
- 递归解析器负责与发出请求的客户端打交道,作为客户端与其他 DNS 服务器的中间人

常见的递归解析器类型
- 由 DHCP 自动分配的 DNS 域名服务器(常见于家庭网络)
- 计算机管理员手动设置的 DNS 域名服务器(常见于企业内部网络)
- ISP 提供的运营商 DNS 域名服务器(如移动、电信的 DNS 服务器)
- 公共 DNS 域名服务器(如
114.114.114.114、8.8.8.8等 IP 地址所对应的服务器)
存根解析器(Stub Resolver)是与全服务解析器(Full-service resolver)相对应的概念,其允许将域名解析功能的负载传递给其他主机上的域名服务器(一般是负责迭代查询的递归解析器)
- 从递归解析服务器的角度上看,存根解析器是客户端的一部分
- 存根解析器至少要能实现转发解析请求至其他冗余的递归域名服务器。可以在存根解析器上实现缓存功能,但同时应实现缓存过期机制
DNS 域名解析
- 域名解析(Domain Name Resolution)分为静态域名解析和动态域名解析。在解析域名时,首先采用静态域名解析,如果静态域名解析不成功,再采用动态域名解析
静态域名解析(Static Domain Name Resolution)通过静态域名解析表进行,用户在域名注册商或 DNS 服务器上进行配置,手动建立域名和IP地址之间的对应关系表
- 注意与利用hosts文件绕过域名解析的映射方式进行区分
动态域名解析(Dynamic Domain Name Resolution)通过递归查询、迭代查询和域名缓存机制来动态建立域名和IP地址之间的对应关系表
- 动态域名解析通过缓存机制减少对域名服务器的查询,提高解析效率
- 动态 DNS 可以根据IP地址的变化自动更新域名解析结果,适用于拥有动态分配IP地址的网络环境
动态域名解析的工作原理及过程
- 用户通过存根解析器来读取 DNS 缓存或发送递归查询请求至 DNS 服务器(递归解析器)从而获取域名对应的 IP 地址

无缓存下的动态 DNS 工作过程

- 用户使用域名访问某些应用服务时,发送递归查询请求到递归解析器
- 递归解析器查询其存储的 DNS 缓存
- 如果有对应的映射项,则返回 IP 地址给用户程序
- 递归解析器判断是否授权管理该域名(查询 DNS 区域文件的 DNS 记录)
- 如果存在与之匹配的 DNS 记录,则返回IP地址
- 常见于企业内部网络的情况
- 根据是否设置转发地址,递归解析器将未能匹配的查询请求转发给上一级 DNS 服务器或者根域名服务器,重复步骤 5 直到实际持有并负责对应域名解析的权威域名服务器返回最终结果后再返回给本地域名服务器
- 设置了转发地址则将请求转发给上一级 DNS 服务器
- DNS 服务器向根域名服务器(.)发送查询请求,获取顶级域名服务器(例如 .com)的地址
- 随后,DNS 服务器向顶级域名服务器发送查询请求,获取次级域名服务器(例如 example.com)的地址
- 重复以上步骤,直到 DNS 服务器向实际持有并负责对应 DNS 记录的权威 DNS 服务器发送查询请求,获取域名对应的 IP 地址信息
未设置转发地址则递归解析器向其他 DNS 服务器发送迭代查询以获取所需的解析结果
- 递归解析器将域名的解析结果返回给用户,并将结果存入 DNS 缓存区
- 下次查询相同域名时,直接从缓存区读取映射,避免向其他 DNS 服务器发起请求
- DNS 缓存区中的映射会在一定时间后被删除,以保证获取最新的内容
- 应用程序向域名解析后得到的 IP 地址发出 HTTP 请求
- IP 地址上的 Web 服务器返回 HTTP 响应给应用程序
区分递归查询(Recursive Query)和迭代查询(Iterative Query)
递归查询的特点是客户端只需发送一次查询请求,并等待最终的解析结果;迭代查询的特点是客户端需要承担查询和迭代的责任,直到解析完成
递归查询中,DNS 客户端向 DNS 服务器发送查询请求,并期望 DNS 服务器负责完全解析该请求
- 如果 DNS 服务器不知道所请求的域名的IP地址,DNS 服务器(而非 DNS 客户端)将继续向其他 DNS 服务器发送查询请求,直到找到该域名的IP地址并将结果返回给客户端或超时无法找到对应记录并返回错误消息。
迭代查询中,DNS 客户端向 DNS 服务器发送查询请求,DNS 服务器只返回其能够给出的最佳应答
- 如果 DNS 服务器无法提供完整的解析结果,DNS 服务器将返回对较低级别域名空间具有权威性的 DNS 服务器的引用,以便 DNS 客户端可以继续查询
- 在这种方式下,DNS 客户端需要根据 DNS 服务器提供的信息自行发起新的查询请求,直至返回结果、发生错误或超时为止
- DNS 解析器通常发送递归查询请求,而 DNS 服务器在查询其他 DNS 服务器时可能会使用迭代查询方式
DNS 缓存是已经解析过的域名和其对应的IP地址或其他相关信息的临时存储
DNS 缓存可以存在于多个层级和位置
本地缓存可以分为应用程序 DNS 缓存和操作系统 DNS 缓存
- 应用程序 DNS 缓存是针对所请求的 DNS 记录而检查的第一个位置
- Chrome 浏览器中查看 DNS 缓存:chrome://net-internals/#dns
- 操作系统 DNS 缓存一般存储于存根解析器(stub resolver),在 Linux 中可以是 systemd-resolved, unbound 或 dnscache 等系统服务或应用软件
- DNS 服务器在处理查询请求时,也会将解析结果缓存起来
- DNS 记录将在 DNS 缓存中存活由生存时间(TTL)决定的一段时间。一旦缓存过期,下一次对该域名的查询将触发新的 DNS 解析
- DNS 缓存将数据存储在更靠近请求客户端的位置,以便能够更早地解析 DNS 查询,并且能够避免在 DNS 查找链中进一步向下的额外查询,从而缩短加载时间并减少带宽/CPU 消耗
DNS 记录与 DNS 区域
DNS 区域(DNS Zone)是一个管理空间,其可实现对权威性域名服务器等 DNS 组件的更精细控制
- DNS 区域是 DNS 命名空间的一部分,由特定组织或管理员加以管理
DNS 命名空间是一个分层树,DNS 根域位于顶部。DNS 区域始于该树中的一个域,并且还可向下扩展到子域中,以便能够由一个实体管理多个子域
- DNS 区域可包含多个子域,并且多个区域可存在于同一服务器上。DNS 区域不一定彼此物理分离,必须严格使用区域来委派控制
- 区域的控制权委派是通过DNS服务器的配置来实现的。顶级域名的注册机构或管理员会指定相应的域名服务器(Name Server),并在域名的注册信息中进行相应的设置

- DNS 区域的所有信息都以各种 DNS 记录的形式存储在 DNS 服务器上的 DNS 区域文件中
- DNS 区域文件必须始终从 SOA 记录开始,该记录包含重要信息,包括区域管理员的联系信息。
DNS 记录(DNS record)是位于 DNS 区域文件中的条目,提供有关域或子域的特定信息,包括哪些 IP 地址与该域关联,以及如何处理对该域的请求
- DNS 记录由一系列以 DNS 语法编写的文本组成
- DNS 记录都有一个 TTL 值,其代表生存时间,指示 DNS 服务器多久刷新一次该记录
DNS 语法
DNS 语法根据使用的软件有所不同,常用的有 BIND, Dnsmasq, PowerDNS 等
常见 DNS 记录的格式为 host record_type value [pre] TTL
host为主机名或子域名,其中@代表根域名- 对于 example.com 而言,
@代表 example.com,ftp代表 ftp.example.com
record_type为记录类型名称
value为记录值
pre为可选的记录优先级,对于部分类型值可用
TTL为记录在缓存中的生存时间,默认单位为秒,过期后缓存失效需要刷新
以 BIND 9 为例,其官方文档的区域文件样例
常见 DNS 记录类型
- A 记录 - 存储给定域的 IPv4 地址的记录
- AAAA 记录 - 存储给定域的 IPv6 地址的记录
CNAME 记录 - 将给定域或子域转发到另一个域,不提供 IP 地址
- 规范名称(Canonical Name,CNAME)记录用于将一个域名映射到另一个域名
- 如
www.example.com IN CNAME example.com 32600表示将 www.example.com 重定向至 example.com,随后再查询 example.com 的 A 记录或者 AAAA 记录可得到 IP 地址 - CNAME 记录可以指向与给定域不同的其他根域及其子域,如
www.example.com IN CNAME www.anotherdomain.com 32600
- CNAME 记录必须指向一个域名而非 IP 地址
- CNAME 记录可以指向另一个 CNAME 记录,但会增加 DNS 查询次数从而增加延迟,应该避免
MX 记录 - 将邮件定向到电子邮件服务器
可配置优先级
- 优先度值越低,优先级越高
- 失败后会尝试优先级较低的记录
- 也可以配置指向不同地址的平级记录以平衡负载
- MX 记录必须直接指向服务器的 A 记录或 AAAA 记录,不能指向 CNAME 记录
TXT 记录 - 可让管理员在记录中存储文本注释
- 两个最重要用途是防止垃圾邮件和域名所有权验证
结合使用 DNS TXT 记录防止垃圾邮件
- 垃圾邮件发送者经常试图伪造或假冒他们发送电子邮件的域。TXT 记录是几种不同的电子邮件验证方法的关键组成部分,它可帮助电子邮件服务器确定邮件是否来自可信的来源
常见的电子邮件身份验证方法
- 包括发送方策略框架 (SPF)、域密钥识别邮件 (DKIM) 以及基于域的邮件身份验证、报告和一致性 (DMARC)
- SPF 记录可以防止他人利用您的网域发送垃圾内容。
- DKIM 签名会使用加密功能来确保您电子邮件内容的安全。
- DMARC 身份验证可帮助您管理通过 SPF 和 DKIM 检查的邮件。
NS 记录 - 指向管理给定域的域名服务器
- NS 记录告诉互联网可从哪里找到该域的 IP 地址
- NS 记录必须直接指向服务器的 A 记录或 AAAA 记录,不能指向 CNAME 记录
- 可以有多个 NS 记录,指示该域的主要和辅助域名服务器
- 当域管理员需要更改域的域名服务器时,他们应更新其 NS 记录;如果域管理员希望子域使用不同的域名服务器,他们也可能会想要更新其 NS 记录
SOA 记录 - 存储给定域或区域的管理信息
SOA 样例
SOA 样例字段解析
$ORIGIN example.com.设置 DNS 区域文件中相对域名的基本起点
- 主服务器:维护该区域 DNS 记录副本的辅助服务器会从该主要服务器接收对该区域的更新
- 区域序列号:SOA 记录的版本号。当区域文件中的序列号发生更改时,这会提醒辅助名称服务器,它们应当通过区域传输更新其区域文件的副本
域名 | @ |
class | IN |
DNS 记录类型 | SOA |
主服务器 | ns1.example.com. |
管理员邮箱 | hostmaster.example.com. |
区域序列号 | 用于标识区域的版本。每当进行更改时,序列号都应递增 |
刷新时间 | 指定其他DNS服务器应重新查询该区域的时间间隔 |
重试时间 | 指定其他DNS服务器在刷新失败后应重新尝试的时间间隔 |
过期时间 | 指定其他DNS服务器在无法刷新区域后应停止响应对该区域的查询的时间间隔 |
最小/默认TTL | 指定在缓存中存储的该区域中的记录的默认存活时间 |
主要 DNS 服务器和辅助 DNS 服务器
- 主要 DNS 服务器是托管网站主要区域文件的服务器,其中包含域的所有权威信息,包括其 IP 地址、域管理员的身份和各种资源记录
- 主服务器负责对一个区域的 DNS 记录进行任何必要的更改。在主服务器完成更新后,它可以将更改请求传递给辅助服务器
- 辅助 DNS 服务器包含只读的区域文件副本,这意味着它们不能被修改
- 它们不是从本地文件中获取信息,而是在称为“区域传输”的通信过程中从主服务器接收相关信息
- 如果多个辅助服务器正在使用中,则可以将其中一个指定为更高级别的辅助服务器,以便它能够将区域文件副本复制到剩余的辅助服务器池中
SRV 记录 - 指定用于特定服务的端口
- 某些互联网协议,如 IMAP、SIP 和 XMPP,除了与特定的服务器连接外,还需要连接到一个特定的端口。SRV 记录是在 DNS 中指定端口的方式
SRV 记录字段例
应用服务协议 | XMPP |
传输协议 | TCP |
host | example.com |
TTL | 86400 |
class | IN |
DNS 记录类型 | SRV |
优先级 | 10 |
权重 | 5 |
端口 | 5223 |
DNS 记录值 | server.example.com |
可配置优先级
- 优先度值越低,优先级越高
- 失败后会尝试优先级较低的记录
- 也可以配置指向不同地址的平级记录以平衡负载
可配置权重
- 同一优先级下,权重较高的服务器将接收更多的流量
- SRV 记录必须直接指向服务器的 A 记录或 AAAA 记录,不能指向 CNAME 记录
PTR 记录 - 在反向 DNS 查询中提供域名
- 指针记录(Pointer Record,PTR)提供与域名相关的 IP 地址
与存储在域名下的 A 记录等不同,PTR 记录存储在以顶级域 .arpa 结尾且进行反转的 IP 地址中
- 如 IPv4 地址 192.0.2.255 的 PTR 记录将存储在 255.2.0.192.in-addr.arpa 下,IPv6 地址 4321:0:1:2:3:4:567:89ab 的 PTR 记录将存储在 b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.0.0.0.1.2.3.4.ip6.arpa 下
- 子域 in-addr.arpa 用于在 ipv4 中进行反向 DNS 查询;子域 ip6.arpa 用于在 ipv4 中进行反向 DNS 查询
反向 DNS 的常见用途
- 反垃圾邮件:一些电子邮件反垃圾邮件过滤器使用反向 DNS 来检查电子邮件地址的域名,并查看关联的 IP 地址是否可能被合法的电子邮件服务器使用
- 解决电子邮件投递问题:由于反垃圾邮件过滤器会执行这些检查,因此错误配置或缺失 PTR 记录可能会导致电子邮件投递问题。如果域没有 PTR 记录,或者 PTR 记录包含错误的域,电子邮件服务可能会阻止来自该域的所有电子邮件
- 日志记录:系统日志通常只记录 IP 地址;反向 DNS 查找可以将这些转换为更容易读懂的日志域名
其他 DNS 记录类型
- AFSDB 记录 - 此记录用于由 Carnegie Melon 开发的Andrew File System(AFS)的客户端。AFSDB 记录的功能是查找其他 AFS 单元。
- APL 记录 -“地址前缀列表”是用于指定地址范围列表的实验记录。
CAA 记录 - 声明哪些证书颁发机构可为该域颁发证书
- 证书颁发机构授权 (DNS Certification Authority Authorization),其可使域所有者声明哪些证书颁发机构可为该域颁发证书
- 如果不存在 CAA 记录,则任何人都可为该域颁发证书
- 子域还会继承这些记录
- DNSKEY 记录 -“DNS 密钥记录”包含一个公钥,用于验证域名系统安全扩展 (DNSSEC)签名。
- CDNSKEY 记录 - 这是 DNSKEY 记录的子副本,应将其转移给父级。
- CERT 记录 -“证书记录”存储公钥证书。
- DCHID 记录 -“DHCP 标识符”存储有关动态主机配置协议(DHCP)的信息,该协议是 IP 网络上使用的标准化网络协议。
- DNAME 记录 -“委托名称”记录创建域别名,就像 CNAME一样,但是此别名也会重定向所有子域
- 例如,如果“example.com”的所有者购买了域名“website.net”并为其提供了指向“example.com”的 DNAME 记录,则该指针还将扩展到“blog.website.net”以及任何其他子域。
- HIP 记录 - 此记录使用“主机身份协议”,这是一种分隔 IP 地址角色的方式;此记录最常用于移动计算。
- IPSECKEY 记录 -“IPSEC 密钥”记录与互联网协议安全 (IPSEC) 搭配使用,这是一个端到端安全协议框架,属于互联网协议套件 (TCP/IP)。
- LOC 记录 -“位置”记录包含域的地理信息,采用经度和纬度坐标形式。
- NAPTR 记录 - 可将“名称权威指针”记录与 SRV 记录相结合,以便基于正则表达式动态创建指向的 URI。
- NSEC 记录 -“下一安全记录”是 DNSSEC 的一部分,用于证明所请求的 DNS 资源记录不存在。
- RRSIG 记录 -“资源记录签名”记录可存储用于根据 DNSSEC 对记录进行身份验证的数字签名。
- RP 记录 - 这是“负责人”记录,其存储域负责人的电子邮件地址。
- SSHFP 记录 - 该记录存储“SSH 公钥指纹”;SSH 代表安全外壳,这是一种可在不安全网络上实现安全通信的加密网络协议。
利用hosts文件绕过域名解析
- hosts文件是用于在计算机上进行IP地址和主机名(或域名)映射的本地文本文件
- hosts文件用于在没有DNS服务器或在绕过DNS解析的情况下进行主机名到IP地址的映射
- hosts文件中的映射优先于DNS解析,并且仅适用于本地计算机,不会影响网络中的其他计算机
hosts文件位置
- Windows:
%SystemRoot%\system32\drivers\etc\hosts
- Linux和macOS:
/etc/hosts
hosts文件格式
- 每一行包含一个IP地址,紧随其后的是一个或多个空格或制表符,然后是一个或多个主机名或域名
DNS 泄露
- DNS 泄露是指在使用 VPN 等隧道工具时,DNS 请求未通过加密通道发送,而是直接通过 ISP 的 DNS 服务器解析,导致用户的浏览活动可能被 ISP 或其他第三方监控
- Author:白鸟3
- URL:https://blog.kun2peng.top/internet/dns_intro
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
