You need to enable JavaScript to run this app.
导航
基本概念
最近更新时间:2024.09.06 16:16:46首次发布时间:2022.04.25 16:02:09

本文档介绍了域名系统(DNS)的基本概念。

域名系统

域名系统(Domain Name System,DNS)包含域名空间(Domain Name Space)、解析记录(Resource Record)、递归 DNS 服务器和名称服务器(Name Server)。从用户的视角看,域名系统的作用类似电话簿,为用户提供了域名对应的资源信息。

例如,一名用户访问网站时,在浏览器中输入网站的域名。浏览器向 DNS 服务器发送查询请求。接收到查询请求后,DNS 服务器将域名解析成 IP 地址,并把 IP 地址返回给浏览器。然后,浏览器向网站服务器的 IP 地址发送 HTTP 请求。

参见 RFC 1034RFC 1035 了解详细信息。

域名

在 DNS 中,域名用于在域名空间(Domain Name Space)中标识网络资源。一个域名(Domain Name)由根域,顶级域,站点域以及子域组成。比如,在 www.example.com. 中,顶级域是 com,站点域是 example,子域是 www,根域是 .。根域(.)在域名中通常会被省略。

参见 RFC 1034RFC 1035 了解详细信息。

解析记录

解析记录(Resource Record,RR)是域名与资源信息的映射。例如,以下解析记录指定 example.com 域名对应的 IPv4 地址为 1.2.3.4

@.example.com.           600           IN    A        1.2.3.4

参见 RFC 1034RFC 1035 了解详细信息。

TTL(Time-to-Live)

TTL 是解析记录的一个属性,表示您希望解析记录在递归 DNS 服务器的缓存中保存的时长。如果保存的时长超过了 TTL,该记录会被从缓存中丢弃。

TTL 的值越大,解析记录在递归 DNS 服务器的缓存中保存的时长越长。当解析记录发生变更后,生效所需的时间就越长。

记录集

云解析 DNS 使用记录集(Record set,RRSet)管理一条或多条有相同的域名、线路和类型的解析记录。您可以为一个记录集中的多条解析记录设置权重,从而实现基于 DNS 的负载均衡。参见 RFC 7719 中的 RRSet。

记录值

记录值(RDATA)是解析记录中的资源信息。例如,以下解析记录指定 example.com 域名对应的 IPv4 地址为 1.2.3.4。其中,1.2.3.4 就是该解析记录的记录值。

@.example.com.           600           IN    A        1.2.3.4

参见 RFC 1034RFC 1035 了解详细信息。

线路

线路表示用户请求的来源。线路可以是网络运营商、地理位置、IP 范围或网络运营商、地理位置和 IP 范围的组合。

如果您的域名可以解析到不同的服务 IP 地址,并且希望用户请求被路由到满足以下要求的 IP 地址以减少用户访问延时:

  • 用户 IP 地址的网络运营商与服务 IP 地址的网络运营商相同。
  • 用户 IP 地址的地理位置尽可能接近服务 IP 地址的地理位置。

您可以将一条线路分配给包含一个或多个服务 IP 地址的记录集。每条线路代表记录集中服务 IP 地址的网络运营商、地理位置或 IP 范围。

当云解析 DNS 的 DNS 服务器接收到 DNS 查询请求时,它会根据 DNS 查询请求中所包含的截断的客户端 IP 地址信息获取客户端的网络运营商、地理位置、IP 地址范围等信息。如果客户端的网络运营商、地理位置或 IP 地址范围与线路匹配,则 DNS 响应中仅包含相应记录集内的 IP 地址。

说明

云解析 DNS 优先使用解析请求中的 ECS 协议(EDNS 客户端子网协议)信息所包含的客户端 IP 地址段来匹配线路。如果用户使用的 Local DNS 服务器不支持 ECS 协议,云解析 DNS 会使用数据包中的客户端 IP 地址。这些客户端 IP 地址大部分是 Local DNS 服务器的出口 IP 地址。您可以参见 工作原理 了解详细信息。

FQDN

FQDN(Fully Qualified Domain Name)表示域名在 DNS 中的绝对名称。每个域名的 FQDN 在 DNS 系统中都是唯一的。FQDN 包含了域名的所有层级,包括根域,例如 www.example.com.

PQDN

PQDN(Partially Qualified Domain Name)表示域名在 DNS 中的相对名称,例如 example.com

根域

根域(Root Domain)是域名中的第一级,表示为点(.)。在域名表示中通常省略根域,但是在域名的 FQDN 中会包含根域。根域的 DNS 服务器在全球一共有 13 个。根域 DNS 服务器负责顶级域的域名解析。通过域名解析,可以得到顶级域 DNS 服务器的 IP 地址。

顶级域

顶级域(Top-level Domain,TLD) DNS 服务器通过解析站点域的域名得到托管站点域的权威 DNS 服务器的 IP 地址。

递归查询

递归查询(Recursive Query)是 DNS 服务器的一种查询模式。当客户端发起域名解析请求时,如果 DNS 服务器上没有缓存的解析记录,该 DNS 服务器就以客户端的身份,向其他 DNS 服务器发起域名解析请求,并将结果返回给客户端。在递归查询过程中,客户端仅发送一次解析请求。递归 DNS 服务器就是使用递归查询的方式响应客户端的域名解析请求的。

迭代查询

迭代查询(Iterative Query)是 DNS 服务器的一种查询模式。当客户端发起域名解析请求时,DNS 服务器并不直接返回解析结果,而是返回另一台 DNS 服务器地址。然后客户端向这台 DNS 服务器发起解析请求。如果 DNS 服务器返回解析结果,则迭代查询结束。在迭代查询过程中,客户端会请求多个 DNS 服务器。递归 DNS 服务器就是使用迭代查询的方式向其他 DNS 服务器发起解析请求的。

名称服务器

名称服务器(Name Server,NS),是存放解析记录的服务器。根域 DNS 服务器、顶级域 DNS 服务器和权威 DNS 服务器都是名称服务器。

权威 DNS 服务器

权威 DNS 服务器(Authoritative Server)是维护 DNS 解析记录的服务器。权威 DNS 服务器不会直接接收用户的 DNS 查询请求,只会和递归 DNS 服务器交互。收到来自递归 DNS 服务器的 DNS 查询请求时,权威 DNS 服务器会返回权威解析记录。

您可以使用火山引擎云解析(DNS)为您的互联网域名分配权威 DNS 服务器。

递归 DNS 服务器

递归 DNS 服务器(Recursive Server)接收用户的 DNS 查询请求。如果用户的 DNS 查询请求命中了缓存,则递归 DNS 服务器会返回缓存的解析结果。如果用户的 DNS 查询请求没有命中缓存,递归 DNS 服务器会通过迭代查询从权威 DNS 服务器获取解析结果。递归 DNS 服务器会把解析结果返回给用户并缓存解析结果。

Local DNS 服务器和公共 DNS 服务器都属于递归 DNS 服务器。

Local DNS 服务器

Local DNS 是一种递归 DNS 服务器。大部分 Local DNS 服务器都是由网络运营商维护的。

ECS 协议(EDNS 客户端子网协议)

ECS 协议(EDNS 客户端子网协议)是一个 DNS 扩展协议。递归 DNS 服务,例如 Local DNS 服务器,可以通过 ECS 协议向权威 DNS 服务器发送客户端的部分 IP 地址信息。权威 DNS 服务器可以根据客户端的部分 IP 地址信息返回最优的解析结果。

云解析 DNS 支持 ECS 协议。参见 RFC 7871 了解 ECS 协议的详细信息。

DNS DDoS 攻击

在 DDoS(Distributed Denial of Service)攻击中,攻击者通过分布在不同地域的多台主机向目标服务器短时间内发送大量请求,使目标服务器的计算资源耗尽从而停止服务。

DNS 服务是 DDoS 攻击的常见目标。如果 DNS 服务停止,用户就无法通过域名获取目标服务的 IP 地址,那么用户就无法通过域名访问目标服务。DNS DDos 攻击主要包括 DNS 洪水攻击(DNS flood attack)和 DNS 放大攻击(DNS amplification attack)两种类型。

  • DNS 洪水攻击:攻击者在短时间内向 DNS 服务器发送大量的 DNS 查询请求,使 DNS 服务器的计算资源耗尽从而停止服务。NXDOMAIN 攻击就是一种 DNS 洪水攻击。
  • DNS 放大攻击:攻击者在 DNS 查询请求中把客户端的 IP 地址篡改为被攻击的客户端的 IP 地址。DNS 服务器在接收到 DNS 查询请求后,会把 DNS 查询响应返回到被攻击的客户端。攻击者会在短时间内发送大量 DNS 查询请求,并在每次 DNS 查询请求中请求尽可能多的信息,从而耗尽被攻击的客户端的带宽资源。

DNSSEC

DNSSEC(DNS Security Extension)是一个 DNS 扩展协议,通过非对称加密对 DNS 响应进行鉴权,可以验证 DNS 响应是否来自权威 DNS 服务器。开启 DNSSEC 后,DNS 系统可以避免 DNS 缓存投毒(DNS cache poisoning)等攻击。在 DNS 缓存投毒攻击中,攻击者向递归 DNS 服务器发送 DNS 查询请求,同时伪造来自权威 DNS 服务器的响应,从而在递归 DNS 服务器的缓存中植入错误的 IP 地址。

每个 DNS Zone 都有一个公钥/私钥对,即 ZSK(Zone Signing Keys)。每个 Zone 的所有者使用该 Zone 的私钥对 Zone 里的 DNS 数据进行签名。递归 DNS 服务器在查询一个 Zone 时,也会获取该 Zone的公钥,并通过该公钥验证 DNS 数据的数字签名是否有效。如果数字签名有效,那么递归 DNS 服务器会把 DNS 数据返回给用户;如果数字签名无效,递归 DNS 服务器会丢弃 DNS 数据,并返回错误信息。这样,DNSSEC 就为 DNS 数据的来源和完整性提供了保障。

但是,每个 Zone 的公钥本身的有效性还需要得到保障。因此,每个 Zone 的所有者也使用另外一个公钥/私钥对(即 KSK,Key Signing Keys)对该 Zone 的公钥进行签名。每个 Zone 的 ZSK 公钥和 KSK 公钥都是由该 Zone 的 KSK 私钥进行签名的。同时,为了建立信任链(Chain of trust),Zone 的所有者把 KSK 公钥的哈希值以 DS(Delegation Signer)记录的方式发布在父 Zone。而 DS 记录会和其他类型的解析记录一样,会在父 Zone 由其 ZSK 私钥进行签名,父 Zone 的 ZSK 公钥由 其 KSK 私钥进行签名,而父 Zone 的所有者也会把 KSK 公钥的哈希值以 DS(Delegation Signer)记录的形式发布在其父 Zone。这样就形成了一个有效的信任链。

根 Zone 没有父 Zone。根 Zone 的 KSK(Root Key Signing Key)会在 IANA 的监管下生成。在 IANA 的 Key Signing Ceremony 中,根 Zone 的 KSK 私钥被用来对根 Zone 的 ZSK 公钥签名。

参见 RFC 9364 了解 DNSSEC 的详细信息。

子域名托管

子域名托管(Subdomain Delegation)指单独管理子域名的 DNS 解析。如果一个子域名被托管,该子域名可以使用与其主域名不同的 DNS 解析服务商。而且,子域名的 DNS 配置与其主域名的 DNS 配置互不影响。

实例

在云解析 DNS 中,每个主域名对应一个实例。每个实例有一个火山引擎内唯一的 ID,例如 DNS735********4675116。每个实例都有功能版本属性。参见 功能版本规格