目录
11.1 引言
11.2 DNS名称空间
11.2.1 DNS命名语法
11.3 名称服务器和区域
11.4 DNS缓存
11.5 DNS 协议
11.5.1 DNS消息格式
11.5.2 DNS 扩展格式(EDNS0)
11.5.3 UDP 或 TCP
11.5.4 问题(查询)和区域区段格式
11.5.5 回答、授权和额外信息区段格式
11.5.6 资源记录类型
11.5.7 动态更新(DNS UPDATE)
11.5.8 区域传输和DNS通知
11.6 排序列表、循环和分离DNS
11.7 开放DNS服务器和DynDNS
11.8 透明度和扩展性
11.9 从 IPv4 向 IPv6 转换 DNS
11.10 LLMNR 和 mDNS
11.11 LDAP
11.12 与DNS相关的攻击
11.13 总结
11.1 引言
DNS:Domain Name System
host name可作为域名。
DDNS(Dynamic Domain Name System):
作用:
即使主机IP改变时,也可用用固定域名来访问。
实现原理:
IP改变时,主机DDNS客户端将新IP通知服务器,DDNS服务器就创建新IP-域名映射。
使用场景:
远程控制(如远程访问家中智能设备)。
花生壳网站可提供DDNS服务。
11.2 DNS名称空间
名称空间:name space
TLD:Top Level Domain,顶级域名,是域名体系中最高级别的域名,即域名的最右边。
TLD举例:
国家代码顶级域名(ccTLD)如.cn,.us
通用顶级域名(gTLD):如.com,.net,.edu
新通用顶级域名(New gTLDs):如 .app,.blog,.shop
而根DNS服务器存储和管理这全球顶级域名(TLD)的域名服务器信息。
11.2.1 DNS命名语法
完全限定域名(FQDN):
即完整域名,从顶级域名一直到主机名。
唯一地标识互联网主机。
非限定域名:
未指定完整域名结构的域名。结合默认域名后缀可生成完整域名。
DHCP服务器有两个DHCP option用于下发默认域名后缀:
默认域名扩展。(一个域名后缀)
搜索列表。(多个域名后缀,逐一使用,直到DNS解析成功)
举例:
用户输入vangogh,本地DNS添加后缀后转换为完整域名vangogh.cs.berkeley.edu.,然后进行DNS解析器。
FQDN完整域名:如www.net.in.turn.de.,从右向左解析。
标签不区分大小。
如"example.com"、"EXAMPLE.COM"被DNS解析为相同IP。
11.3 名称服务器和区域
DNS服务器中管理单位为区域(zone),一个区域是DNS名称空间的一棵子树。
如一个公司的DNS服务器,管理一颗子树,包括www.example.com、mail.example.com 等。
一个区域至少有两台DNS服务器:
主服务器:负责处理对该区域中域名修改、更新和查询请求。数据是最新的。
辅服务器:备份。
备份方法:DNS区域传输功能。
11.4 DNS缓存
DNS服务器把DNS解析记录连同TTL一起给客户端。
该TTL值是该DNS记录在客户端的存活时间。当解析相同域名,无需再次向DNS服务器请求,降低互联网流量。
TTL过期后,清除该记录缓存。
TTL单位:秒。
Linux中名称服务缓存进程(Name Service Caching Daemon, NSCD)提供客户端缓存功能。
配置文件为/etc/nscd.conf文件,包括:
1. 缓存什么解析记录(DNS和其他服务)
2. TTL等参数。
11.5 DNS 协议
DNS协议包括两个部分:
DNS解析服务:
区域传输:DNS服务器同步域名解析信息到其他服务器。
任播地址Anycast:
发送到任播地址的数据会按照路由协议的距离方法,被路由到最近任播地址接口。
所以一组DNS服务器可使用相同任播地址,客户端就近使用,实现负载均衡和主辅备份。
DNS查询有两种类型:
递归查询:
DNS客户端向本地服务器查询。
本地服务器向根服务器查询。
根服务器向顶级服务器查询。
未完成解析之前客户端一直阻塞等待。
迭代查询:
DNS客户端向本地服务器查询。
本地服务器返回根服务器IP给客户端。
DNS客户端向根服务器查询。
根服务器返回顶级服务器IP给客户端。
反复。。。
大部分的DNS服务器是递归查询。
而根服务器和TLD服务器是迭代查询。
如果使用递归查询时,主机会阻塞,导致互联网性能不佳。
11.5.1 DNS消息格式
RR:资源记录(Resource Record)
是DNS服务器存储的域名信息。
最常用两种记录:
A 记录(Address Record):域名到IPv4地址的映射。
AAAA 记录(IPv6 Address Record):域名到IPv6地址的映射。
区域传输:从服务器从主DNS服务器处获取最新的域名区域数据,确各个服务器数据同步。
DNS报文类型有:
DNS查询/响应:
区域传输请求/响应:
通知报文:主服务器向从服务器发送通知报文,告知从服务器更新域名信息。
更新报文:允许客户端动态向DNS服务器添加、修改或删除记录。
授权服务器:
如果DNS服务器不具备请求域名的解析信息,它会向授权服务器发送查询请求。
DNS报文格式:
事务ID:客户端设置,服务器返回时复制。用来匹配响应和查询。
标志字段:
QR:消息类型,0(査询),1(响应)。
Opcode:查询类型,0 (标准查询),4(通知),5(更新)
AA:响应是否来自授权服务器。
TC:响应是否被截断。
RD:客户端期望递归查询。
RA:DNS服务器是否支持递归查询。
Z:保留位
AD:信息已授权
CD:禁用安全检查
RCODE:表示响应状态,值0(响应正确),3 (响应出错,如名称差错或不存在域名)
每个域名由一系列标签组成。标签类型有两种:
数据标签(data label):
举例www.pearson.com的编码如下:
压缩标签(compression label) :
当多个标签中有相同字符时,可用来减少报文大小。
11.5.2 DNS 扩展格式(EDNS0)
DNS扩展机制:
EDNS0:Extension Mechanisms for DNS version 0
作用:
支持更大DNS消息。
传输额外选项信,如DNS(SEDNS安全)。
11.5.3 UDP 或 TCP
对于TCP和UDP来说,DNS端口号都是53。
DNS通常使用UDP封装。
一个DNS消息最多512字节。
预期响应长度超过512字节,但服务器只返回前512字节,此时会在响应中设置TC(被截断)标志。
该解析器可用TCP再次发出查询,此时就返回超过512字节消息,因为TCP可以MSS分段。
TCP MSS选项的作用:
避免IP分段,降低开销,提高性能。
使用UDP封装DNS时,应用层应处理超时和重传。
11.5.4 问题(查询)和区域区段格式
问题区段:
也就是查询区段。用于DNS查询报文。
其中包含信息:
需要查询的名称。
查询类型:A是查询IPv4地址,AAAA是查询IPv6。
查询类:值是1(互联网类),254(没有类),255(所有类)
11.5.5 回答、授权和额外信息区段格式
RR:资源记录,即DNS映射记录。
这三个区段就是RR的集合。用于DNS响应报文。
授权区段:
当DNS服务器无法直接回答查询请求时,可指示客户端向授权区段中的服务器发送进一步的查询请求。
11.5.6 资源记录类型
即请求一个名称对应的什么资源:
RR类型 解析对象
A IPv4地址
NS 名称服务器
AAAA IPv6地址
IXFR 增量区域传输
AXFR 完全区域传输,TCP
11.5.7 动态更新(DNS UPDATE)
客户端通过UPDATE 报文地向DNS服务器添加、修改或删除资源记录。
11.5.8 区域传输和DNS通知
区域传输:从主服务器复制区域的一组RR到从服务器。保持多服务器区域内容同步
区域传输触发时机:
定时器
DNS NOTIFY消息
DNS NOTIFY消息作用:
主DNS对某区域修改后,向辅DNS发送DNS NOTIFY 消息。
辅DNS就会向主DNS发出Zone Transfer 请求。
区域传输两种方式:
完整传输:内容大,使用TCP分段。
增量传输:只传输更新条目,可能先用UDP,若响应消息太大,则切换到TCP。
11.6 排序列表、循环和分离DNS
若请求名称对应的主机有多个IP(内网IP,外网IP),服务器返回IP时如何排序?
普遍情况: 基于请求报文中源IP或目的IP地址排序。
DNS循环:
当多台服务器对应同一域名服务,可将DNS服务器配置为DNS循环,实现负载均衡。
具体做法:每个DNS客户端请求域名时,DNS服务器交替返回这些 IP 地址。使得客户端每次请求都得到不同服务器IP地址,实现负载均衡。
缺点:当记录被缓存时,该负载均衡效果不好。
分离DNS (split DNS):
一种网络配置方案。
允许企业用户访问内部资源时使用内部DNS服务器进行域名解析,而在访问外部资源时使用公共DNS 服务器。
原理:通过查询报文的源/目的IP,返回特定资源记录集合。
作用:
内外网隔离:不允许用户通过公共DNS访问内部指定资源。减少内部资源受到外部攻击风险。
提高DNS解析效率,优化网络性能。
可在内网DNS上配置,限制对特定域名访问。提高网路安全。
11.7 开放DNS服务器和DynDNS
DDNS:即动态DNS,即使IP地址变动时,也可使用固定域名来访问。
原理:
当IP地址变化时,DDNS客户端发送新IP地址给DDNS服务器。
DDNS服务器再将新IP和域名更新带ISP DNS服务器中。
11.8 透明度和扩展性
扩展:实现新的RR类型。
11.9 从 IPv4 向 IPv6 转换 DNS
DNS64可将A记录转换为AAAA记录。并和IPv4/IPv6 NAT转换器一起工作,以允许只有IPv6的客户端访问IPv4网络的服务。
11.10 LLMNR 和 mDNS
这是两种局域网DNS协议。
LLMNR:
即本地链路组播名称解析(Link-Local Multicast Name Resolution)
非标协议,微软开发,Windows系统常用。
使用组播通信,服务器使用UDP端口5355。
mDNS:
组播DNS,multicast DNS
标准协议, macOS 和 Linux系统常用。
使用组播通信,使用UDP端口5353
作用:
是用于局域网内部DNS。
两者功能相同,如:
局域网设备互相发现。
局域网内部主机名解析。
区别:
LLMNR用于IPv4,不支持IPv6。
mDNS主要用于IPv6 网络中,同时支持IPv4和IPv6网络。
11.11 LDAP
LDAP:Lightweight Directory Access Protocol,轻量级目录访问协议
目前使用LDAPv3
LDAP服务器常用于在企业内部。
用于保留目录信息,如位置、电话号码和组织单位,管理用户账户、服务。
11.12 与DNS相关的攻击
DNSSEC:DNS安全
DNS攻击:
1. DoS攻击,使DNS服务器过载。
2. 改变资源记录内容。
3. 伪装成官方DNS服务器,回复假的资源记录,导致主机连接至错误IP地址(例如,银行的Web站点)
2001年DNS的重大DoS攻击:
伪造大量各种源IP地址,请求AOL. COM的MX记录。导致响应流量定向到任何伪源IP处。
而DNS请求是较小报文,然而响应较大(约20倍),这称为放大攻击。
MX记录:Mail Exchange记录,即请求邮件服务器域名对应IP。
DNS数据内容攻击:DNS服务器缓存内容被错误数据替代,导致客户端定向到伪服务器。
DNS Flood攻击解决方法:
防火墙收到DNS请求,会代替DNS服务器响应DNS请求,并将TC标志(截断)位置1,要求DNS客户端以TCP方式发送DNS请求。
如果客户端是真实源,会继续以TCP方式发送DNS请求。
如果客户端是虚假源,则不会再以TCP方式发送DNS请求。
11.13 总结
下图是无DNS缓存时,DNS查询步骤: