• 《TCP/IP详解 卷一》第11章 DNS


    目录

    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查询步骤:

  • 相关阅读:
    python练习2
    设计模式--工厂设计模式
    kubeadm部署k8s教程(5)---容器挂载本地磁盘
    【开源】SpringBoot框架开发服装店库存管理系统
    近期 yyds 的 GitHub 项目
    第一章 计算机网络基础
    从装饰模式和职责链模式看链式结构模式
    MWM触摸屏工控机维修TEM-EV0 EN00-Z312yy-xx
    四分之一车体模型车辆载重预测
    阿里P8架构师仅用五步教你如何搭建SpringSecurity安全框架
  • 原文地址:https://blog.csdn.net/qingwangheni/article/details/136381482