DNS基础

DNS的历史

在20世纪70年代,ARPAnet是一个只有几百台主机的小型、友好的社区,所有只要HOSTS.TXT这一个文件,就可以包含连接到ARPAnet的每台主机的名称到地址的解析。人们所熟知的UNIX主机表(/etc/hosts)就是由HOSTS.TXT演变而来的。HOSTS.TXT的文件有SRI的NIC负责维护,并且由一台单独的主机SRI-NIC来负责分发。ARPAnet的管理员通常将改动通过电子邮件传送给NIC,并定期通过FTP的方式连接到SRI-NIC,以获取最新的HOSTS.TXT文件。当随着ARPAnet的成长,这种方案就不行了,HOSTS.TXT文件的大小随着ARPAnet上主机数量的增长而不断变大。这样造成更新过程中网络上流也增加得越来越快:每增加一台主机不仅仅以为这在HOSTS.TXT文件中增加一行,还以为这其他主机需要通过SRI-NIC获取更新。
当ARPAnet采用了TCP/IP协议后,网络用户出现了激增。这让HOSTS.TXT的主机面临以下问题:
1.流量和负载
2.名称冲突
3.一致性

DNS简述

DNS是一个分布式数据库,这种结构允许对整体数据库的各个部分进行本地控制,并且在各个部分中的数据通过CS模式变得对整个网络都可用个,通过复制和缓存等机制,DNS拥有了健壮性和充足的性能。
被称为名称服务器(nameserver)的程序构成了DNS客户端/服务器机制的服务器一端,名称服务器包含了数据库中某些部分的信息,并使得这些信息对被称为解析器(resolver)的客户端可见。解析器通常只是一组库历程(library routine),这些库历程产生查询请求并将请求通过网络发送给名称服务器。
DNS数据库的结构类似于UNIX文件系统的结构。整个数据库(或者文件系统)被描述成一棵倒置的树,root节点在数的顶端。树中的每个节点都有一个文本标签,用来标识该节点同父节点的相对关系。这大致上类似于文本系统中的相对路径(relative pathname)。整棵树上的各个节点也是其所对应的新字子树的根。每棵树都代表了整个数据库的一部分:对于UNIX文件系统而言代表着一个目录(directory),而对于域名系统而言则代表域(domain)。每个域或目录又可以被进一步划分为额外的部分,在DNS中这被称称作子域(subdomain),而在文件系统中这被称作子目录(subdirectory)。像子目录一样,子域在图中被描述成它们父域的孩子。和每个目录一样,每个域都有一个唯一的名称。一个域的域名标识了它在数据库中的位置,就像一个目录的街丢目录的绝对目录(absolute pathname)标识了它在文件系统中的位置一样。在DNS中,域名是从该域的root节点开始,一直回溯到整棵树的root节点的标签序列,以点号(.)分隔路径中的各个节点标签。在UNIX文件系统中,一个目录的绝对路径是从数的根节点开始标记,一直走到子叶为止。
每个域都可以被分解成若干子域,这些子域可以被分派给不同的组织。若要将子域授权给其组织,就需要创建一个新的区域(zone),就是在域命名空间中划分出一段可以自治的区域。uestc.edu现在已经从edu中独立出来,它包括了所有以uestc.edu结尾的域名。从另一方面来说,edu仅包括以edu结尾的域名,但又不包括像uestc.edu这样已经被授权出去的域名。uestc.edu可以被进一步划分成子域,例如pe.uestc.edu。于此同时,如果uestc.edu的管理员将部分子域的管理权委托给其他组织,那么子域也可以成为独立的区域。如果pe.uestc.edu是一个独立的区域,那么uestc.edu区域中不包括以pe.uestc.edu结尾的域名。
下图是子域和文件系统的远程管理:

在网路上每台主机都有一个域名,它指向该主机的相关信息,这些信息中可能包含IP地址、邮件路由信息等。此外,主机也可以拥有一个或多个域名别名(domain name aliases),这些域名别名是从某个域名(别名)指向另一个域名指针。
如下图所示DNS中别名指向规范名称:

为什么要采用如此复杂的结构呢?这是因为了解决HOSTS.TXT文件所存在的问题。例如,采用层次结构是为了解决名称冲突的问题。每个域都有一个唯一的域名,因而管理这个域的组织可以自由地命名该域中的主机和子域。无论管理者为他们的主机或者子域选择什么样的名称,都不会和其他组织的域名冲突,因为这些名称会有唯一的域名附加在纪委。例如,管理hic.com的组织,可以把一台主机命名为puella,因为这个组织知道这台主机将会以hic.com结尾,从而形成一个唯一的域名

bind简介

BIND(Berkeley Internet Name Daemon)是现代互联网上最常用使用DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。

域命名空间

DNS是分布式数据库通过域名来进行索引。每个域名本质上就是一棵大型的逆向树(inverted tree)的一条路径,而这棵逆向树又被称为的域名空间(domain namespace)。而这树的层次结构与UNIX文件系统类似 。这棵树的顶端有唯一的根,DNS树可以在每个交叉点上分出任意数量的分支。树的深度最多可达127层。

域名

树中的每个节点都有一个最长为63个字符的文本标签(不包括.)。空标签(长度为0)是为root保留的。树中任意一个节点的完整域名是从该节点到root的路径上所有标签的顺序组合。域名的通常读法是:从节点本身开始,沿着路径直读到root。并且用“.”来分割路径上出现的各个标签。

DNS要求同一父节点下的子节点,即兄弟节点要有不同的标签。以此保证一个域名和树中一个节点唯一对应。

域(domain)

一个域就是域命名空间的一棵子树,一个域的名称也就是该域名最顶节点的域名。子树(域)中的任何域命都被认为是域的一部分。因为一个域名可以属于多个域。比如说www.baidu.com是baidu.com的一部分,同时也是com.域的一部分。
主机在这里用域名来表示。请记住,域名只是DNS数据库中的索引,这里所说的主机,就是那些指向个人主机信息的域名。一个域包括所有域名在该域下的主机。

顶级域是root的子域。

一级域也是root的子域(一级域和同一概念)

二级域是一级域的子域,依次类推。

资源记录

与域名相关的数据都被包含在资源记录(Resource Record,RR)中。记录按照所关联的网络或软件的类型(Type)被分成不同的类(class)。目前,这些类型包括:internet类(任何基于TCP/IP的internet)、基于Chaosnet协议的网络类型、使用Hesiod软件的网络类。

在同一个类中,记录也可以被划分成好几种类型。划分的依据是存放在域命名空间中数据种类的不同。不同的类可以定义不同的记录类型,而有些类型在很多类中都通用,例如:几乎灭个类都定义了地址(address)这种类型。

授权(Delegation)

还记得设计域名系统的一个主要的目的就是分散管理吗?这是通过授权来实现的。对于域的授权很像工作中任务的派遣。管理者可以将一个大项目分解成更小的任务,然后将这些任务交给不同的员工负责。

同样,管理域的组织可以将域进一步划分成子域。每个子域都可以被授权给其他组织来管理,这意味着这些被授权的组织得负责维护子域中所有的数据。他们可以自由地改变域中的数据,甚至将子域进一步划分成更过的子域,然后再授权给其他组织管理。父域仅仅保留子域的数据来源的指针,这样父域便可将查询者引到该处。

名称服务器和区域

存储域名空间信息的程序被称作名称服务器(nameserver)。名称服务器通常只拥有域名空间某一部分的完整信息,这一部分我们称作区域(zone),区域的内容是从文件或另一个名称服务器加载而来。加载过后,这个名称服务器便可宣称对该域具有权威(authority)。一个名称服务器可以同时对多个区域具有权威。

区域和域的区别很重要,所有顶级域以及许多二级域和更低级别的域,uestc.edu或者baidu.com,通过授权被划分成更下更好管理的单元,这些单元被称作区域。edu域划分成了很多的区域,包括uestc.edu区域、nwu.edu区域。在域的顶部,还有一个edu区域,很自然,edu域的管理者们会将edu域分解。

如下图所示区分域和区域:

域名服务器类型

一个DNS服务器可以同时作为多个域名服务器和辅域名服务器,也可以只作为主或只作为辅,或者做任何域的授权服务器而只是用自己的cache来提供查询解析,Master服务器也经常叫做Primary,Slave服务器也经常叫做Secondary,不论是M/P/主/一级域名服务器,还是S/Sec/辅/二级域名服务器,都是这个这个域的授权服务器,所有的服务器都将数据保存在缓存中,直到针对这些数据的TTL值过期。

主域名服务器(Master/Primary)

Primary Master Server是一个domain信息的最根本的来源。它是所有辅域名服务器进行域传输的源,主域名服务器是从本地磁盘中读取域的数据。

辅域名服务器(Slave/Scondary)

就是Slave Server,或叫做Secondary Server。次级服务器使用一个叫做域传输的复制过程,调入其它服务器中域的内容。通常情况下,数据是直接从主服务器上传输过来的,但也可能是从本地磁盘上的cache中读到的。辅域名服务器可以提供必要的冗余服务。所有的辅域名服务器都应该写在这个域的NS记录中。

隐藏服务器(Stealth Server)

Stealth Serve可以针对一个域的查询返回授权记录,但是它并没有列在这个域的NS记录里。Stealth服务器可以用来针对一个域进行集中分发,这样可以不用在远程服务器上手功能编辑这个域的信息了。在这种方式中,一个域的master文件在Stealth server上存储的位置,经常叫做“hidden primary"配置。Stealth服务器也可以将域文件在本地做一个拷贝,从而可以在所有官方的域名服务器都不能访问的情况下,也能更快地读取域的记录。

高速缓存域名服务器(Caching Only Server)

缓存服务器可以将它收到的信息存储下来,并再将其提供给其他用户查询,直到这些信息过期。它的配置中没有任何本地的授权域的配置信息。它可以相应用户的请求,并询问其他授权的域名服务器,从而得到回答用户请求的信息。

转发服务器(Forwarding Server)

一台缓存服务器本身不能进行完全的递归查询。相反,它能从缓存向其他缓存服务器转发一部分或者是所有不能满足的查询,一般被称作转发服务器。可能会有一个或多个转发服务器,它们会按照顺序进行请求,直到全部穷尽或者请求得到回答为止。转发服务器一般用户不希望站点内的服务器直接和外部服务器的情况下。一个特定的情形是许多DNS的服务器中。一个特定的清洗过的是许多DNS的请求协定包。一个特定的情形是许多DNS服务器和一个网络防火墙。服务器不能透过防火墙传送信息,它就会转发给可以传送的服务器,那台服务器就会代表内部服务器询问因特网DNS服务器。使用转发功能的另一个好处是中心服务器得到了所有用户都可以利用的另一个好处是中心服务器得到了所有用户都可以利用的更加完全的信息缓存。(内网)

动态域名服务DDNS(Dynamic Domain Name Server)

DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务上主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。DDNS解析的IP是动态变动的,普通DNS都是基于静态IP解析;你也可以理解DDNS就是DHCP与DNS两个服务的配置。花生壳就是DDNS动态域名解析服务,有些家用路由器就包含DDNS服务。(内网)

DNS资源记录(Resource Record)

在bind里,通常我们会把每一个域名的设定存储在一个区域文件(zone file)中,此区域文件会由多条记录组成,每条记录我们就称为资源记录(Resource Record)。

资源记录的基本格式

【name】 【ttl】 【IN】 【type】 【type-specific-date】

name:名称字段,此字段是资源记录的域对象名,可以是一台单独的主机也可以是整各域。字段::”。“是根域,@是默认域,即当前域。

ttl:生存时间字段,它以秒为单位,定义该资源记录中的信息存放在DNS缓存中的时间长度。我们的ns记录TTL设置为24h,其他记录因为需要经常维护设置为600s。注意0值TTL禁止缓存。

IN:此字段用于将当前记录标识为一个Internet的DNS资源记录。

Type:类型字段,用于标识当前资源记录的类型。

type-specific-data:数据字段用于指定与当前资源记录有关的数据,数据字段的内容取决于类型字段。

其某个记录的实例如下图所示:

www.baidu.com./www   IN   A     119.75.128.70

泛域名的写法:

*.blog      IN     A      192.168.5.184

泛域名即利用通配符*来做名称字段以实现所有的次级域名均指向同一个IP地址

生产送DNS资源记录类型

SOA     权威记录的起始            指定有关DNS区域的权威性信息,包括主要名称服务器、域名管理员的电邮地址、域名的流水式编号、和几个有关刷新区域的定时器。

NS        名称服务记录              委托DNS区域(DNS zone)使用已提供的权威域名服务器

A          IP地址记录                 主机名字到IP地址的映射

PTR       指针记录                   IP地址到名字的映射

CNAME   规范名称记录             一个主机名字的别名:域名系统将会继续尝试查找新的名字。

MX         邮件交换记录             引导域名到该域名的邮件传输代理(MTA、Message Transfer Agents)列表

TXT        文本记录                   可读的文本DNS记录,最常用的是SPF格式

SPF        发送方策略框架           Sender Policy Framework(发送方策略框架):它的内容写在DNS的txt类型记录里面,是一种以IP地址认证电子邮件发件人身份的技术,是非常高效的垃圾邮件解决方案。

DNS基本概念总结

域名 如在浏览器地址栏输入的www.baidu.com,www.hao123.com等我们称之为域名,域名即网站名称。如果说互联网的本质是连接一切,域名则为“一切”提供了身份标识功能,而IP为“一切”提供了寻址功能。域名和IP的关系可类比每个人的姓名与住址。域名的基本类型:一、国际域名(international top-level domain-names,简称iTDs),也叫国际顶级域名。例如表示工商企业的.com,表示网络提供商的.net,表示非盈利组织的.org等。二、国内域名,又称为国内顶级域名(national top-level domainnames,简称nTLDs),即按照国家分配不同后缀。实际使用和功能上,iTDs与nTLDs没有区别,都是互联网上具有唯一性的标识。只是在最终管理机构上,iTDs由美国商业部授权(The Internet Corporation for Assigned Names and Numbers)即ICANN负责注册和管理;而中国则有中国互联网管理中心(China Internet Network Information Center)及CNNIC负责注册和管理。

域名级别 顶级域名分成两种:nTLDs与iTDs,二级域名:是指在顶级域名下的域名,在iTDs下它是指域名注册人的网上名称,例如baidu、yahoo、microsoft;在nTLDs下,它是表示注册企业类别的符号,例如.com表示工商企业。.net表示网络提供商。.org表示非盈利组织等。例如:www.baidu.com.cn属于二级域;www.baiud.com属于一级域;www.baidu.cn属于一级域。

根域、顶级域、二级域、子域 域名采用层次化的方式进行组织,每一个点代表一个层级。一个域名完整的格式为www.baidu.com. 最末尾的点代表根域,常常省略;com即顶级域(TLD);baidu.com即二级域。依次类推,还有三级域、四级域等等。子域是一个相对的概念,baidu.com是com的子域,www.baidu.com是baidu.com的子域。
如何区分域名级别:域名可分为不同级别,包括顶级域名、二级域名等。
顶级域名又分为两类: 一是国家顶级域名,例如中国是cn,美国是us,日本是jp等;二是国际顶级域名,例如表示工商企业的 .Com,表示网络提供商的.net,表示非盈利组织的.org等。
二级域名是指顶级域名之下的域名,在国际顶级域名下,它是指域名注册人的网上名称,例如 ibm,yahoo,microsoft等;在国家顶级域名下,它是表示注册企业类别的符号,例如com,edu,gov,net等。

域名系统 即DNS(Domain Name System)。DNS主要解决两方面的问题:域名本身的增删改查以及域名到IP如何映射。

正向解析 查找域名对应IP的过程。

反向解析 查找IP对应域名的过程。反向解析的作用为服务器的身份验证,通常邮件服务器需要启用域名反向解析功能。逆向解析域域名后缀以”in-addr.arpa“结尾。例如一个IP地址:60.28.233.170,其反向域名表达式方式为:170.233.28.60. in-addr.arpa。两种表达方式中IP地址部分顺序恰好相反。

解析器 即resolver,处于DNS客户端的一套系统,用于实现正向解析或者反向解析。

权威DNS 处于DNS服务端的一套系统,该系统保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器。

递归DNS 又叫local dns。递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。

转发DNS 转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。

公共DNS 公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。

域名查询过程

我们以用户在浏览器中输入www.baidu.com为例,详细说明实际域名查询过程:

1.用户输入www.baidu.com,浏览器调用系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发送给运行商分配的local dns地址(或者用户自己配置的公共dns);

2.local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;

3.跟服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查询缓存,没有缓存才返回下级域,此处不再重复;

4.local dns查询com,com返回baidu.com地址;

5.local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。

其过程如下图所示:

另一个查询过程的例子:

1.DNS客户机解析器

当用户(不同ISP的用户)使用应用发起基于域名的请求,DNS客户端先查询本地DNS Cache。本地DNS Cache由两部分组成,查询顺序如下:

(1)、Hosts文件中的主机名到IP地址映射定义,如果查询有,就先返回IP地址映射,完成域名解析;

(2)、之前DNS查询得到的结果缓存,并且此结果还处于有效期;如果hosts里没有这个域名的映射,则如果DNS客户端从本地缓存中获得相应的解析结果,则返回目标IP地址,域名解析完成。否则将域名解析请求发送给ISP DNS服务器。

2.客户机到ISP DNS查询过程

ISP DNS服务器收到请求后,就先查询本地的缓存。如果命中,则直接返回查询的结果。否则,则直接发送请求给根域名服务器(Root Name Server)。

3.DNS服务器之间查询过程

(1)、根域名服务器(Root Name Server)收到请求后会判断这个域名(.com)是谁来授权管理,并会返回负责该顶级域名服务器(gTLD Server)的IP地址。ISP DNS服务器收到IP信息后,再向负责.com域的DNS服务器发送请求。

(2)、接受请求的顶级域名服务器(gTLD Server)查找并返回此域名对应的域名服务器(Name Server,即该域名授权域名服务器)的地址。

(3)、ISP DNS服务器收到查询请求域名的授权DNS地址后,再向其发送域名查询请求。

(4)、域名授权DNS接收到查询请求,根据view定义查询相应域名的区域数据,将查询结果返回给ISP DNS。

(5)、 ISP DNS接收到返回结果后保存到缓存,并且将结果返回给客户机。

(6)、DNS客户机接收到访问域名的IP地址,将查询结果保存至本地DNS缓存,并进行访问请求,至此DNS解析完毕。

递归查询(Recurse)

域名服务器将代替提出请求的客户机(下级DNS服务器)进行域名查询,若域名服务器不能直接回答,则域名服务器会在域各树中的各分支的上下进行递归查询,最终将返回查询结果给客户机,在域名服务器查询起价你,客户机将处于等待状态。

当收到DNS工作站的查询请求后,DNS服务器在自己的缓存或区域数据库中查找,如找到则返回结果,如找不到,返回错误结果。即DNS服务器只会向DNS工作站返回两种信息:要么是在该DNS服务器上查找到结果,要么是查询失败。该DNS工作站自行向该DNS服务器查询。“递归”的意思是有来有往,并且来、往的次数是一致的。一般由DNS工作站提出的查询请求便属于递归查询。

由于递归查询是两者之间的,所以通常查询起来高效快捷,能最快应答成功或失败的解析,然而无法成功解析所有域名。一般发生在客户端与服务器间,特殊情况下发生在DNS服务器与DNS服务器之间。

我们使用dig命令进行递归查询:dig +nocmd @8.8.8.8 +recurse www.baidu.com

 

[root@localhost ~]# dig +nocmd @8.8.8.8 +recurse www.baidu.com
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41361   //我们查询到是noerror没有错误的
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

 

;; QUESTION SECTION:
;www.baidu.com. IN A

 

;; ANSWER SECTION:
www.baidu.com. 259 IN CNAME www.a.shifen.com.     //这个是由于实施了CDN技术,先查询到CDN服务器,然后再查询www.baidu.com
www.a.shifen.com. 299 IN A 119.75.218.70
www.a.shifen.com. 299 IN A 119.75.217.109

 

;; Query time: 194 msec    //查询的延迟
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jun 28 11:19:13 2015
;; MSG SIZE rcvd: 90

 

迭代查询(Iteration)

迭代查询又称重指引,当服务器使用迭代查询时能使其他服务器返回一个最佳的查询点提示或主机地址,若此最佳的查询点中包括需要查询的主机地址,则返回主机地址信息,若此服务器不能够支架查询到知己地址,则是按照提示的指引依次查询,直到服务器给出的提示中包括所需要查询的主机地址为止,一般每次引导都会更靠近根服务器(向上),查询到根域名服务器后,则会再次根据提示向下查询。B访问C、D、E、F、G,都是迭代查询,首先B访问C,得到了提示访问D的提示信息后,开始访问D,D又返回给B提示信息,告诉B应该访问E,以此类推。

我们再使用dig命令惊醒迭代查询:dig +nocmd @8.8.8.8 +norecurse www.baidu.com

[root@localhost ~]# dig +nocmd @8.8.8.8 +norecurse www.baidu.com
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 44291  //状态为servfail,即解析器到Local DNS之间不没有配置支持迭代查询,这里显示的为查询失败。
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com. IN A

;; Query time: 119 msec  //显示查询延迟
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jun 28 11:23:53 2015
;; MSG SIZE rcvd: 31

问题1:ISP DNS以及客户端DNS缓存时间由什么控制?
此值在DNS zone file配置TTL值,正常情况下根据域名得到目标IP记录,连同此值返回。

问题2:如果是电信接入用户使用的联通DNS,访问互联网会导致什么情况发生,根据智能解析到的访问IP地址可能是那个运行商的(因此很多安全工具具有一”本地DNS优化“的功能)?

问题3:DNS只是简单地向指示中列在第一个的名字服务器查询吗?或者随机选择?

BIND民资服务器使用一种称为”往返时间“(Round-Trip Time)或RTT的度量对用一个去的权威名字服务器进行选择。往返时间:指远程名字服务器响应查询的时间长度。每次BIND名字服务器向远程名字服务器发送查询时,都启用一个内部计时器。当它收到响应时就停止计时,记录下该远程名字服务器过了多长时间才响应。当名字服务器要选择向哪个名字服务器发送查询时,它就选择具有最小RTT的名字服务器。 

问题4:智能DNS view定义是根据谁的IP而判定返回对应zone数据内容?

这个是根据ISP DNS的IP地址决定返回IP地址属于哪个运行商的IP地址。

理论上讲域名查询有两种方式:

迭代查询:A问B一个问题,B不知道答案所你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代...

递归查询:A问B一个问题,B问C,C问D... 然后D告诉C,C告诉B,B告诉A

上述过程中从resolver到递归DNS再到根的查询过程为递归查询;递归DNS到根、到com、到baidu.com的过程为迭代查询。

注意:递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。

域名系统组织构架

DNS是全球互联网中最重耀的基础服务之一,也是如今唯一的一种有中心点的服务。全球域名系统组织与管理构架如下图所示:

 

ICANN  互联网名称与数字地址分配机构(The Internet Corporation for Assigned Names and Numbers)。负责IP地址空间的分配、协议标识符的指派、通用顶级域名(gTLD)、国家和地区顶级域名(ccTLD)系统的管理以及根服务器系统的管理。这些职能最初是在美国政府合同下由互联网号码分配当局(Internet Assigned Numbers Authority,IANA)以及其它一些组织提供,现在都由ICANN统一行使。

ccNSO  国家和地区名称支持组(Country Code Names Supporting Organization)。负责各种ccTLD的注册。

GNSO  通用名称支持组(Generic Names Supporting Organization)。负责各种gTLD的注册。

RSSAC  根服务器系统支持委员会(Root Server System Advisory Committee)。负责根服务器系统管理。

全球DNS总共有13个根,具体信息如下图所示:

 

域名市场

1.域名交易

作为互联网最重要的轻资产之一,域名原生就具有着投资和品牌价值。围绕域名相关的交易,目前已经衍生出包括注册、买卖、中介、抢注、投资、停放、备案等的一个完整生态系统。

域名注册  向有资质的注册商申请一个域名的过程。国内知名的注册商有万网、35互联、中国数据等,可注册常见的.com、.cn、.net、.org等域名;国外知名的有godaddy、enom等。

域名买卖,域名中介、域名经纪  围绕域名的评估、分析、谈判、购买、出售等一系列过程。可类比房地产行业。

域名抢注  分两种情况,一种是抢注未被注册过的域名,一种是抢注曾经被注册过但是未能在有效期结束前及时续费的域名。国内外都有不少专门提供域名抢注服务的平台。

域名投资  注册和购买有价值的域名,然后获利转让的行为。投资者一般被称为“玉米虫”。2014年比较热门的几次投资事件一个是罗永浩的t.tt,号称成交价200万元;一个是雷军的mi.com,号称成交价360万美元;一个是莫天全的fang.com,成交价格不详。

域名停放  将未建站的域名解析到广告页面,利用域名的自然流量来获取收入的方式。提供域名停放服务依赖以下两点:优质广告资源和防作弊技术。

2.域名解析

域名市场除了包含各种类别的交易服务以外,另还包含解析服务。按照功能不同,域名解析服务可以分为如下几类:

权威DNS  国内典型的代表是dnspod,主要提供域名托管以及智能解析服务。智能解析主要解决这样一个问题:假设一个域名同时绑定了联通和电信的IP,当一个电信用户去访问时有可能会解析到一个联通的IP,从而产生跨网问题。使用智能解析后,系统将根据用户来源去智能的返回结果。

公共DNS  公共DNS类似于运营商的local dns,本质上讲是一种递归解析服务。与运营商DNS不同的是,公共DNS一般以一个或两个非常容易记住的IP方式(如百度公共DNS服务IP:180.76.76.76)给所有用户提供统一服务。公共DNS相对于运营商DNS的优势主要在无劫持、更快、更稳定、更安全等。

CDN DNS  本质上讲也是一种权威DNS,主要在CDN的业务场景中提供流量调度功能。用户将域名CNAME或者直接NS托管到CDN DNS,CDN DNS进一步做智能调度返回一个离用户最近的接入节点。用户访问接入节点,享受CDN提供的缓存、加速、以及防攻击服务。

域名攻击手段

query flood 通过不断的发DNS请求报文来耗尽目的DNS资源,形成拒绝服务。具体分类包括源IP是否随机以及目的域名是否随机等。

response flood 通过不断的发DNS响应报文来达到拒绝服务的目的。

udp flood DNS底层协议为UDP,基于UDP的各种flood攻击也会给DNS带来危害。

折射攻击(反射攻击) 伪造源IP为第三方,借助DNS的回包来达到DoS掉第三方的目的。属于“借刀杀人”的手段。

放大攻击 折射攻击的一种。通过恶意的构造相应报文来达到流量放大作用,从而对第三方形成带宽攻击。请求报文几十个字节,回应报文可以达到几千字节,以为着可以形成成百倍以上流量放大系数。

缓存投毒 每一台DNS都有缓存,缓存投毒指的是通过恶意手段污染DNS缓存,形成DNS劫持或者拒绝服务。

漏洞攻击 利用各种漏洞来达到入侵并控制DNS服务器目的。漏洞不仅仅指DNS程序本身的,也有可能是机器或者网络其它的“问题点”。

社会工程学手段 所有系统都需要人的维护,而人永远是安全中最脆弱的一环。

域名攻击的防御手段

对于权威DNS来说,由于请求来源多是运行商或者公共DNS厂商的递归DNS,源IP比较固定,可以实施源IP白名单策略,,该策略对于伪造源IP的攻击具有一定的削弱作用。对于域名随机的攻击来说,如果权威DNS本身承载的域名量不是很大,可以考虑域名白名单策略。如果源IP就是运行商的,然后请求域名也是合法的,只能依靠一定的限速策略以及DNS服务器本身的性能。

对于递归DNS来说,各种白名单策略误伤都会很严重,因此主要靠DNS服务器本身性能。

高性能DNS服务器目前来说比较流行的做法是基于Intel DPDK来实施。

另一种推荐实施的策略是RRL(Resopnse Rate Limit),该策略对于防范折射攻击/放大攻击有一定的效果,折射攻击攻击目标不是DNS本身,但是不防御的话如果把第三方攻击挂的话仍然会产生连带责任,因此建议实施RRL

附录:

百度DNS地址:180.76.76.76;备选DNS:114.114.114.114

谷歌DNS地址:8.8.8.8;备选DNS:8.8.4.4

DNS劫持

DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应。对特定网络不能反映或访问是假网址。电信114网址导航就是典型的电信通过DNS劫持的案例。

解决办法:可以将客户端的DNS设置为114.114.114.114、114.114.115.115或者谷歌8.8.8.8、8.8.4.4

以上都是公共DNS服务,可以有效解决DNS劫持、DNS污染,甚至使用DNS可以拦截钓鱼、木马、色情网站。虽然只有几个NS IP,但使用了跟域名服务器相同的BGP Global AnyCast技术,在多个基础电信运营商的多个地点广播相同的IP地址,有众多相同IP地址的NS设备分布在多个基础电信运营商的多个核心机房。

BGP Global AnyCast具有很高的容错性及隔离DDoS攻击的能力,但需要基础电信运营商在核心路由器上配置、成本高昂,因而国内基本无人使用。

DNS污染

域名服务器缓存投毒(DNS cache poisoning),又名域名服务器缓存污染(DNS cache pollution),是指一些刻意制造或无意中制造出来的域名服务器分组,把域名指向不正确的IP地址。

GFW使用的主要技术之一就是DNS污染,将匹配的域名查询请求进行伪装成目标域名的解析服务器给查询者返回虚假结果。同样使用公共DNS解决,但是这并不能彻底解决被墙的问题,即便得到正确的解析结果,可GFW平布解析到服务器IP,网路一样不能正常访问。这就利用到我们学到的OpenVPN技术了。

posted @ 2015-06-27 19:42  Danbocn  阅读(920)  评论(0编辑  收藏  举报