2.6 计算机网络与协议-域名系统

2 阅读9分钟

域名系统

2.6.1 简介

DNS是一个简单的请求-响应协议,是将域名与IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。DNS使用TCP和UDP协议的53端口。

2.6.2 请求响应

2.6.2.1 DNS记录

  • A
    • 返回域名对应的IPv4地址
  • AAAA
  • NS
    • 域名服务器
    • 返回该域名由哪台域名服务器解析
  • PTR
    • 反向记录
    • 从IP地址到域名记录
  • MX
    • 电子邮件交换记录
    • 记录邮件域名对应的IP地址

2.6.2.2 响应码

  • NOERROR
No error condition
  • FORMERR
Format error - The name server was unable to interpret the query
  • SERVFAIL
Server failure - The name server was unable to process this query due to a problem with the name server
  • NXDOMAIN
this code signifies that the domain name referenced in the query does not exist
  • NOTIMP
Not Implemented - The name server does not support the requested kind of query
  • REFUSED
Refused - The name server refuses to perform the specified operation for policy reasons
  • NODATA
A pseudo RCODE which indicates that the name is valid, for the given class, but [there] are no records of the given type A NODATA response has to be inferred form the answer.

2.6.3 域名系统工作原理

2.6.3.1 解析过程

DNS解析过程是递归查询的,具体过程如下:

  1. 用户要访问域名 www.example.com 时,先查看本机hosts是否有记录或者本机是否有DNS缓存,如果有,直接返回结果,否则向递归服务器查询该域名的IP地址。
  2. 当递归缓存为时,首先向根服务器查询com顶级域IP地址
  3. 根服务器告知递归服务器com顶级域名服务器的IP地址。
  4. 递归向com顶级域名服务器查询负责example.com的权威服务器的IP。
  5. com顶级域名服务器返回相应的IP地址。
  6. 递归向example.com的权威服务器查询www.example.com的地址记录。
  7. 权威服务器告知www.example.com的地址记录。
  8. 递归服务器将查询结果返回客户端。

2.6.3.2 域传送

DNS服务器可以分为主服务器备份服务器缓存服务器域传送是指备份服务器主服务器拷贝数据,并使用得到的数据更新自身数据库。域传送是在主备服务器之间同步数据库的机制

2.6.4 服务器类型

2.6.4.1 根服务器

根服务器是DNS的核心,负责互联网顶级域名的解析,用于维护域的权威信息,并将DNS查询引导到相应的域名服务器。

根服务器在域名树中代表最顶级的 . 域,一般省略。

13台IPv4根服务器的域名标号为am,即a.root-servers.orgm.root-servers.org,所有服务器存储的数据相同,仅包含ICANN批准TLD域名权威信息

2.6.4.2 权威服务器

权威服务器上存储域名Zone文件,维护域内域名的权威信息,递归服务器可以从权威服务器中获得DNS查询资源记录

权威服务器需要在所承载的域名所属的TLD管理局注册,同一个权威服务器可以承载不同的TLD域名同一个域也可以有多个权威服务器

2.6.4.3 递归服务器

递归服务器负责接收用户的查询请求,进行递归查询并响应用户查询请求。在初始时递归服务器仅有记录了根域名Hint文件。

2.6.5 加密方案

作为主流的防御方案,DNS加密有5种方案,分别是 DNS-over-TLS(DoT)DNS-over-DTLSDNS-over-HTTPS(DoH)DNS-over-QUIC以及DNSCrypt

2.6.5.1 DoT

DoT方案在2016年发表于RFC7858,使用853端口。主要思想是Client和Server通过TCP协议建立TLS会话后在进行DNS传输,Client通过SSL证书验证服务器身份

2.6.5.2 DNS-over-DTLS

DNS-over-DTLSDoT类似,区别在于使用UDP协议而不是TCP协议。

2.6.5.3 DoH

DoH方案在发表RFC8484,使用 https://dns.example.com/dns-query{?dns} 来查询服务器的IP,复用HTTPS443端口,流量特征比较小。DoH会对DNS服务器进行加密认证不提供fallback选项。目前CloudflareGoole等服务商对DoH提供了支持。

2.6.5.4 DNS-over-QUIC

DNS-over-QUIC安全特性和DoT类似,但是性能更高,目前没有合适的软件实现。

2.6.5.5 DNSCrypt

DNSCrypt使用X25519-XSalsa20Poly1305而非标准的TLS,且DNSCrypt的Client需要额外的软件,Server需要专门的证书

2.6.6 DNS利用

2.6.6.1 DGA

DGA(Domain Generate Algorithm, 域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段,常见于botnet中。一般来说,一个DGA域名的存活时间约在1~7天左右。

通信时,客户端和服务端都运行一套DGA算法,生成相同的备选域名列表,当需要发动攻击的时候,选择其中少量进行注册,便可以建立通信,并且可以对注册的域名应用速变IP技术,快速变换IP,从而域名和IP都可以进行快速变化。

DGA域名有多种生成方式,根据种子类型可以分为确定性不确定性的生成。不确定性的种子可能会选用当天的一些即时数据,如汇率信息等。

2.6.6.2 DNS隧道

DNS隧道工具将进入隧道的其他协议流量封装到DNS协议内,在隧道上传输。这些数据包出隧道时进行解封装,还原数据。

2.6.7 RDAP

RDAP(Registration Data Access Protocol)协议是Whois协议的后续,和Whois协议类似,RDAP协议提供了域名自治系统IP地址的信息查询。

2.6.8 相关漏洞

2.6.8.1 DNS劫持

DNS劫持有多种方式,比较早期的攻击方式是通过攻击域名解析服务器,或是伪造DNS响应的方式,来将域名解析到恶意的IP地址。

随着互联网应用的不断发展,出现了基于废弃记录的劫持方式。这种方式发生的场景是次级域名的解析记录指向第三方资源,而第三方资源被释放后,解析记录并没有取消,在这种场景下,可以对应申请第三方资源,以获取控制解析记录的能力。

2.6.8.2 拒绝服务

DNS服务通常会开启UDP端口,当DNS服务器拥有大量二级域NS记录时,通过DNS的UDP反射攻击可以实现高倍的拒绝服务

2.6.9 相关机构

2.6.9.1 ICANN

互联网名称与数字地址分配机构(Internet Corporation for Assigned Names and Numbers, ICANN)创建于1998年9月18日,职能包括管理域名IP地址的分配等与互联网相关的任务。

2.6.9.2 IANA

互联网号码分配局(Internet Assigned Numbers Authority, IANA)是一家互联网地址指派机构,管理国际互联网中使用的IP地址域名和许多其他参数的机构。

2.6.10 术语

2.6.10.1 mDNS

Multicast DNS(mDNS),多播DNS,使用5353端口,组播地址为 224.0.0.251[FF02::FB]。在一个没有常规DNS服务器的小型网络内可以使用mDNS来实现类似DNS的编程接口、包格式和操作语义。mDNS协议的报文与DNS的报文结构相同但有些字段对于mDNS来说有新的含义

启动mDNS的主机会在进入局域网后向所有主机组播消息,包含主机名IP等信息,其他拥有相应服务的主机也会响应含有主机名和IP的信息。

mDNS的域名是用.local普通域名区分开的。

2.6.10.2 FQDN

FQDN(Fully-Qualified Domain Name)是域名的完全形态,主要是包含零长度根标签,例如www.example.com.

2.6.10.3 TLD

Top-Level Domain(TLD)是属于根域的一个域,例如comjp

TLD一般可以分为 Country Code Top-Level Domains(ccTLDs)Genetic Top-Level Domain(gTLDs)以及其他

2.6.10.4 IDNA

Internationalized Domain Names for Applications(IDNA)是为了处理非ASCII字符的情况。

2.6.10.5 CNAME

CNAME即Canonical name,又称alias将域名指向另一个域名

2.6.10.6 TTL

Time To Live,无符号整数,记录DNS记录过期的时间,最小是0,最大是2147483647(2^31 - 1)

2.6.11 参考链接

2.6.11.1 RFC

2.6.11.1.1 Whois 相关
2.6.11.1.2 RDAP 相关

2.6.11.2 相关标准

2.6.11.3 工具

2.6.11.4 研究文章

2.6.11.5 相关CVE