DNS技术答疑解惑

DNS是应用层的协议,是互联网的“入口”,是互联网关键基础资源,承担着重要的作用。DNS默默无闻,“隐藏”在互联网的背后默默提供服务,人们对于DNS知之甚少。

1、什么是DNS

DNS是域名系统(Domain Name System)的简称,本质上是一个域名和IP地址相互映射的一个分布式数据库。

2、为什么要使用DNS?

用户通常利用客户端软件来访问某个网络应用,这些软件称为用户代理,最常见并被人熟知的就是浏览器。用户通过用户代理访问网路应用时,需要输入要访问服务器的IP和端口号,但是用户并不习惯或愿意记忆和直接使用IP来访问一个主机,更喜欢为主机起一个更容易读懂、有一定自然语言含义的名字,这个名字就是域名。大多数情况下,用户都是通过域名来指定要访问的服务器主机。然而,网络协议在通信时必须使用IP地址,如何将用户喜欢使用的域名映射为协议使用的IP地址呢?这就是DNS的任务。

3、DNS的基本概念

3.1、域名空间

DNS为了实现域名的有效管理和高效查询,DNS服务器按层次结构进行组织,并且该层次结构与域名的结构相对应。因特网采用了层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都可以有一个唯一的层次结构的域名(当然也可以不命名)。域名的结构由标号序列组成,各标号之间用.隔开,例如,”。。。三级域名.二级域名.顶级域名”(根域名通常省略)。

判断一个域名是几级域名,就看这个域名有几个”.”(省略根域名)。比如xxx.cn有一个”.”,就是一级域名,a.xxx.com有两个点,就是二级域名。

3.2、域名服务器

一个服务器所负责管辖的范围叫做。每一个区设置相应的权威服务器,用来保存该区中的所有主机的域名到IP地址的映射。DNS服务器的管辖范围是以区为单位。域名服务器根据主要保存的域名信息以及在域名解析过程中的作用等,可以分为根域名服务器、顶级域名服务器、权威域名服务器、中间域名服务器4类。

  • 根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。每个根域名服务器都知道所有顶级域名服务器的域名和IP地址。

因特网上共有13个不同IP地址的根域名服务器,主根服务器在美国,由美国互联网机构Network Solutions运作。其余12个均为辅根服务器,其中9个在美国,2个在欧洲(位于英国和瑞典),1个在亚洲(位于日本)。那么老美岂不是对网络绝对的制霸?其实很多国家都会架设镜像根服务器,也就是克隆 13个根域名服务器中的数据。

  • 顶级域名服务器:负责管理在该顶级域名注册的所有二级域名。顶级域名服务器的名称对应一个域名的最后一个名字,是对一个行业的命名(com、org)或对一个区域的命名(cn)。
  • 权威域名服务器:负责一个区的域名服务器,保存该区中的所有主机的域名到IP地址的映射。
  • 中间域名服务器:有一些既不是根域名服务器,也不是顶级域名服务器,也不是权威域名服务器,那这类服务器就是中间域名服务器。

本地域名服务器:本地其实是一个相对的概念,是更靠近用户的那一方。任何一台主机在网络地址配置时,都会配置一个域名服务器作为默认域名服务器,这个默认域名服务器通常称为本地域名服务器,是主机进行域名查询过程中首先被查询的域名服务器。该服务器如果保存了被查询域名的信息,则直接做出响应,如果没有,则代理查询其他服务器。

3.3、A记录和CNAME记录

A记录:即Address记录,是用来指定域名对应的IP地址记录,是一种指向关系。DNS服务器上会通过A记录解析出IP地址以达到后续访问的目的。

CNAME记录:别名记录,用来指定域名对应的域名(相当于给域名起了一个别名),也是一种指向关系。

CNAME可以将几个主机名指向一个别名,跟指向IP地址其实是一样的,这个别名也要做一个A记录指向一个IP的。但是使用CNAME记录可以很方便地变更IP地址。如果一台服务器有10个网站,他们都做了别名,该台服务器变更IP时,只需要变更别名的A记录就可以了。

3.4、DNS为什么通常使用UDP协议,而不用TCP?

DNS是一种应用层协议。所有应用层协议都使用两种传输层协议之一UDPTCP。UDP是无连接、不可靠、数据包尽力传输服务。TCP是面向连接、可靠、有序、字节流传输服务。DNS通常采用UDP协议,这是为什么呢?

  • UDP速度更快。TCP比较重一些,TCP需要3次握手相对来说要慢。DNS请求通常非常小,非常适合UDP段。用UDP传输时,不需要经过TCP三次握手的过程,从而大大提高了响应速度。
  • UDP不可靠,但可以在应用层添加可靠性。应用程序可以使用UDP,并且可以通过在应用程序层实现超时和重新发送来实现可靠性。

4、域名解析过程

域名解析分为递归解析和迭代解析。

4.1 递归解析

递归解析:是最常见也是默认的一种解析方式。递归查询服务的域名服务器,可以代替查询主机或其他域名服务器,进行进一步的域名查询,并将最终的解析结果发送给查询主机或服务器。在整个递归查询过程中,除一开始服务器向递归查询的域名服务器发起查询请求外,其余各个环节均是以递归查询服务器为中心进行迭代查询,DNS客户端一直处于等待状态,直到递归查询服务器发回最终查询结果。相当于,在整个查询环节中递归查询服务器承担了中介代理的角色。

4.2 迭代解析

迭代解析: 迭代查询的域名服务器不会代替查询主机或其他域名服务器进行下一步查询,是将下一个要查询的域名服务器告知查询主机或其他域名服务器。迭代查询则是指所有查询工作全部由客户端自己进行。

4.3 a.xxx.com域名解析过程

  1. 浏览器访问 a.xxx.com。
  2. 查找浏览器DNS缓存,存在缓存则返回(浏览器会将DNS记录缓存一段时间。浏览器不同缓存时间可能不同)。
  3. 浏览器未查到,查找操作系统DNS缓存,缓存存在则返回。
  4. 操作系统未查到,会查找hosts文件的配置。
  5. hosts未查到,会查找路由器缓存,存在则返回。
  6. 路由器未查到,会查找本地DNS服务器缓存,存在则返回。
  7. 本地DNS服务器未查到,递归搜索a.xxx.com对应的IP地址。
  8. 每层代理获取到IP地址后会缓存一下。

代理获取到解析结果后,可能会缓存,代理时间不一定。所以,如果你做的系统改了域名解析的话,用户感知或许并不会那么的快。

5、DNS攻击

介绍几种比较常见的DNS攻击。

  • DNS放大攻击:DNS放大攻击是一种流行的DDoS(分布式拒绝服务攻击)攻击形式,其中目标系统被来自公共DNS服务器的查询响应淹没。工作原理:攻击者向公共DNS服务器发送DNS名称查询,使用受害者的地址作为源地址,导致公共DNS服务器的响应都被发送到目标系统。 攻击者通常会查询尽可能多的域名信息,以最大限度地发挥放大效果。通过使用僵尸网络,攻击者也可以毫不费力地生成大量虚假DNS查询。此外,由于响应是来自有效服务器的合法数据,因此很难防止DNS放大攻击。

  • DNS缓存中毒:利用了DNS缓存机制,在DNS服务器的缓存中存入大量错误的数据记录主动供用户查询。由于缓存中大量错误的记录是攻击者伪造的,而伪造者可能会根据不同的意图伪造不同的记录。由于DNS服务器之间会进行记录的同步复制,所以在TTL内,缓存中毒的DNS服务器有可能将错误的记录发送给其他的DNS服务器,导致更多的DNS服务器中毒。

  • DNS劫持:也称DNS重定向,意即绕过DNS查询的名称解析。网络犯罪分子通过恶意软件修改系统的TCP/IP配置,指向他们控制的DNS服务器来实施DNS劫持攻击。或者,操纵可信赖的DNS服务器以运行网络钓鱼活动。

  • DNS隧道攻击:通过DNS解析器在攻击者和目标之间创建隐藏连接,可绕过防火墙,用于实施数据泄露等攻击。在大多数情况下,DNS隧道需要借助能够连接外网的受感染系统作为跳板,来访问具有网络访问权限的内部DNS服务器。

    。。。

6、HTTPDNS

HTTPDNS:顾名思义就是通过HTTP协议向DNS服务申请域名解析请求。

6.1 HTTPDNS a.xxx.com域名解析过程

  1. 浏览器访问 a.xxx.com。
  2. 查找浏览器DNS缓存,存在缓存则返回(浏览器会将DNS记录缓存一段时间。浏览器不同缓存时间可能不同)。
  3. 浏览器未查到,查找操作系统DNS缓存,缓存存在则返回。
  4. 操作系统未查到,会查找hosts文件的配置。
  5. hosts未查到,会查找部署的HTTPDNS服务器,存在则返回。
  6. HTTPDNS服务器未查询到(走备选方案),会查找路由器缓存,存在则返回。
  7. 路由器未查到,会查找本地DNS服务器缓存,存在则返回。
  8. 本地DNS服务器未查到,递归搜索a.xxx.com对应的IP地址。
  9. 每层代理获取到IP地址后会缓存一下。

6.2 HTTPDNS优点

  • 跳过本地DNS服务器,防止本地DNS劫持,同时保留了鉴权、HTTPS等更高安全性,避免恶意攻击劫持行为。
  • 服务可用性可以自己保障,可以自己实现DNS缓存、热点域名预解析、懒更新等。
  • 可以根据自身业务需要快速更新IP地址,直接解决了DNS缓存无法及时更新的问题。
  • 用户客户端发起HTTPDNS请求时,可直接获取客户端本地IP传输给HTTPDNS服务器,服务器可结合IP地址库返回给客户端同网段、距离最近的IP地址。同时服务器可以返回多个IP地址,客户端在用户实际网络环境中测速后,选择最优IP地址。
  • 对用户来说无感知,用户无需额外操作。对服务商来说,扩展性强,可根据业务需要实现更优的处理方式。

原文地址: DNS技术答疑解惑-CSDN博客

请登录后发表评论

    没有回复内容