Debian9.5系统DNS服务器BIND软件配置说明

DNS的出现的历史

网络出现的早期是使用IP地址通讯的,那时就几台主机通讯。但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和Windows也继承保留了这个文件)。这个文件中记录着主机名称和IP地址的对应表。这样只要输入主机名称,系统就会去加载hosts文件并查找对应关系,找到对应的IP,就可以访问这个IP的主机了。但是后来主机太多了,无法保证所有人都能拿到统一的最新的hosts文件,就出现了在文件服务器上集中存放hosts文件,以供下载使用。互联网规模进一步扩大,这种方式也不堪重负,而且把所有地址解析记录形成的文件都同步到所有的客户机似乎也不是一个好办法。这时DNS系统出现了,随着解析规模的继续扩大,DNS系统也在不断的演化,直到现今的多层架构体系。



一、基本概念介绍:

1、FQDN:(Fully Qualified Domain Name)全限定域名或全域名:同时带有主机名和域名的名称(FQDN=Hostname+DomainName)。通过符号“.”隔开主机名和域名,例如:主机名是www,域名是baidu.com,那么FQDN就是www.baidu.com。全限定域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。FQDN的作用就是通过FQDN来确定主机的唯一逻辑位置,就比如我们要发一个快递到“第一人民医院”,但是全国有太多叫做“第一人民医院”,快递员就会蒙了,肯定会要求我们把具体的地址写上。比如XX省XX市,这样才能把你的包裹准确的送到“XX省XX市第一人民医院”,主机名就相当于“第一人民医院”,XX省XX市就相当于域名。

2、DNS(Domain Name System,域名系统),万维网上作为域名(更准确的应该是全限定域名)和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。

DNS的作用:
网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“10.10.10.10”之类的IP地址,而不能认识域名。
我们很难记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入全域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计
算机自动把我们的全域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。

3、根域
就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有13台,但是这是错误的观点。根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。具体的镜像分布可以参考维基百科。

4、域的划分
根域下来就是顶级域或者叫一级域,有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。具体多少可以自己去查,这里不讨论。每个域都会有域名服务器,也叫权威域名服务器。Baidu.com就是一个顶级域名,而www.baidu.com却不是顶级域名,他是在baidu.com 这个域里的一叫做www的主机。

一级域之后还有二级域,三级域,只要我买了一个顶级域,并且我搭建了自己的DNS服务器注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。比如abc.www.baidu.com,在这个网址中,www.baidu.com变成了一个三级域而不是一台主机,主机名是abc,域名是www.baidu.com,当然了这都是规定的不是绝对的,我们完全可以把主机名设置成abc.www,域名就变成了baidu.com,这里要注意的是并不是以小数点区分域名和主机名,而是自己定义的,前提是符合业界标准。

5、域名命名的规则
域名中只能包含以下字符:  
(1). 26个英文字母  
(2). "0,1,2,3,4,5,6,7,8,9"十个数字   
(3). "-"(英文中的连词号,但不能是第一个字符)   
(4). 对于中文域名而言,还可以含有中文字符而且是必须含有中文字符(日文、韩文等域名类似)。
(5). 在域名中,不区分英文字母的大小写和中文字符的简繁体   


5、DNS服务器
DNS服务器是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS服务器是如何根据主机名解析出 IP 地址(正解),或从 IP 地址解析出主机名的呢(反解)?这里我们就要用到资源记录(Resource Record),简称 RR。常用的记录类型有:A、AAAA、SOA、NS、CNAME等。

soa记录:soa是授权服务器回复给查询者,表明自己管理此zone并告知:序列号、刷新时间、过期时间等

A记录:指定主机名或域名对应的IP地址;

AAAA记录:指定主机名或域名对应的IPV6地址;

NS记录:是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;               

cname记录:是域名指向其他域名的记录,如某网一个站点可以有多个域名。

PTR(Pointer):和A记录相反,存储的是 ip 地址对应的主机名,该记录只存在于反向解析的区域数据文件中(并非一定)

6、DNS服务器类型

主DNS服务器: 就是一台存储着原始数据的DNS服务器,可以直接在此区域内添加,删除与修改记录。
从DNS服务器: 使用自动更新方式或被动更新从主DNS服务器同步数据的DNS服务器。也成辅助DNS服务器。
缓存服务器: 不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。
转发器: 这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

二、DNS查询方式

1、递归查询:客户端向本地DNS服务器的查询就属于递归查询,客户端发出查询请求后处于等待状态,直到本地DNS服务器返回确定回复或否定答复。

2、迭代查询:客户端向本地 DNS 服务器发出请求后,一直处于等待状态,本地DNS服务器如果没有记录那么本地DNS就以客户端身份询问其他DNS服务器,DNS服务器与DNS服务器之间的大部分查询属于迭代查询。

具体的查询流程以访问 www.baidu.com 为例

(1)操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

(2)如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

(3)如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

(4)如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

(5)如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(baidu.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找(baidu.com)域服务器,重复上面的动作,进行查询,直至找到www.baidu.com主机。

(6)如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

    从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

三、DNS软件安装配置

1、 安装DNS
Bind 是一款开放源码的 DNS 服务器软件,Bind由美国加州大学 Berkeley 分校开发和维护的,全名为 Berkeley Internet Name Domain 它是目前世界上使用最为广泛的 DNS软件。
------------------------------------
root@debian:~# apt install bind9               #bind 主程序
root@debian:~# apt install bind9-doc           #如果你还要安装文档(非常有用)
root@debian:~# apt install dnsutils            #测试工具 dig host nslookup 来自 dnsutils包
------------------------------------

2、启动Bind服务
-------------------------------------------------
root@debian:~# systemctl start bind9.service
-------------------------------------------------

3、设置Bind服务开机启动
-------------------------------------------------
root@debian:~# systemctl enable bind9.service
-------------------------------------------------

四、bind9软件配置
Bind软件的主要配置文件包括/etc/bind/named.conf和相应的区域文件,bind中各种配置的更改都是通过修改这些文件来完成,修改完成后需要重启bind服务使配置成效。/etc/bind/目录下的主要文件说明:
------------------------------------------------------------------
named.conf
设置一般的named参数,指向该服务器使用的域数据库的信息源

named.conf.options
全局选项

db.root
根服务器指向文件, 由Internet NIC创建和维护, 无需修改, 但是需要定期更新

db.local
localhost正向区文件,用于将名字localhost转换为本地回送IP地址 (127.0.0.1)

db.127
localhost反向区文件,用于将本地回送IP地址(127.0.0.1)转换为名字localhost
---------------------------------------------------------------------

五、named.conf配置文件
named.conf是bind的主要配置文件,里面存储了大量的bind自身的设置信息。named.conf配置文件是由配置语句和注释组成。每条配置语句以分号“;”作为结束符,多条配置语句组成一个语句快,注释语句使用两个左斜杠“//”作为注释符,每个语句里面可能还有很多子参数,但是必须以分号结束,所有的子参数会以大括号{}扩起来,也必须以分号结束。
---------------------------------------------
其中,主配置文件named.conf的主要配置语句如下:

命令           用法  

acl          定义IP地址的访问控制清单  

control      定义ndc使用的控制通道  

include      把其他文件的内容包含到配置文件中,通过这个选项可以把要配置的语句放到其他文件中,方便查看和管理  

key          定义授权的安全密钥  

logging      定义日志写什么,写到哪

opitons      定义全局配置选项和缺省值

server       定义远程服务器的特征

trunsted-keys    为服务器定义DNSSEC加密密钥

zone         定义一个区域

其中常用的配置语句简单说明如下:

1、acl语句

acl语句用于定义地址匹配列表,访问控制是指仅对定义的网络进行解析。访问控制是通过 acl 函数来实现的,acl 把一个或多个地址归并为一个集合,也可以在某个项目的前面加上一个感叹号“!”表示否定,并通过一个统一的名称调用。需要注意的是:acl 只能先定义,后使用。因此,其一般在 named.conf 文件的 options 字段的前面定义。还有由于bind采用了顺序优先匹配算法,所以一个小的范围定义一定要在更大的范围定义之前。其中格式如下所示。
------------------------------------------
acl acl-name {
    ip             #具体的ip地址
    net/prelen     #表示一个网段
}

例如:
acl mynet {
     192.168.179.110
     192.168.179.0/24
     !192.168.189.110
};

bind 内置的 acl:

none    :不匹配任意主机
any     :匹配任意主机
localhost  :匹配主机上所有ipv4的网络接口。
localnets  :匹配所有ipv4本地网络的主机。
------------------------------------------

2、controls语句

controls语句用于定义rndc工具与Bind服务进程的通信,系统管理员可以通过rndc向bind进程发出控制命令,并接受由bind返回的结果。其格式如下:
------------------------------------------
controls {
  [ inet ( ip_addr | * ) [ port ip_port ] allow {  address_match_list  }
                keys { key_list }; ]
  [ inet ...; ]
  [ unix path perm number owner number group number keys { key_list }; ]
  [ unix ...; ]
};
------------------------------------------

3、include语句

include语句用于把语句中所指定的文件的内容添加进named.conf配置文件中,通过这个选项可以把要配置的语句放到其他文件中,方便查看和管理,其格式如下:
------------------------------------------
include "filename";
------------------------------------------

4、key语句

key语句用于定义TSIG或命令通道所使用的加密密钥,其格式如下:
-----------------------------------------------
key key_id {
    algorithm string;
    secret string;
};
-----------------------------------------------

5、options语句
options语句用于设置影响整个DNS服务器的全局选项,该语句在named.conf配置文件中只能出现一次。如果没有设置该语句,那么bind将使用默认的options值。该语句支持的选项非常多,下面是一些常见的选项。Debian把这个语句以文件的形式单独放在/etc/bind/named.conf.options文件中,通过include语句把文件的内容添加到/etc/bind/named.conf中。
-----------------------------------------------
options {
   
    [ directory path_name; ]
   
    [ forward ( only | first ); ]
    [ forwarders { [ ip_addr [port ip_port] ; ... ] }; ]
   
    [ allow-notify { address_match_list }; ]
    [ allow-query { address_match_list }; ]
    [ allow-transfer { address_match_list }; ]
    [ allow-recursion { address_match_list }; ]
    [ allow-v6-synthesis { address_match_list }; ]
    [ blackhole { address_match_list }; ]

    
    [ listen-on [ port ip_port ] { address_match_list }; ]
    [ listen-on-v6 [ port ip_port ] { address_match_list }; ]
    
    [ query-source  address ip4_addr port  ip_port ;]
       
    [ query-source-v6 address ip4_addr port  ip_port ;]
       
};
 -----------------------------------------------   
   
directory: 选项用于定义服务器的工作目录。在配置文件中所有使用的相对路径,都是相对于该路径来定义的。如果没有设定directory选项,工作目录缺省设置为服务器启动时的目录‘.’。指定的目录应该是一个绝对路径。默认选项如下:

directory "/var/cache/bind";

转发选项
-----------------------------------------------
forward: 此选项只有当forwarders列表中有内容的时候才有意义。当值是first,如果DNS服务器的本地区域文件与缓存解析都失效后会先把请求转发给forwarders选项中所指定的远端DNS服务器,如果远端DNS服务器无法响应请求,则bind将尝试自行解析该请求(通过根服务器的迭代查询,前提是配置了根zone),如果设定的是only,服务器就只会把请求转发到其它服务器上去,并不进行通过根服务器的迭代查询。举例如下:

forward  first;

forwarders: 选项用于指定转发后访问的DNS服务器的ip地址。默认的列表是空的(不转发)。选项值可以是一个ip地址或主机名,也可以是多台主机的列表,不同主机ip地址或名称之间使用分号“;”进行分隔,转发也可以设置在每个域上,这样全局选项中的转发设置就不会起作用了。用户可以将不同的域转发到不同的DNS服务器上,或者对不同的域可以实现forward only或first的不同方式,也可以根本就不转发。举例如下:

forwarders { 114.114.114.114 ; 8.8.8.8 ; };

访问控制选项
-----------------------------------------------
allow-notify: 该子句子用来设定除了主域名服务器之外,那台主机还可以发送通知消息,通知域中的从服务器区域数据库已经发生了改变。默认情况下,区域中的域名服务器只接受来自主域名服务器的通知消息,allow-notify也可以在zone语句中设定,这样全局options中的allow-notify选项在这里就不起作用了。但它只对辅域有效。如果没有设定,默认的是只从主域发送notify信息。

allow-query: 设定哪个主机可以进行普通的查询。allow-query也能在zone语句中设定,这样全局options中的allow-query选项在这里就不起作用了。一般如果是全局选项或着是多个设置就会在ACL选项里进行配置这样比较方便,默认的是允许所有主机进行查询。举例如下:

allow-query { 192.168.8.0/24; };

allow-transfer: 设定哪台主机允许和本地服务器进行域传输。allow-transfer也可以设置在zone语句中,这样全局options中的allow-transfer选项在这里就不起作用了。如果没有设定,默认值是允许和所有主机进行域传输。举例如下:

allow-transfer {192.168.8.100; };

allow-recursion: 设定哪台主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。

allow-v6-synthesis: 设定哪台主机能接收对ipv6的响应。

blackhole: 设定一个地址列表,服务器将不会接收来自这个列表的查询请求,或者解析这些地址。从这些地址来的查询将得不到响应。默认值是none。

网络接口和端口选项
-----------------------------------------------
网络接口和端口可以使用listen-on: 选项来设定。listen-on使用可选的端口和一个地址匹配列表。服务器将会监听所有匹配地址列表中所允许的端口。如果没有设定端口,就使用默认的53。该子句的基本语法如下:

listen-on [ port ip_port ] { address_match_list };

其中,port ip_port参数指定监听的端口,address_match_list是一个有效的地址匹配列表。例如:下面给出两个listen-on子句的例子:

listen-on { 192.168.8.8; };
listen-on port 2222 { !10.10.10.10; 10.10.10.0/24; };
listen-on { any;}
第一个例子会监听192.168.8.8这个ip地址的53端口。第二个例子会监听所有10.10.10.0网段的ip地址的2222端口,除了!10.10.10.10这个ip地址。如果我们将地址匹配列表指定为any,则会监听所有本地ip地址。如果我们将地址匹配列表指定为none,则不会监听所有本地ip地址。

listen-on-v6: 选项用来设定监听进入服务器的ipv6请求的端口。
服务器并不象在ipv4中那样对每个IPV6端口地址绑定一个独立的接口。相反,它一直监听ipv6通配的地址。这样,对于listen-on-v6语句唯一的address_match_list的参数就是:{ any; }和{ none;}
多个listen-on-v6选项可以用来监听多个端口:
listen-on-v6 port 53 { any; };
listen-on-v6 port 1234 { any; };
要使服务器不监听任何ipv6地址,使用:
listen-on-v6 { none; };
如果没有设定listen-on-v6语句,服务器将不会监听任何ipv6地址。

查询地址选项
-----------------------------------------------
如果域名服务器在本地查询不到要解析的域名,那么它将会查询其他的域名服务器。在bind中,专门有一个语句来指定域名服务器发送这类查询请求所用的本机ip地址和端口,该语句的名称为query-source,其中基本语法如下:

query-source address ip4_addr port ip_port ;

其中,ip4_addr参数是一个ipv4的地址,ip_port是一个端口号。如果域名服务器的一个ip地址为192.168.8.8,那么我们可以使用一下代码来指定该域名服务器通过这个ip地址来发送查询请求:

query-source  address 192.168.8.8;

在上面的例子中,我们省略了端口号,此时,bind会通过192.168.8.8这个ip地址,并且随机使用一个大于1024的端口号来发送请求。

下面的例子则制定使用的端口号为5353:

 query-source  address 192.168.8.8 port 5353;
 
 如果address参数的值指定为*或者被省略了,则将会使用接收域名查询查询请求的那个ip地址来发送请求。如果port参数的值被指定为*或者被省略,则将会使用一个随机的大于1024的端口。对于使用ipv6发送的查询,有一个独立的query-source-v6选项。
 
6、server语句
 server主语句定义了与远程服务器交互的规则,例如,决定本地DNS服务器是作为主域名服务器还是辅域名服务器,以及与其他DNS服务器通信时采用的密钥等。语句可以出现在配置文件的顶层,也可以出现在视图语句的内部。如果一个视图语句包括了自己的server语句,则只有那些视图语句内的server语句才起作用,顶层的server语句将被忽略。如果一个视图语句内不包括server语句,则顶层server语句将被当做默认值。


7、view语句
视图是bind9新增的一项强大的功能。视图允许域名服务器根据询问者的不同有区别的回答DNS查询。例如,用户可能会向内部用户显示该区域的全部主机,但是限制外网用户只能看到几台服务器。view语句包含一个控制谁能看到视图的访问控制列表,一些应用到视图中所有区域的选项以及区域定义本身。该语句的基本语法如下:

view "view_name" {

match-clients{address_match_list;};

match-destinations{address_match_list;};

match-recursive-onl yes or no ;

[ view_option; …]

[ zone_statement;…]

};
每一条view语句定义了一个客户端集合所能看到的视图,view_name参数表示试图的名称,如果客户端匹配视图中的match-clients选项所定义的客户端列表,那么Bind将根据该视图返回解析结果。例如,希望对内网和外网用户进行区分,使他们访问同一个域名时,会得到不同的结果。可以通过view语句定义两个不同的视图,在两个视图中分别定义不同的属性。已达到上述的效果。配置如下:

view "internal" {                         #定义内部网络试图
     match-clients{192.168.8.0/24;};      #匹配内部网络
     recursion yes ;                      #对内部用户提供递归查询服务
     zone "example.com" {                 #使用example-internal.zone文件解析域名example.com
           type master;
           file "example-internal.zone";
         };  
};
     
view "external" {                        #定义外部网络试图
     match-clients{any;};                #匹配外部网络
     recursion no ;                      #对外部用户不提供递归查询服务
     zone "example.com" {                #使用example-external.zone文件解析域名example.com
           type master;
           file "example-external.zone";
         };  
};
     
在上面的代码中,定义了两个视图,分别是内部和外部视图。内部视图的作用是与内部网络匹配,只对内部用户提供递归查询服务,并且提供example.com区域的完全视图,包括内部主机地址。外部视图的作用是拒绝对外部用户提供递归查询服务,并且提供一个example.com区域的受限视图,只包括公共可接入的主机。如果上面两个视图的顺序颠倒,那么没有人会看到内部视图,这是因为内部主机在达到内部视图之前,就已经匹配了外部视图中的match-clients子语句中的any值。

8、zone语句
zone语句是named.conf文件的核心部分。每一条zone语句定义一个区域,用户可以在区域中设置该区域相关的选项。在bind中可以设置多种类型的区域,不同类型的区域,其zone语句的定义格式也有所不同。我们可以定义主服务器,从服务器,根服务器的提示以及转发区域,zone语句的内容一般存放在/etc/bind/named.conf.default-zones 文件中,我们也可以在这个文件中添加需要的zone语句,下面进行介绍。

master(主域):
主域用来保存某个区域(如www.baidu.com)的数据信息。基本语法如下:
------------------------------------------------
zone "zone_name" IN {
type master  ;

[ allow-notify { address_match_list ;} ; ]
[ allow-query { address_match_list ;} ; ]
[ allow-transfer { address_match_list ;} ; ]
[ allow-update { address_match_list ;} ; ]
[ file "path" ;]

};
------------------------------------------------
在上面的语法中,zone_name参数表示区域名称,查询类型为IN,区域名称必须使用双引号括起来;子句type  master表示这个服务器是当前区域的主域名服务器,接下来的几个allow子句是访问控制选项。如果区域使用动态更新,那么可以使用allow-update子句来限制发生更新的主机。动态更新只限于主服务器,也就是说,allow-update子句不能用在从服务器上。同时也要保证allow-update子句的访问控制列表仅限于本地服务器,而不是整个internet。file "path"用来指定区域文件,为了管理方便,区域文件一般使用区域名进行命名,每一个zone语句中都用file子句定义一个区域文件,这个文件里面存放了域名与ip地址的对应关系,这个文件名可以用绝对路径也可以用相对路径,相对路径相对的是directory语句定义的路径。

slave(辅域):
辅域(也可以叫次级域)是主域的复制,起备份的作用,由主域控制不可自行更改,主域可以定义了一个辅域或多个辅域。基本语法如下:
------------------------------------------------
zone "zone_name" IN {
type slave  ;

[ allow-notify { address_match_list ;} ; ]
[ allow-query { address_match_list ;} ; ]
[ allow-transfer { address_match_list ;} ; ]
[ file "path" ;]
[ masters {ip_addr;} ;]

};
------------------------------------------------
在上面的语法中,子句type slave表示这个服务器是当前区域的从域名服务器,接下来的几个allow子句是访问控制选项。file "path"子句用来指定一个存储数据库副本的本地磁盘文件。当从服务器每次从主服务器取回区域的新的副本时,它就把数据存储到这个文件中。masters子句列出了一台或者多台服务器的ip地址,从服务器可以从这些ip地址获取区域数据库的副本。实际上,在一个区域中,只有一台服务器作为主服务器。那么,为什么在masters子句中可以列出多个ip地址哪?这是因为这台服务器可能有多个网络接口,因此会有多个ip地址或端口。另外,从服务器还可以从一台备份主服务器上获取数据库。尽管如此,还是建议用户只列出一台真正的主服务器即可。


forward(转发):
转发域中一般配置了forward和forwarders子句,用于把对该域的查询请求转由其他DNS服务器处理。基本语法如下:
------------------------------------------------
zone "zone_name" IN {
type forward  ;

[ forward ( only | first ); ]
[ forwarders { [ ip_addr [port ip_port] ; ... ] }; ]

};
------------------------------------------------
在上面的语法中,子句type forward表示这是一个转发区域。用法和options语句中转发的设置一样。

hint (根):
hint域定义了一套最新的根DNS服务器地址,如果没有定义,DNS服务器会使用内建的根DNS服务器地址。基本语法如下:
------------------------------------------------
zone "." IN {
type hint  ;

[ file "path" ;]

};
------------------------------------------------
其中根域的名称为一个圆点"." type hint子句表示这个区域是根区域,file子句用来指定根区域的区域数据库文件的路径,这个文件有时候被称为根提示文件或者线索文件。其文件名通常为db.root。当然也可以由用户来自定义这个文件名。

stub :
stub域与辅域类似,只复制主域的NS记录而不是整个域。stub不是DNS的一个标准部分,只是BIND提供的功能。

9、根区域文件/etc/bind/db.root
域名服务器除了包含本地域的相关数据之外,还需要关于DNS根域的信息,从而可以解析本地域名之外的域名。这是因为如果在本地找不到匹配的DNS记录,也没有配置forward,则会把请求发送到该文件中所定义的根DNS服务器上进行迭代查询。文件中包含了13根DNS服务器,具体内容这里就不说了。

六、DNS数据库
简单的讲,一个区域的数据库就是由该域的主域名服务器的系统管理员维护的一个文本文件的集合,这些文本文件又称为区域文件。区域文件是整个DNS的核心,所有的DNS数据都存储在区域文件中。

资源记录
区域文件是bind中最重要的文件,域名服务器的实际数据就存储在这些区域文件中。每次当bind启动时,都会自动加载这些数据。bind的区域文件都有固定的格式,包含一条或者多条记录,这些记录称为资源记录(Resource Record,RR)。其中就包含域名和ip地址的对应关系。资源记录的基本语法如下所示:

name    ttl   class    type   rdata

一条典型的资源记录由5个列组成,这些列之间可以用空格或者制表符隔开。

1、name
其中name列表示当前记录所描述的实体名称,可以是一个主机或者一个域。如果几条连续的记录都涉及到同一个实体,则可以从第2条起省略该列的值。在配置文件中,name列可以使用相对名称或者全域名。全域名是以一个圆点“.”结尾的从根域开始算起的域名。bind所处理的域名都是一个全域名,尽管我们可以使用相对域名,但是bind在处理的时候仍然会将其转换为全域名,会在相对域名后面加上默认域。

2、ttl
所谓ttl,是指记录被客户端缓存的有效时间(time to live,TTL)。ttl列以秒为单位指定资源记录可以被缓存并且认为有效的时间长度。但是,通常情况下,除了根提示文件之外,其他数据文件中的该列常常被省略。此时,需要在数据文件的开始位置使用$TTL指令设置一个默认的有效时间,当前数据文件中所有的资源记录都将使用该默认值。ttl的长短会影响到网络流量以及域名服务器的负载。例如,我们可以将ttl的值设置为1周。但是,一旦资源记录被本地网络缓存,将无法强行丢弃他们。因此,如果本地域的数据经常变化,则应该缩短记录的ttl值,使得改变能够尽量得到体现。

3.class
class列是指网络协议的类别,最初定义了4种类别,分别为IN、CS、CH、HS,其中IN表示internet类别,CS表示CSNET类别,CH表示CHAOS类别,HS表示Hesiod类别。目前CSNET和CHAOS这两个类别已经被废弃,Hesiond是一种建立在BIND之上的数据库服务。class列的默认值是IN,这个值也是唯一最常使用的值,尽管IN是默认值,按照惯例我们依然在数据文件中显示地指定。

4、type
type列表示当前定义的记录类型。尽管已经定义了20多种记录类型,但是经常使用的却只有很少的几种。可以将记录类型分为4种:
-----------------------------------
区域记录:标识区域以及名称服务器。
基本记录:指定名称和地址之间的映射。
安全记录:向区域文件添加身份认证和签名。
可选记录:提供关于主机或者区域的额外信息。
-----------------------------------
常见的记录类型及其涵义:

 



5、rdata
rdata列用来说明资源记录类型的细节,这个列的值取决于具体的记录类型。在资源记录中,我们可以使用以下几个特殊字符:
-----------------------------------
分号“;” 表示注释
圆点“.” 用在名字域时,若圆点后无具体内容则该圆点表示当前域。
@符号 表示当前域。
圆括号“()” 使得资源记录可以跨越多行。
-----------------------------------

6、正向解析区域文件
正向解析区域文件用于映射域名和ip地址,文件中包含了该区域的所有参数,包括域名,ip地址,刷新时间,重试时间和超时等。下面举一个正向解析区域文件的例子。
-------------------------------------------------
$TTL  1D
@  IN  SOA  dns1.baidu.com.  pipci.baidu.com. (
           0    ; Serial
           1D   ; Refresh
           1H   ; Retry
           1W   ; Expire
           3H ) ; Negative Cache TTL
           
   IN  NS       dns1.baidu.com.
   IN  NS       dns2.baidu.com.
local.baidu.com.   IN  NS       dns3.baidu.com.
   IN  MX   10  mail1.baidu.com
   IN  MX   20  mail2.baidu.com
   
www.baidu.com.    IN  A  192.168.100.100
mail    IN  A  192.168.100.200
dns1    IN  A  192.168.100.10
abc     IN  A  192.168.100.110
oa      IN  CNAME   mail
-------------------------------------------------    
 对上面的内容进行解释如下:
 
 第一行的“$TTL  1D”用于设置客户端DNS缓存数据的有效时间,该值默认的单位为秒,用户也可以明确指定使用H(小时),D(天),W(星期)作为单位。本例中制定的值为1天。如果网络没有太大的变化,为了减少DNS服务器的负载,可以将该值设置得大一些。
 
 第二行设置SOA记录,又称为起始授权机构记录,是每个授权区域定义的开始标识,属于同一个域的所有资源记录都位于该记录的后面。每个区域只有一个SOA记录,从该记录开始,一直到另外一个SOA记录,中间的记录都属于前面的SOA记录标识的区域。SOA记录中主要定义了一些参数,例如,区域名称,联系人电子邮件以及各种超时参数等,用户体现该区域的属性。
 
 第1列表示区域名称,如果该列为@符号,则表示当前区域的名称,这个当前区域是指在主配置文件的zone语句中定义的区域名称。
 
 第2列是网络协议类型,绝大部分情况取值为IN,也可以省略。
 
 第3列表示记录类型为SOA记录。
 
 第4列表示当前域的主域名服务器的全域名,用于表示那台DNS作为主域的意思,baidu.com为baidu.com这个域的主要DNS服务器。
 
 第5列是当前域的技术维护人的邮件地址,当这个域发生问题时可以联系到维护人员,要注意的是由于@符号在资源记录中有特别意义的,所以这里就将pipci@baidu.com.改写成pipci.baidu.com.
 
 在园括号里面是关于当前区域的一些参数,参数解释如下:
Serial:这个参数的值是一个任意的32位整数,每当区域的数据文件发生改变时,都应该增加该序列号的值。当从服务器得知主服务器上的该区域的序列号的值增加之后,便会从主服务器更新该区域的数据。系统管理员常犯的一个错误就是在更改了数据文件时忘记更新序列号,在这种情况下,主服务器上的更新将不会传递到从服务器上。

Refresh:定义从服务器应该多长时间与主服务器进行更新,更新主要参考Serial的值,如果该值增大表示主服务器的数据库发生了变化就进行更新操作。

Retry:从服务器更新失败时,重新更新的时间间隔

Expire:从服务器一直不能更新时,其数据过期的时间,也就是当主服务器停止服务1个星期之后,从服务器会认为本身的数据已经过时,从而停止服务。

Negative Cache TTL :用来定义当客户机请求某个数据(有效)而正好named服务器没有该数据,则named服务器就向权威服务器请求获得这个数据,获得后,将保存在缓存中,以便客户机再次请求时,直接从缓存中响应给客户机,而保存多久呢,就是这个字段定义的。
Negative Cache TTL值一般设定为5~15分钟。这段时间足以避免客户机反复查询该信息了,同时也保障了不会由于保存时间太长引起的保存了过时的信息。
 
第9-11行设置NS记录,NS记录用来定义一个区域中的权威域名服务器,用来指定该域名由哪个DNS服务器来进行解析,包括主域名服务器和从域名服务器,并且将子域授权给其他机构。NS记录通常位于SOA记录后面。第9行10行NS记录紧跟在SOA记录后面,并且与SOA记录的区域名称相同,所以,可以将区域名称省略,保留为空白,NS记录不能区分主域名服务器和从域名服务器,这些需要在主配置文件named.conf中zone语句中使用type选项指定。第11行定义了子域local.baidu.com.的权威服务器。
    
第12-13行定义发往baidu.com 域的电子邮件由mail1.baidu.com和mail2.baidu.com邮件服务器负责处理,MX后面的数字决定邮件服务器的优先级,数字越小,邮件服务器的优先权越高。优先级高的邮件服务器是邮件传送的主要对象,当邮件传送给优先级高的邮件服务器失败时,可以把他传送给优先级低的邮件服务器。这两行也与SOA记录的区域名称相同,所以,可以将区域名称省略。
     
后面的几行定义了A记录,这个必须顶格写,主机地址A(Address)资源记录是最常用的记录,他定义了DNS域名对应IP地址的信息。在上面的例子中,使用了两种方式来定义A资源记录。一种是使用全限定域名FQDN,即在名称的末尾有“.”,另一种是使用相对名称,即在名称的末尾没有加“.”,bind会自动在后面加上SOA中指定的区域名称 , 另这两种方式只是书写形式不同而已,在使用上没有任何区别。

最后一行是别名CNAME资源记录也被称为规范名字资源记录。CNAME资源记录允许将多个名称映射到同一台计算机上,使得某些任务更容易执行。例如,对于同时提供mail,OA服务的计算机(IP地址为192.168.100.200),为了便于用户访问服务,可以先为其建立一条主机地址A资源记录mail,然后再为该计算机设置oa别名,即建立CNAME资源记录oa,这样,当访问mail.baidu.com和oa.baidu.com时,实际是访问IP地址为192.168.100.200这台主机。

7、反向解析区域文件
反向解析区域文件用于定义IP地址到域名的解析,它采用与正向解析文件类似的选项和格式。但由于是进行反向解析,所以该文件是使用PTR指针资源记录,而不是主机A记录。Internet上反向域名的数据存放在arpa这个顶级域名下面,arpa域有两个子域,分别为in-addr.arpa 和ip6.arpa,前者提供IPv4地址使用,后者提供IPv6地址使用。下面是一个反向解析区域文件的例子:
-------------------------------------------------
$TTL  1D
@  IN  SOA  dns1.baidu.com.  pipci.baidu.com. (
           0    ; Serial
           1D   ; Refresh
           1H   ; Retry
           1W   ; Expire
           3H ) ; Negative Cache TTL
           
   IN  NS       dns1.baidu.com.
   IN  NS       dns2.baidu.com.
100 IN PTR      www.baidu.com.
110 IN PTR      abc.baidu.com.
-------------------------------------------------
对上面的内容进行解释如下:
除了最后面两行外其他的和正向解析的解释一样,其中反向解析区域文件必须包括SOA和NS资源记录,使用固定格式的反向解析区域in-addr.arpa作为域名。结构和格式与正向解析区域数据文件类似,这里就不再重复了。最后两行对应的是zone语句中定义的区域名称为100.168.192.in-addr.arpa的区域,第1列的100对应主机ip地址为192.168.100.100,第2列是网络协议类型,绝大部分情况取值为IN,也可以省略。第3列表示记录类型为PTR记录。第4列表示服务器的全域名。
在上面的例子中,主机名www.baidu.com.必须以圆点“.”结尾,以防止bind把它当作是一个相对名称,在其后面加上默认区域名100.168.192.in-addr.arpa变成全域名。A记录和与之相对应的PTR记录相匹配很重要,不匹配或者遗漏的PTR记录会产生一些意想不到的问题。

8、区域文件中的命令
在区域文件中,除了资源记录之外,我们还可以使用一些命令。通常情况下,这些命令会影响到整个区域文件中的资源记录。在bind9中,可用的命令有4个,分别为$ORIGIN、$INCLUDE、$TTL、$GENERATE这4个,无论是那个命令,都需要从第1列开始,并且单独占据一行。下面分别对这些命令进行简单的介绍。

$ORIGIN命令
当bind程序读取区域文件时,它会将默认域追加到所有的不完整的域名(相对域名)后面。所谓默认域,是指在named.conf文件的zone语句中指定的区域名称。但是我们可以使用$ORIGIN命令在区域文件中重新指定默认域。$ORIGIN命令的基本语法如下:

$ORIGIN  dubai          #dubai为要设置的域名

通过上面的命令设置后区域文件中的默认域就设置成了dubai设置完成之后,该命令后面的所有不完整的名称都将该域作为默认域。

$INCLUDE命令
该命令用来包含外部文件,这通常用于将不同功能的代码放在各自的单独文件中。该命令的基本语法如下:

$INCLUDE  filename

当bind程序在处理数据文件时,遇到$INCLUDE命令便会在该命令出现的地方插入被包含的文件内容。

$TTL命令
该命令为后面的资源记录的ttl列提供了一个默认的值。其基本语法如下:

$TTL  default-ttl

其中default-ttl是一个时间值,如果只是指定了一个数值,那么bind会将其解释为以秒为单位的时间值。除此之外,我们还可以使用数值加单位代码的形式来表示,其中s表示秒,m表示分钟,h表示小时,d表示天,w表示周。

$GENERATE命令
这个命令用来生成一系列的类似的记录,使用较少。

七、防火墙配置
bind默认使用53端口,通常DNS是以UDP这个较快速的数据传输协议来查询,但是万一没有办法查询到完整的信息时,就会再次以TCP这个协议来重新查询。所以防火墙要同时打开TCP及UDP的port 53。或者直接关闭防火墙。


八、配置举例
配置一个区域名为baidu.com的二级域,其中有主机全名为dns1.baidu.com, dns2.baidu.com, www.baidu.com, mail.baidu.com, 的4台主机的IP地址为192.168.1.200, 192.168.1.201,192.168.1.202 ,192.168.1.203 。另为还有个三级域more.baidu.com,下面有2台主机host1.more.baidu.com和host2.more.baidu.com 对应的IP地址分别为10.10.10.10和10.10.10.11 ,这些域名都由dns1.baidu.com这台主DNS服务器解析,从服务器为dns2.baidu.com,转发服务器为114.114.114.114和114.114.114.115两个。

1、配置named.conf文件中添加include "/etc/bind/zones.rfc2019"; 内容
--------------------------------------------
root@debian:/etc/bind# vi named.conf
.....                                                                        #中间的内容省略
include "/etc/bind/zones.rfc2019";                        #增加的内容
-------------------------------------------

2、配置全局语句增加转发服务器
-------------------------------------------
root@debian:/etc/bind# vi named.conf.options
options {
    directory "/var/cache/bind";

        forward  first;                                                                            #允许转发
        forwarders { 114.114.114.114 ; 114.114.114.115 ; };              #增加的转发器

//    dnssec-validation auto;                                             #不进行dnssec确认,进行确认需要配置证书要不转发器会不好用

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };

};
-------------------------------------------

3、创建/etc/bind/zones.rfc2019文件用于增加zone语句
-------------------------------------------
root@debian:/etc/bind# touch  zones.rfc2019         #创建文件
-------------------------------------------

4、在/etc/bind/zones.rfc2019文件中添加zone语句
-------------------------------------------
root@debian:/etc/bind# vi zones.rfc2019

zone "baidu.com" {
     type master;
     allow-update {none ;} ;                             #禁止动态更新
     allow-transfer {192.168.1.201; };              #只允许192.168.1.201这台主机同步数据
     file "/etc/bind/db.baidu.com";
};

zone "1.168.192.in-addr.arpa" {
     type master;
     allow-update {none ;} ;
     allow-transfer {192.168.1.201; };
     file "/etc/bind/db.1.168.192";
};

zone "more.baidu.com" {
     type master;
     allow-update {none ;} ;
     allow-transfer {192.168.1.201; };
     file "/etc/bind/db.more.baidu.com";
};

zone "10.10.10.in-addr.arpa" {
     type master;
     allow-update {none ;} ;
     allow-transfer {192.168.1.201; };
     file "/etc/bind/db.10.10.10";
};
-------------------------------------------

5、配置正向解析区域文件/etc/bind/db.baidu.com
-------------------------------------------
root@debian:/etc/bind# vi db.baidu.com
$TTL  1D
@  IN  SOA  dns1.baidu.com.  pipci.baidu.com. (
           4    ; Serial
           1D   ; Refresh
           1H   ; Retry
           1W   ; Expire
           3H ) ; Negative Cache TTL
           
       IN  NS       dns1.baidu.com.      
       
       IN  MX   10  mail1.baidu.com
 
dns1    IN  A  192.168.1.200
dns2    IN  A  192.168.1.201
www     IN  A  192.168.1.202
mail    IN  A  192.168.1.203
-------------------------------------------

6、配置正向解析区域文件/etc/bind/db.more.baidu.com
-------------------------------------------
root@debian:/etc/bind# vi db.more.baidu.com
$TTL  1D
@  IN  SOA  dns1.baidu.com.  pipci.baidu.com. (
           2    ; Serial
           1D   ; Refresh
           1H   ; Retry
           1W   ; Expire
           3H ) ; Negative Cache TTL
           
       IN  NS       dns1.baidu.com.
       IN  NS       dns2.baidu.com.
       
       IN  MX   10  mail1.baidu.com
       
dns1    IN  A  192.168.1.200
dns2    IN  A  192.168.1.201  
host1    IN  A  10.10.10.10
host2    IN  A  10.10.10.11
-------------------------------------------

7、配置反向解析区域文件/etc/bind/db.1.168.192
-------------------------------------------
$TTL  1D
@  IN  SOA  dns1.baidu.com.  pipci.baidu.com. (
           0    ; Serial
           1D   ; Refresh
           1H   ; Retry
           1W   ; Expire
           3H ) ; Negative Cache TTL
           
   IN  NS       dns1.baidu.com.
   IN  NS       dns2.baidu.com.
   
200 IN PTR      dns1.baidu.com.
201 IN PTR      dns2.baidu.com.
202 IN PTR      www.baidu.com.
203 IN PTR      mail.baidu.com.  
-------------------------------------------

8、配置反向解析区域文件/etc/bind/db.10.10.10
-------------------------------------------
$TTL  1D
@  IN  SOA  dns1.baidu.com.  pipci.baidu.com. (
           0    ; Serial
           1D   ; Refresh
           1H   ; Retry
           1W   ; Expire
           3H ) ; Negative Cache TTL
           
   IN  NS       dns1.baidu.com.
   IN  NS       dns2.baidu.com.
   
10 IN PTR      host1.more.baidu.com.
11 IN PTR      host2.more.baidu.com.
-------------------------------------------

9、配置从服务器named.conf文件中添加include "/etc/bind/slave/zones.rfc2019"; 内容
--------------------------------------------
root@debian:/etc/bind# vi named.conf
.....                                                                              #中间的内容省略
include "/etc/bind/slave/zones.rfc2019";                    #增加的内容
-------------------------------------------

10、配置从服务器全局语句增加转发服务器
-------------------------------------------
root@debian:/etc/bind# vi named.conf.options
options {
        directory "/var/cache/bind";

        forward  first;                                                                        #允许转发
        forwarders { 114.114.114.114 ; 114.114.114.115 ; };          #增加的转发器

//       dnssec-validation auto;                                      #不进行dnssec确认,进行确认需要配置证书要不转发器会不好用

    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };

};
-------------------------------------------

11、从服务器创建/etc/bind/slave/目录同时添加zones.rfc2019文件并向文件中添加zone语句
-------------------------------------------
root@debian:/etc/bind/slave# vi zones.rfc2019  

zone "baidu.com" {
     type slave;
     file "/etc/bind/slave/db.baidu.com";
     masters { 192.168.1.200;};
};

zone "1.168.192.in-addr.arpa" {
     type slave;
     file "/etc/bind/slave/db.1.168.192";
     masters { 192.168.1.200;};
};

zone "more.baidu.com" {
     type slave;
     file "/etc/bind/slave/db.more.baidu.com";
     masters { 192.168.1.200;};
};

zone "10.10.10.in-addr.arpa" {
     type slave;
     file "/etc/bind/slave/db.10.10.10";
     masters { 192.168.1.200;};
};
-------------------------------------------

在创建/etc/bind/slave/目录后要给目录设置成775权限或目录的所有者改成bind要不会报下面的错误:
-------------------------------------------------------------------------------
dumping master file: /etc/bind/slave/tmp-kmhGU7nvGS: open: permission denied
-------------------------------------------------------------------------------
查看/etc/bind/slave/目录的属性
---------------------------------------------------
root@debian:/etc/bind# ls -l | grep slave
drwxr-sr-x 2 root bind 4096 3月   5 17:18 slave
root@debian:/etc/bind#
---------------------------------------------------
这个错误就是bind软件没有对/etc/bind/slave/目录具有写的权限,所以可以通过更改目录权限或更改目录所有者来解决。

从服务器也可以向客户机提供域名解析功能。但它与主域服务器不同的是,它的数据不是直接输入的,而是从其它DNS服务器(主域服务器或其它的从服务器)中复制过来的,只是一份副本,从服务器中的数据不能被修改。当启动从服务器时,它会和指定的主服务器建立联系,并从中复制数据。在从服务器工作时,会定期的更改原有数据保持和主服务器数据一致。从服务器也需要设置服务器的options主语句和根区域,方法与配置主域服务器的方法相同。但在配置区域时,只需要提供区域名和主域服务器的ip地址,而不需要建立相应的区域文件。因为一个从服务器不需要在本地建立各种资源记录,而是通过一个区域复制过程来得到主域上资源记录。

九、DNS的正、反解查询命令:nslookup

nslookup 命令格式如下:

root@debian:~# nslookup [FQDN] [server]

选项与参数:
nslookup命令有两种模式,分别为非交互式和交互式,非交互式可以直接在nslookup命令后面加上要查询的主机名或者IP。[server]选项可有可无,当想利用非/etc/resolv.conf文件中列出的DNS服务器来查询主机名与ip的对应关系时,就可以利用这个参数。
交互式是在nslookup命令后面不加任何主机名或ip直接回车,那么将进入nslookup命令的查询功能提示符。

举例:
1、通过非交互模式查询www.baidu.com的ip信息
-----------------------------------------------
root@debian:~# nslookup www.baidu.com.
Server:     192.168.1.200
Address:    192.168.1.200#53       #查询的DNS地址,为上面例子中自定义的DNS服务器

Name:   www.baidu.com
Address: 192.168.1.202            #返回的ip地址
-----------------------------------------------

2、通过非交互模式查询www.baidu.com的ip信息,DNS指定为114.114.114.114进行查询
-----------------------------------------------
root@debian:~# nslookup www.baidu.com 114.114.114.114
Server:     114.114.114.114
Address:    114.114.114.114#53      #查询的DNS地址

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com            #别名
Address: 111.13.100.91              #返回的ip地址,这个是百度域名真实的地址
Name:   www.a.shifen.com
Address: 111.13.100.92
-----------------------------------------------

3、通过非交互模式反向查询
-----------------------------------------------
root@debian:~# nslookup  192.168.1.202
Server:     192.168.1.200
Address:    192.168.1.200#53

202.1.168.192.in-addr.arpa  name = www.baidu.com.     #ip对应的域名
-----------------------------------------------

4、交互式模式查询www.baidu.com的ip信息
-----------------------------------------------
root@debian:~# nslookup       #进入交互模式
> www.baidu.com                  #执行正解查询
Server:     192.168.1.200
Address:    192.168.1.200#53

Name:    www.baidu.com
Address: 192.168.1.202
> 192.168.1.200                   #执行反解查询
Server:     192.168.1.200
Address:    192.168.1.200#53

200.1.168.192.in-addr.arpa    name = dns1.baidu.com.
> exit                            #退出交换模式
-----------------------------------------------

十、DNS的正、反解查询命令:dig
dig的命令格式如下:

root@debian:~# dig [options] FQDN [@server]
选项与参数:
[@server]选项可有可无,当想利用非/etc/resolv.conf文件中列出的DNS服务器来查询主机名与ip的对应关系时,就可以利用这个参数。
[options]相关的参数有很多,常用的为-t  -x
-t  type:type为查询的类型主要有MX、NS、SOA等类型
-x      :查询反解信息

举例:
1、查询www.baidu.com的ip信息
-----------------------------------------------
root@debian:~# dig www.baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24758
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.        IN   A

;; ANSWER SECTION:
www.baidu.com.    86400   IN    A    192.168.1.202          #返回的ip地址

;; AUTHORITY SECTION:
baidu.com.     86400    IN    NS    dns1.baidu.com.        

;; ADDITIONAL SECTION:
dns1.baidu.com.     86400     IN    A     192.168.1.200     

;; Query time: 1 msec
;; SERVER: 192.168.1.200#53(192.168.0.20)       #提供解析的DNS服务器的ip地址
;; WHEN: 五 3月 01 23:27:31 CST 2019            #查询的时间
;; MSG SIZE  rcvd: 93
-----------------------------------------------

2、查询www.baidu.com的ip信息,DNS指定为114.114.114.114进行查询
-----------------------------------------------
root@debian:~# dig www.baidu.com  @114.114.114.114

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> www.baidu.com @114.114.114.114
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27259
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
www.baidu.com.   1071   IN   CNAME   www.a.shifen.com.      #别名
www.a.shifen.com.   98  IN  A   111.13.100.91               #返回的ip地址
www.a.shifen.com.   98  IN  A   111.13.100.92

;; Query time: 5 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)              #提供解析的DNS服务器的ip地址
;; WHEN: 五 3月 01 23:35:58 CST 2019                         #查询的时间
;; MSG SIZE  rcvd: 90
-----------------------------------------------

3、通过非交互模式反向查询
-----------------------------------------------
root@debian:~# dig -x 192.168.1.202

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -x 192.168.1.202
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33839
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;202.1.168.192.in-addr.arpa.   IN   PTR

;; ANSWER SECTION:
202.1.168.192.in-addr.arpa. 86400 IN   PTR   www.baidu.com.

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400   IN  NS  dns2.baidu.com.
1.168.192.in-addr.arpa. 86400   IN  NS  dns1.baidu.com.

;; ADDITIONAL SECTION:
dns1.baidu.com.     86400   IN  A   192.168.1.200
dns2.baidu.com.     86400   IN  A   192.168.1.201

;; Query time: 0 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: 五 3月 01 23:40:17 CST 2019
;; MSG SIZE  rcvd: 152
-----------------------------------------------

4、查询www.baidu.com的SOA的相关信息。
-----------------------------------------------
root@debian:~# dig -t soa  www.baidu.com  

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -t soa www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34452
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.       IN  SOA

;; AUTHORITY SECTION:       #下面是soa相关信息
baidu.com.      10800   IN  SOA dns1.baidu.com. pipci.baidu.com. 4 86400 3600 604800 10800     

;; Query time: 0 msec
;; SERVER: 192.168.0.20#53(192.168.0.20)
;; WHEN: 五 3月 01 23:45:38 CST 2019
;; MSG SIZE  rcvd: 89
-----------------------------------------------


posted @ 2019-03-05 17:44  pipci  阅读(5298)  评论(0编辑  收藏  举报