DNS基本概念及操作详解----------------转载

DNS基本概念及操作详解



目录:

1.DNS协议

2.DNS查询

2.1递归查询

2.2跌代查询

2.3反向查询

3.域维护

3.1全量AXFR传输

3.2增量IXFR传输

3.3通过NOTIFY

3.4动态更新

4.DNS安全



在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单。如果你没有听说过DNS查询、反向解析、zone传输、动态更新、DNS安全,那你可以从本文中得到关于他们的最简明的诠释。

一、 DNS协议

DNS在53端口上监听请求并提供响应的服务。出于性能的考虑,DNS查询请求用UDP协议交互并且每个请求的大小小于512字节,但是如果返回的请求大小大于512字节,交互双方会协商使用TCP协议。

二、 DNS查询

DNS中的域名服务器最主要的功能就是响应域名解析器的查询请求(这个域名解析器可能是PC端的解析器,也可能是具有解析功能的另一台域名服务器)。域名解析器是安装在PC端的软件,它负责向本地DNS(local DNS)发起域名解析请求。

DNS系统中有三类查询:

  1,递归查询

  域名服务器将代替请求的客户机(下级DNS服务器)进行域名查询,如果域名服务器不能直接回答,则域名服务器会在域各树种的各个分支的上下进行递归查询,最终将查询结果返回给客户机,在域名查询期间,客户机始终处于等待状态。递归解析的过程如下图所示:

上图中需要注意的是,许多授权域名服务器都不会提供递归查询的功能(为什么?),比如根域名服务器.和二级域名服务器.com都不提供递归查询的功能,所以真正意义上的递归查询是由Local DNS来完成的。

  一般情况下,递归查询的时候会收到以下三种可能的返回结果:

  1),一个或若干个A记录,或者带有CNAME链的A记录。A记录即要请求的域名的IP地址,带有CNAME链的A记录就像上一篇博客“DNS开源服务器BIND最小配置详解”里面请求ftp.cobb.com时会先将ftp.cobb.com CNAME到 ljx.cobb.com,然后返回ljx.cobb.com的A记录。

  2),一个标示域或主机不存在的错误信息。需要注意的是这个错误信息也可能含有CNAME记录。例如我要请求ftp.cobb.com,而我的域名服务器将ftp.cobb.com CNAME到了ljx.cobb.com,但是ljx.cobb.com这个主机不存在,这个时候就返回CNAME记录和错误信息。

  3),暂时性的错误信息。它主要是因为网络不可达该主机,网络不可达不一定表明该主机不存在。

2,迭代查询

 域名服务器在返回一些下一次查询的指引或者主机IP地址,域名解析器在收到指引后会再次向这些指引发起查询请求,直到收到主机IP地址。迭代解析的过程如下图所示:

一般情况下,递归查询的时候会收到以下三种可能的返回结果:

1),A记录或者带有CNAME链的A记录。

2),标示域或主机不存在的错误信息。

3),暂时性错误。可能因为网络不可达。

4),可以给出下一步域名解析的域名服务器(包括它的IP地址)的列表。告诉解析器再去哪里进一步解析。

3,反向查询

  反向查询是根据一个资源记录查询域名。这个资源记录可能是A记录,CNAME记录或者MX记录(见“DNS开源服务器BIND最小配置详解”)。

  为了实现反向查询,DNS中有一个特殊的域名IN-ADDR.ARPA来专门作反向查询定义。详情见RFC3425

三、域维护

  域维护是指通过DNS协议来在主域名服务器和从域名服务器之间维护同一个zone文件。

  DNS中有两种域维护手段,一种是全量传输AXFR(full zone transfer),另一种是增量传输IXFR(incremental zone transfer)。

1,全量传输AXFR

  全量传输时,从域名服务器从主域名服务器上请求zone文件,poll的时间间隔由SOA记录中的refresh标签定义。请求zone文件的过程是从域名服务器向主域名服务器发送查询来实现,如果主域名服务器中SOA记录中的序列号(serial

number标签定义)大于从域名服务器SOA记录的序列号,从域名服务器就会向主域名服务器发送全量传输请求。所以主域名服务器一旦改变了zone文件,则需要增加它该zone中的序列号。整个SOA记录的完整格式见下图:

通常情况下,序列号sn遵循“年+月+日+编号”的格式,如图中的2003080803表示该zone是2003年8月8日的第三次更新。

  全量传输时在TCP的53端口上进行。

  2,增量传输(IXFR)

  传递非常大的zone文件是非常耗资源的(时间、带宽等),尤其是只有zone中的一个记录改变的时候,没有必要传递整个zone文件,增量传输是允许主域名服务器和从域名服务器之间只传输那些改变的记录。

  需要注意的是,不是所有的域名服务器都支持增量传输,当不支持增量传输时,主从间就采用全量传输的方式。

  3,通告(NOTIFY)

  从上面的分析中可以看出,从服务器每隔refresh时间向主服务器发送请求,只有主服务器的SOA中的序列号大于从服务器的序列号才传输,但是如果这个时间间隔比较大的话(比如12个小时),快速变化的网络环境可能不允许有如此大时间的差异。

  所以在实现了通告消息的DNS集群中,DNS主服务器的zone文件发生改变后,它立即向从服务器发送一个NOTIFY消息,告诉从服务器我的zone文件发生改变了,接着从服务器马上对比两者的序列号,再采用上面介绍的全量传输或者增量传输的方法请求zone文件。

  BIND本身支持通告,通告的配置是在named.conf中的zone中的option中配置,配置指令是notify, also-notify和notify-source,具体见这里

  4,动态更新

  每次需要更新zone文件的时候都需要停止域名服务器并重启,这样当zone文件很多的时候域名服务器重启时加载zone文件需要很多的时间。所以需要有一种不停止查询服务而且快速更新zone文件地方机制,这种机制主要有两种:

一种是允许外部进程在服务器运行的时候更新zone文件;

  另外一种是将zone中的资源记录RR存储在数据库中,每次查找zone中记录的时候动态读取;

四、DNS安全

  像其他的任何公共服务一样,DNS也会受到各种各样的安全威胁。这节看看DNS服务器会受到什么样的安全威胁?聪明的人们又是怎么应对这些威胁的。

  为了了解DNS受到的安全威胁和响应的应对措施,首先需要了解一下DNS的正常数据流。如下图所示:

上图中的每个数据流都会受到响应的安全威胁:

  1)zone文件受到的威胁可能有:文件被无意或有意篡改或删除。这种威胁是较好应对的,最主要的方法是制定很好的系统管理策略,zone文件和其他的配置文件需要严格而安全的读写权限。

  2)3)动态更新和域传输受到的威胁可能有:未授权的更新、zone文件在传输过程中被篡改(经常是把域名篡改为别的IP)。这种威胁通常的应对方法是TSIG(Transaction SIGnature)策略(这个策略定义在RFC2845中)。TSIG策略中会计算出一个key,这个key是通过单向散列(能轻松地从输入得出值,但很难通过值猜出输入)计算出来的,然后传输zone文件的双方在传输过程中都带上这个key,如果key不对就拒绝传输。

  4)5)远程查询受到的威胁可能有:cache污染(IP欺骗、数据拦截或错误的master主机地址)。cache污染是指cache中内容可能将您的域名重定向到了一个错误的服务器。这种威胁通常的应对方法是域名系统安全扩展(DNSSEC, Domain Name System Security Extensions),它是为DNS客户端(解析器)提供的的DNS数据来源,数据完整性验证,但不提供或机密性和认证的拒绝存在扩展集。

关于DNSSEC的资料见这里。关于这部分内容,我会在后续的博客中专门介绍,请关注:www.cnblogs.com/cobbliu

时间: 2024-12-11 17:54:14

DNS基本概念及操作详解----------------转载的相关文章

(转载)Resize Instance 操作详解

(转载)Resize Instance 操作详解 - 每天5分钟玩转 OpenStack(41) 原文路径:https://www.cnblogs.com/CloudMan6/p/5548294.html 内容根据本人测试,可能有删改补充. Resize 的作用是调整 instance 的 vCPU.内存和磁盘资源. Instance 需要多少资源是定义在 flavor 中的,resize 操作是通过为 instance 选择新的 flavor 来调整资源的分配. 有了前面对 Migrate 的

【甘道夫】HBase基本数据操作详解【完整版,绝对精品】

引言 之前详细写了一篇HBase过滤器的文章,今天把基础的表和数据相关操作补上. 本文档参考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 所有代码均基于"hbase 0.96.2-hadoop2"版本编写,均实测通过. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/37878701 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空

Java路径操作详解

1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://www.sun.com/index.htm也代表了一个 URL绝对路径. 相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在 Servlet中,"/"代表Web应用的根目录.和物理路径的相对表示.例如:". /" 代表当前目录, &q

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

Storm概念、原理详解及其应用(一)BaseStorm

本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordcount"代码不同的是,并不会有如何运行第一storm代码等内容,只有在运行完代码后,发现需要明白:"知其然,并知其所以然". Storm是什么?为什么要用Storm?为什么不用Spark? 第一个问题,以下概念足以解释: Storm是基于数据流的实时处理系统,提供了大吞吐量的实

GridView内容详解(转载)

GridView内容详解(转载) GridView是ASP.NET界面开发中的一个重要的控件,对GridView使用的熟练程度直接影响软件开发的进度及功能的实现.(车延禄)GridView的主要新特性:    1.与DataSource控件结合实现了显示与数据操作的分离,大大减化了代码的编写量;    2.实现"双向绑定",无需手动检索数据.    2.在列的类型上新增了CheckBoxField和ImageField两个类型列;    3.对排序和分页可以实现异步操作;    4.对

Windows DIB文件操作详解-1.DIB的读入、保存和显示

DIB(设备无关位图)是存储在磁盘上的位图文件,可以从磁盘读到内存中或从内存保存到磁盘上,它的磁盘文件结构是标准化的,在Linux.Unix及Windows上都可以以同样效果显示.位图是最接近硬件的图像格式,Windows显示的核心是位图,它的SDK API专门提供了一组用于操作DIB文件的函数.但是由于这样或那样的原因,高效合理的使用这些DIB API是需要了解不少历史和使用背景的,在这里我抽茧剥丝介绍和演示DIB的使用,相信对你更好的使用DIB文件有帮助,由于DIB函数比较多,这里分为三部分

OSCache操作详解+标签使用

OSCache操作详解+标签使用 1.OSCache是什么?    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能.OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案. 2.OSCache的特点   (1) 缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存. (2) 拥有全面的API:OSCache AP

【Git】Git远程操作详解

Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git远程操作. git clone git remote git fetch git pull git push 本文针对初级用户,从最简单的讲起,但是需要读者对Git的基本用法有所了解.同时,本文覆盖了上面5个命令的几乎所有的常用用法,所以对于熟练用户也有参考价值. 一.git clone 远程操作