一、DNS服务

1、资源记录

1)区域解析库:由众多RR组成:

资源记录:RRResource Record

记录类型:A, AAAA, PTR,SOA, NS, CNAME, MX

·SOAStart Of Authority,起始授权记录,表明谁是主DNS服务器;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

·Ainternet Address,作用:FQDN--> IP

·AAAA: FQDN--> IPv6

·PTR:PoinTeR,作用:IP --> FQDN

·NS: Name Server,专用于标明当前区域的DNS服务器名字

       NS记录还必须配合一个A记录,将NS中的名字解析成地址

wKiom1nhvLSz_2QzAABLAcNsurI618.png

·CNAMECanonical Name,别名记录

·MX: Mail eXchanger,邮件交换器

 

2)资源记录定义的格式

语法:name [TTL] IN  rr_type  value 无论什么记录都由5项内容组成

       name:名称

       TTL:缓存的生命期(单位为秒)

       IN:固定写法(也可以不写)

       rr_type:类型

       value:值

注意:

   1) TTL可从全局继承

   2) @可用于引用当前区域的名字

   3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应

   4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

 

3SOA记录

·name: 当前区域的名字,例如“magedu.com.”,也可以用@表示,代表当前区域的名字。

·value: 有多部分组成

   1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;

   2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com

   3) 主从服务区域传输相关定义以及否定的答案的统一的TTL

·例如:

magedu.com.  86400  IN  SOA  ns.magedu.com.  nsadmin.magedu.com.  (

2015042201    ;序列号

2H                   ;刷新时间

10M                ;重试时间

1W                  ;过期时间

1D                   ;否定答案的TTL

)

ns.magedu.com.:主DNS服务器名称(也可以写成ns,它会自动把后面的.magedu.com补全。如果要全写的话一定不要忘记com后有个点。ns这个名字随便起的,在下面要搭配一个A记录指向它的地址)

nsadmin.magedu.com.:管理员邮箱地址,当DNS出故障了,就会联系这个邮箱(邮箱地址不能包含@,因为在这个文件中@是有它的含义的,如果想写@就改成.即可,即这个邮箱地址本来为[email protected]

序列号(最多10位):我们知道为了容错,可以搭建两个DNS服务器,一个主一个从,它们需要同步数据库,同步的时候就看这个序列号,如果两个人一样,就认为数据库一样,如果从的数据库比主的小,就说明主发生了改变,就需要同步一下。因此,如果我们改了主的数据库,要记得认为的将这个数字改大一些,这样从的服务器才知道你改了,然后去同步你的数据。

刷新时间:每隔多长时间,从会去主那里看看数据是否发生改变。

重试时间:如果在之前刷新的时候刚好遇到问题(比如网络连接失败)导致没有刷新成功,那么隔这个重试时间后就会再刷新一遍。

过期时间:如果从一直不能同步,多长时间从的数据库过期

否定答案的TTL值:数据库里没有的对应数据被一个用户问过一次之后它也会缓存下来,如果再有用户问就直接从缓存里告诉他没有。这个缓存也有生命期,就是这个值。

 

4NS记录

·name: 当前区域的名字

·value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.

·注意:一个区域可以有多个NS记录

例如:

magedu.com. IN NS ns1.magedu.com.

magedu.com. IN NS ns2.magedu.com.

·注意:

1) 相邻的两个资源记录的name相同时,后续的可省略

2) NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

 

5MX记录(发邮件)

·name: 当前区域的名字

·value: 当前区域的某邮件服务器(smtp服务器)的主机名

·一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高

·例如:

magedu.com. IN  MX 10 mx1.magedu.com.

    IN  MX 20 mx2.magedu.com.

·注意:

1) MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

 

6A记录

·name: 某主机的FQDN,例如www.magedu.com.

       如果你就是专门给magedu.com域配的数据库,名字那直接写www即可,后面会自动给你补上

·value: 主机名对应主机的IP地址

·例如:

www.magedu.com.  IN A  1.1.1.1

www.magedu.com.  IN  A  2.2.2.2

mx1.magedu.com.   IN  A  3.3.3.3

mx2.magedu.com.   IN  A  4.4.4.4

 

$GENERATE 1-254HOST$ A 1.2.3.$

       上面的意思就是下面这1-254条记录,只不过用变量的方式表示了。

       HOST1 A  1.2.3.1

       HOST2 A  1.2.3.2

       HOST3 A  1.2.3.3

               ……

       HOST253 A  1.2.3.253

       HOST254 A  1.2.3.254

 

*.magedu.com.  IN A  5.5.5.5

magedu.com.IN  A 6.6.6.6

·避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

 

7)其它记录

·AAAA:

name: FQDN

value: IPv6

·PTR:

name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.

value: FQDN

·例如:

4.3.2.1.in-addr.arpa.IN PTR www.magedu.com.1.2.3为网络地址,可简写成:

4  IN PTR  www.magedu.com.

·注意:网络地址及后缀可省略;主机地址依然需要反着写

 

8)别名记录

CNAME

name: 别名的FQDN

value: 真正名字的FQDN

例如:wKiom1nhvLei4V9DAADD7raG16Y666.png

因为有些大型网站访问的人太多,于是它在全国各地都有服务器,于是需要通过别名对应的服务器解析出哪个服务器离你最近然后返回给你最近的IP

 

9)子域

·子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权

·类似根域授权tld

.com. IN  NS ns1.com.

.com. IN  NS ns2.com.

ns1.com.  IN A  2.2.2.1

ns2.com.  IN A  2.2.2.2

·magedu.com. .com的名称服务器上,解析库中添加资源记录

magedu.com.  IN NS  ns1.magedu.com.

magedu.com.  IN NS  ns2.magedu.com.

magedu.com.  IN NS  ns3.magedu.com.

ns1.magedu.com.  IN A  3.3.3.1

ns2.magedu.com.  IN A  3.3.3.2

ns3.magedu.com.  IN A  3.3.3.3

·glue record:粘合记录,父域授权子域的记录

 


二、DNS资源配置

1BIND安装与配置

BIND的安装配置:

dns服务程序包:bind(常用),unbound(较新,不常用)

程序名:namedunbound

程序包:yum list allbind*

bind:服务器

bind-libs:相关库

bind-utils:客户端

bind-chroot: /var/named/chroot/ DNS很多相关文件迁移到一个比较深的文件夹

BIND使用53端口,当我们将软件包安装上然后启动服务,就会自动打开53端口。

 

1现在我们来安装一下Bind

wKiom1nhvLrDDJbcAAA_5nZHTNI129.png

在这个服务安装完之后,会自动创建一个叫named的用户:

DNS服务_第1张图片

这个创建的过程是写在安装脚本中的wKiom1nhvLrha3BaAADDFXExbeY738.png

在启动之前使用ss -nutl查询,没有53端口

然后我们启动服务,53端口开启:

DNS服务_第2张图片

同样,在6中打开服务:wKiom1nhv7awktLhAABHlyvHdEU663.png

也会开启53端口。

tcp53端口不打开会导致无法传输区域数据库,从DNS就无法进行数据复制了。udp53端口不打开会导致无法使用dig查询,也会影响数据复制。

所以一定要注意这两个端口一定要在防火墙上打开。

 

2安装完BIND之后,它就可以当DNS服务器了,如果客户端想使用这个DNS服务器,那就将DNS地址指向服务器。192.168.37.107就是我们刚才安装了BIND的机器。

所以我们配置一下客户端(192.168.37.101)的DNS为服务器端地址:192.168.37.107

DNS服务_第3张图片

然后重启生效:wKiom1nhv7nQq58JAACWkppNmak542.png

3)我们之前说过,DNS安装完之后就会知道13个根的位置,它之所以知道,是根据一个文件中记录的,我们使用rpm -ql bind查看安装服务其实生成的文件列表

DNS服务_第4张图片

找到一个叫named.ca的文件

查看内容,发现里面记录了13个根对应的地址

DNS服务_第5张图片

am,一共13个。

 

4我们现在有DNS服务器了,而且也将客户端的DNS对应地址改成服务器端地址了,但是现在还是不能使用,因为我们的53端口目前绑定了自己,只能给自己用,我们应该修改它。DNS服务_第6张图片

编辑/etc/named.conf文件,这是DNS的主配置文件DNS服务_第7张图片

wKiom1nhwLqjHDSlAACNoQz2Qv8525.png

我们将port 53这行后面的地址改为localhost,表示本机的所有IP,这样,无论什么IP都能访问了。

wKiom1nhwLrx7UfXAAA1W9Cv-vE004.png

改完保存然后使用systemctl reload named重启服务。

然后就可以连接了。

DNS服务_第8张图片

使用telent测试一下可以连接。

 

5)但是现在客户端仍然无法使用这个DNS服务器,因为我们发现这个DNS服务器在访问网站的时候都不使用它自己,而是去问别人的DNS服务器,DNS服务_第9张图片

我们去把它改成改成自己的IP

wKiom1nhwVqg2WtUAAAq7X6P-aE038.png

重启服务并ping一下网站,发现可以pingwKioL1nhvqSjjX3zAADktUX2ckU555.png

也就是说,它现在作为一个DNS服务器是有效果的,自己能解析。

但是客户端现在并不能使用这个DNS解析:

wKiom1nhwVqwa5pBAABAanXYz8A045.png

因为默认情况下DNS服务器只能给自己提供服务。

所以我们还需要更改一下配置文件:

DNS服务_第10张图片

所以我们应该修改这一项,可以加一个192.168.37的网段,也可以改成any

wKiom1nhwvCDpHqkAAAeqiIBSDE719.png

这样任何人都能查询了。

wKiom1nhwxaiPko8AAApuDnI8mQ117.png

这样我们使用客户端访问网站:

wKioL1nhwIDj5lqcAAEH39E3ASE483.png

DNS搭建成功。


6)排错

DNS服务_第11张图片

其实刚才这两行也可以不做具体的修改,直接使用//将这两行注释掉即可,也相当于改成了any

为了防止改错,我们有一个检查错误的命令named-checkconf可以检查配置文件的正确性

wKiom1nhw36DT5AOAABD3TLY_50828.png

比如我们故意删掉一个分号

wKioL1nhwMiz0ZpUAAA5z5FT8FA929.png

图为提示有错误,提示错误在第19行在}前少了个;

wKioL1nhwMjRhM4CAAARIVyzs4g186.png

我们添加回来

wKiom1nhw37x3pqpAAAioPeGrms251.png

显示没有错误了。