Linux部署DNS服务器

2020-07-23 11:22:29 浏览数 (1)

DNS服务简介:

DNS(Domain Name System–域名系统),是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。是一个应用层的协议DNS使用TCP和UDP端口53。 DNS是一个分布式数据库,命名系统采用层次的逻辑结构,如同一颗倒置的树,这个逻辑的树形结构称为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息. DNS(Domain Name Service) 域名解析服务,就是将域名和 ip 之间做相应的转换,利用 TCP 和 UDP 的53号端口。DNS默认端口是53的TCP和UPD,UDP是供用户查询的,主从复制用TCP和UDP的53端口都用。

注:DNS域名空间中,树的最大深度不得超过127层,树中每个节点最长可以存储63个字符.

DNS名词解释:

1. 域和域名

DNS树的每个节点代表一个域.通过这些节点,对整个域名空间进行划分,成为一个层次结构. 域名空间的每个域的名字,通过域名进行表示. 域名:通常由一个完全合格域名(FQDN)标识.FQDN能准确表示出其相对于DNS 域树根的位置,也就是节点到DNS 树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS 域google 来说,其完全正式域名(FQDN)为google.com. 例如:google为com域的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示

注意:通常,FQDN 有严格的命名限制,长度不能超过256 字节,只允许使用字符a-z,0-9,A-Z和减号(-).点号(.)只允许在域名标志之间(例如“google.com”)或者FQDN 的结尾使用.

域名不区分大小. 由最顶层到下层,可以分成:根域、顶级域、二级域、子域. Internet 域名空间的最顶层是根域(root),其记录着Internet 的重要DNS 信息,由Internet域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到Internet 的各个组织.

“.”全球有13个根(root)服务器 DNS 根域下面是顶级域,也由Internet 域名注册授权机构管理.共有3 种类型的顶级域. 组织域:采用3 个字符的代号,表示DNS 域中所包含的组织的主要功能或活动.比如com 为商业机构组织,edu 为教育机构组织,gov 为政府机构组织,mil 为军事机构组织,net 为网络机构组织,org 为非营利机构组织,int 为国际机构组织.

地址域:采用两个字符的国家或地区代号.如cn 为中国,kr 为韩国,us 为美国.

反向域:这是个特殊域,名字为in-addr.arpa,用于将IP 地址映射到名字(反向查询).

对于顶级域的下级域,Internet 域名注册授权机构授权给Internet 的各种组织.当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配域中主机名与IP 地址的映射信息.

2、区(Zone):

区是DNS 名称空间的一部分,其包含了一组存储在DNS 服务器上的资源记录. 使用区的概念,DNS 服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器.

3.主域名服务器和辅助域名服务器:

当区的辅助服务器启动时,它与该区的主控服务器进行连接并启动一次区传输,区辅助服务器定期与区主控服务器通信,查看区数据是否改变.如果改变了,它就启动一次数据更新传输.每个区必须有主服务器,另外每个区至少要有一台辅助服务器,否则如果该区的主服务器崩溃了,就无法解析该区的名称. 辅助服务器的优点:

  1. 容错能力 配置辅助服务器后,在该区主服务器崩溃的情况下,客户机仍能解析该区的名称.一般把区的主服务器和区的辅助服务器安装在不同子网上,这样如果到一个子网的连接中断,DNS 客户机还能直接查询另一个子网上的名称服务器.
  2. 减少广域链路的通信量 如果某个区在远程有大量客户机,用户就可以在远程添加该区的辅助服务器,并把远程的客户机配置成先查询这些服务器,这样就能防止远程客户机通过慢速链路通信来进行DNS 查询.
  3. 减轻主服务器的负载 辅助服务器能回答该区的查询,从而减少该区主服务器必须回答的查询数

主-辅DNS服务器

代码语言:javascript复制
主DSN服务器:维护所负责的域数据库的那个服务器;读写操作均可执行;
辅DNS服务器:从主DNS服务器哪里或者其他DNS服务器哪里"复制"一份解析库,但是只能进行读操作
    "复制"操作的实施方式:
        序列号:也是数据库的版本号,主服务器数据库内容发送变化是,其版本递增
        刷新时间间隔:refresh,辅服务器每隔多久到主服务器检查序列号更新状况;
        重试时间间隔:retry,辅服务器从主服务器请求同步解析库失败时,再次发起尝试请求时间的间隔
        过期时长:expire,辅服务器一直连接不到主服务器时,多久之后放弃从主服务器同步数据;辅服务器停止服务
        否定答案的缓存时长
        
   主服务器"通知"辅服务器随时更新数据
       全量传送:axfr,传送整个数据库
       增量传送:ixfr,仅仅传送变量的数据
4、DNS两种查询方式:

递归查询: 递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机.如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机. 迭代查询: DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止.

DNS工作原理:查询过程

假设www.abc.com的主机要查询www.xyz.abc.com的服务器ip地址。

递归查询: 第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址 hosts文件:以静态映射的方式提供IP地址与主机名的对照表,类似ARP表 域:abc.com是一个域,它可以划分为多个区域,如abc.com和xyz.abc.com 第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找 第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的DNS服务器查询 第四步:‘根DNS服务器’根据查询域名中的‘xyz.com’,再向xyz.com的区域服务器查询 第五步:www.xyz.abc.com的DNS服务器直接解析该域名,将查询到的ip再原路返回给请求查询的主机

迭代查询 第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址 第二步:上一步无法找到,在DNS本地服务器(即域服务器)查找所有本层次的区域服务器 第三步:本地DNS服务器查不到就查询上一层次的所有区域服务器,以此类推直至根域名DNS服务器‘.’ 第四步:到达根域名服务器后又向下查询,直至查到结果为止。

迭代查询与递归查询结合 递归查询需要经过逐层查询才能获得查询结果,当查询具有许多层次的DNS结构时效率很低,所以一般采用两者相结合的查询方式。 第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址 第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找 第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的根DNS服务器查询 第四步:根DNS服务器直接将其区域DNS服务器的ip地址返回给本地服务器,而不用再向xyz.com的区域服务器查询。 第五步:本地DNS服务器将结果返回给请求的主机

DNS资源记录:

A 资源记录(正向解析记录): A记录是用来创建到IP地址的记录,A记录(Address)是用来指定主机名(或域名)对应的IP地址记录,用户可以将该域名下的网站服务器指向到自己的web server。同时也可也设置域名的子域名。通俗的来说A记录就是服务器IP。域名绑定A记录就是告诉DNS当你输入域名的时候给你引导向设置DNS的A记录的服务器。A记录是IPV4的

AAAA资源记录: AAAA资源记录就是IPV6的。过程和A记录一样

NS 资源记录: NS(Name Server)记录是域名服务器记录,用来指定该域名由那个DNS服务器来进行解析。您注册域名时,总有默认的DNS服务器,每个注册的域名都是一个DNS域名服务器来进行解析的。DNS服务器NS记录地址一般用一下形式出现:ns1.domain.com、ns2.domain.com。简单的说NS记录是指定由那个DNS服务器解析你的域名

MX 资源记录: MX(Mail Exchanger)记录是邮件交换记录,它指向一个邮件,用于电子邮件系统发邮件时根据收信人的地址后缀来定义邮件服务器。例如:Internet上的某个用户要发一封邮件给user@mydomain.com,该用户的邮箱系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在,用户计算机就将邮件发送到MX记录所指定的邮件服务器上

CNAME资源记录: CNAME(Canonical Name) 别名记录,运行您将多个名字映射到同一台计算机,通常用于同时提供www和mail服务的计算机。例如:有一台计算机名为“host.mydomain.com”(A记录),它同时提供WWW和mail服务。为了便于用户访问服务。可以为该计算机设置两个别名(CNAME),这两个别名全称是“www.mydomain.com”和“mail.mydomain.com”。实际上访问的都是"host.mydomain.com"

TXT资源记录: 一般指某个域名的说明,如:admin IN TXT "管理员,电话:xxxxxxx,",mail IN TXT "邮件主机,存放在xxxx,管理员:xxx"。TXT的应用之一,SPF(Sender Policy Framework)反垃圾邮件。SPF是跟DNS相关的一项技术,它的内容写在DNS的TXT类型的记录里面。MX记录的作用是寄信者指明某个域名的邮件服务器有哪些,SPF的作用跟MX相反,它向收信者表明,那些邮件服务器是经过某个域名认可会发送邮件的。SPF的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。例如:当邮件服务器收到自称发件人是spam@gmail.com的邮件,那么到底它是不是gmail.com的邮件服务器发送的,我没可以查询gmail.com的SPF记录以防止伪造发送邮件

PTR 资源记录(反向解析记录): PTR(pointer)的简写,用于将一个IP地址映射到对应的域名,也可也看作是A记录的反向,IP地址的反向解析。PTR主要用于邮件服务器,比如邮件AAA@yahoo.com给邮箱BBB@yahoo.com发送了一封邮件,yahoo邮件服务器接到邮件时会查看这封邮件的头文件,并分析是由那个IP地址发来的,然后根据这个IP地址进行反向解析,如果解析结果对应yahoo.com的IP地址就接受这封邮件,反之拒绝

资源定义的格式:

代码语言:javascript复制
语法: name [TTL] IN  RR_TYPE  value

注意:(1) TTL可从全局继承  (2) @可用于引用当前区域的名字   (3) 同一个名字可以通过多条记录定义多个不同的值;此时 DNS服务器会以轮询方式响应   (4) 同一个值也可能有多个不同的定义名字;通过多个不同的 名字指向同一个值进行定义;此仅表示通过多个不同的名字 可以找到同一个主机

SOA:

  • name:当前区域的名字;例如 "baidu.com",或者"2.3.4.in-addr.arpa.";
  • value:多部分组成 例如:
代码语言:javascript复制
baidu.com.      86422    IN    SOA  baidu.com.   admin.baidu.com(
    20200601    ;serlal  <===序列值
    2H          ;refresh <===刷新时间
    10M         ;retry   <===重试时间
    1W          ;expire  <===过期时间
    1D          ;negative answer ttl <===否定答案的TTL
)
  1. 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
  2. 当前区域管理员的邮箱地址;地址中不能使用@符号,一般用.替换 如linuxedu.heiye.com
  3. 主从服务区域传输相关定义以及否定的答案的统一的TTL

NS:

  • name:当前区域的区域名称
  • value:当前区域的某DNS服务器的名字,例如ns.baidu.com.; 例如:
代码语言:javascript复制
baidu.com.         86422    IN    NS   ns1.baidu.com.
baidu.com.         86422    IN    NS   ns2.baidu.com.
  1. 相邻的两个资源记录的name相同时,后续的可省略
  2. 对NS记录而言,任何一个ns记录后面的服务器名字 ,都应该在后续有一个A记录

MX:

  • name:当前区域的名称
  • value:当前区域某邮件交换器的主机名称 例如:
代码语言:javascript复制
baidu.com.             IN    MX  10   mx1.baidu.com.
baidu.com.             IN    MX  20   mx1.baidu.com.
  1. 对MX记录而言,任何一个MX记录后面的服务器名字 ,都应该在后续有一个A记录

A:

  • name:某FQDN,例如www.baidu.com.
  • value:某IPV4地址 例如:
代码语言:javascript复制
      www.heiye.com.   IN   A   1.1.1.1   
      www.heiye.com.   IN   A   2.2.2.2   
      mx1.heiye.com.   IN    A   3.3.3.3
      mx2.heiye.com.     IN    A   4.4.4.4
      *.heiye.com.    IN    A   5.5.5.5
      heiye.com.     IN    A    6.6.6.6

AAAA:

  • name:某FQDN,例如www.baidu.com.
  • value:某IPV6地址

PTR:

  • name:IP地址,有特定格式,IP反过来写,而且加特定后缀,例如1.2.3.4记录应该写4.3.2.1.in-addr.arpa.
  • value:FQND
代码语言:javascript复制
例如:
    4.3.2.1.in-addr.arpa.   IN   PRT    www.baidu.com.

CNAME:

  • name:FQDN格式的别名
  • value:FQDN格式的正式名字
代码语言:javascript复制
例如:
    web.baidu.com.       IN      CNAME    www.baidu.com.
代码语言:javascript复制
named字段:

    (1)根域以” . “结束,并且只有一个,没有上级域。而在Internet中,根域一般不需要表现出来。

    (2)@:默认域,文件使用$ORIGIN domain 来说明默认域。

    (3)ttl 全称”Time to Live “,以秒为单位记录该资源记录中存放高速缓存中的时间长度。通常此处设为空,表示采用SOA的最小ttl值。

    (4)IN:将该记录标志为一个Internet DNS资源记录。

type字段:

    (1)A记录:主机名对应的IP地址记录,用户可将该域名下网站服务器指向自己的Web服务器,同时也可设置域名的二级域名。

    (2)MX记录:邮件交换记录可将该域下所有邮件服务器 指向自己的邮件服务器,只需在线填写服务器的IP地址。

    (3)CNAME记录:别名记录,可允许多个名字映射到同一计算机,通常用于同时提供Web和邮件服务器的计算机。

    (4)SOA记录:一个授权区的开始,配置文件的第一个记录必须是SOA的开始。

    (5)PTR记录:用于地址到主机名的映射。

    (6)HINFO记录:由一组描述主机的信息文件组成,通常包括硬件名称和操作系统名称。

value字段:

    (1)A :存放IP地址。

    (2)CNAME:设置主机别名。

    (3)HINFO:通常为两行,分别对应Hareware(计算机硬件名称)和OS-type(操作系统名称)。

    (4)NS:域名服务器的名称。

    (5)PTR:主机真实名称。

测试检查配置文件错误的工具:nslookup、dig、named-checkzone、host、named-checkconf及dlint。

DNS正、反查询命令使用

测试DNS程序的工具很多,不过比较常用的有host、nslookup、dig

host

代码语言:javascript复制
[root@localhost]# host [-a] FQDN [server]
[root@localhost]# host -l domain [server]
参数:
    -a:代表列出该主机所有相关信息,包括IP,TTL和排错信息
    
    
[root@localhost]# host -a www.jen.com
Trying "www.jen.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16403
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.jen.com.                   IN      ANY

;; ANSWER SECTION:
www.jen.com.            86400   IN      A       192.168.1.132

;; AUTHORITY SECTION:
jen.com.                86400   IN      NS      ns.jen.com.

;; ADDITIONAL SECTION:
ns.jen.com.             86400   IN      A       192.168.1.132

Received 78 bytes from 192.168.8.132#53 in 0 ms

nslookup

代码语言:javascript复制
[root@localhost] nslookup [FQDN] [server]
nslookup加上带查询的主机名或者域名。也可以指定资源记录
[root@localhost /]# nslookup -qt=A baidu.com
*** Invalid option: qt=A
Server:         192.168.1.1
Address:        192.168.1.1#53

Name:   baidu.com
Address: 39.156.69.79

如果nslookup不带主机或者域名的话会进入交互模式
[root@localhost /]# nslookup
> www.jen.com
Server:         192.168.8.132
Address:        192.168.8.132#53

Name:   www.jen.com
Address: 192.168.1.132
> mx1.jen.com
Server:         192.168.8.132
Address:        192.168.8.132#53

Name:   mx1.jen.com
Address: 192.168.1.133
> bbs.jen.com
Server:         192.168.8.132
Address:        192.168.8.132#53

bbs.jen.com     canonical name = www.jen.com.
Name:   www.jen.com
Address: 192.168.1.132
> exit

dig

代码语言:javascript复制
[root@localhost /]# dig [options] FQDN [@server]
参数:
    @server:如果不以/etc/resolv.conf来设置DNS查询的话,可以在这里填入其他IP
option:
     trace:就是追踪DNS查询
     recures:进行递归解析
    -t type :主要查询数据有 MX,NS,SOA等
    -x:查询反向解析
    -t axfr DOMAIN [@server]:模拟完全区域传送

Linux下DNS服务器安装

代码语言:javascript复制
yum  -y  install  bind*   安装bind组件
systemctl start named     启动dns服务
systemctl enable named    设置dns服务开机启动

相关的配置文件:

  • /etc/named.conf:主配置文件
  • /var/named/named.ca:根域名配置服务器指向文件
  • /var/named/named.loopback:localhost区反向解析文件
  • /var/named/named.localhost:localhost区正向解析文件
  • /etc/named.rfc1912.zones:区块设置文件
  • /var/named/named.ca:根域名配置服务器指向文件

配置DNS服务器

配置DNS正向解析:

在配置Bind服务时,主要用到以下三个配置文件:

  • 主配置文件(/etc/named.conf):用来定义bind服务程序的运行。
  • 区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
  • 数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件。

编辑著配置文件/etc/named.conf

代码语言:javascript复制
options {
        listen-on port 53 { any; }; <===*
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named"; <===数据库存放位置
        dump-file       "/var/named/data/cache_dump.db"; <===一些统计信息
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        //下面一行表示允许哪些主机查询,改成any表示所有
       allow-query     { any; };  <===*
       //下面一行表示是否允许递归查询.
       recursion yes;
       dnssec-enable yes;
        dnssec-validation yes;

*号位置是主要修改,将监听地址和运行查询的地址都改为 any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。 listen-on port 53 { any; };

表示监听这台系统上面那个网络接口,默认是localhost,即只有本机可以对DNS服务进行查询,需要把它修改为any。 allow-query { any; };

这个是针对客户端的设置,表示到的谁可以对我的DNS服务提出查询请求。源文件是localhost的,需要将其修改为any。

修改区域配置文件(/etc/named.rfc1912.zones)

代码语言:javascript复制
定义区域格式
在著配置文件中或者主配置文件辅助配置文件中实现:

    zone "ZONE_NAME" IN {
            type {master|slave|hint|forward};
            file "ZONE_NAME.zone";
    };
    
    
    这里我定义一个正向区域
    zone "jen.com" IN {
            type master;
            file "jen.com.zone";
    };

用来保存域名和IP地址对应关系的所在位置。在这个文件中,定义了域名与IP地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP地址对应关系等信息。服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器。

编辑数据配置文件:从/var/named目录中复制一份正向解析的模板文件(named.localhost),并且改名为jen.com.zone

代码语言:javascript复制
[root@localhost named]# cp -a named.localhost  jen.com.zone
[root@localhost named]# vim jen.com.zone
$TTL 1D
$ORIGIN jen.com.
@       IN SOA  ns.jen.com. dnsadmin.jen.com. (
                                 20200601       ; serial #更新序列号
                                        1D      ; refresh #更新时间
                                        1H      ; retry #重试时间
                                        1W      ; expire #失效时间
                                        3H )    ; minimum #无效解析记录的缓存时间
        NS      ns
        MX   10 mx1
        MX   20 mx2
ns      A       192.168.8.132 #地址记录
www     A       192.168.8.132 #www站点记录
mail    A       192.168.8.132
mx1     A       192.168.8.133
mx2     A       192.168.8.134
web     CNAME   www  #别名记录
bbs     CNAME   www
blog    CNAME   www

最后使用检查语法来测试有没有编写配置文件错误

代码语言:javascript复制
named-checkzone ZONE_NAME ZONE_FILE  <===检查zone文件是否有错误
named-checkconf                      <===检查conf文件是否有错误
[root@localhost named]# named-checkconf
[root@localhost named]#
[root@localhost named]# named-checkzone jen.com /var/named/jen.com.zom
zone jen.com/IN: loaded serial 20200601
OK
[root@localhost ~]# vim /etc/resolv.conf
#进入该配置文件,指定使用的域名解析服务器。
    # Generated by NetworkManager
    nameserver 192.168.8.132
    search 192.168.8.132

使用dig进行查询。完成测试

代码语言:javascript复制
[root@localhost /]# dig -t ns jen.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -t ns jen.com
;; global options:  cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23526
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jen.com.                       IN      NS

;; ANSWER SECTION:
jen.com.                86400   IN      NS      ns.jen.com.

;; ADDITIONAL SECTION:
ns.jen.com.             86400   IN      A       192.168.1.132

[root@localhost /]# dig -t mx jen.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -t mx jen.com
;; global options:  cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48472
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 4

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jen.com.                       IN      MX

;; ANSWER SECTION:
jen.com.                86400   IN      MX      10 mx1.jen.com.
jen.com.                86400   IN      MX      20 mx2.jen.com.

;; AUTHORITY SECTION:
jen.com.                86400   IN      NS      ns.jen.com.

;; ADDITIONAL SECTION:
mx1.jen.com.            86400   IN      A       192.168.1.133
mx2.jen.com.            86400   IN      A       192.168.1.134
ns.jen.com.             86400   IN      A       192.168.1.132

使用nslookup进行查询

代码语言:javascript复制
[root@localhost /]# nslookup
> www.jen.com
Server:         192.168.8.132
Address:        192.168.8.132#53

Name:   www.jen.com
Address: 192.168.1.132
> mx1.jen.com
Server:         192.168.8.132
Address:        192.168.8.132#53

Name:   mx1.jen.com
Address: 192.168.1.133
> bbs.jen.com
Server:         192.168.8.132
Address:        192.168.8.132#53

bbs.jen.com     canonical name = www.jen.com.
Name:   www.jen.com
Address: 192.168.1.132

配置DNS反向解析:

配置区域文件。

反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。

代码语言:javascript复制
[root@localhost /]# vim /etc/named.rfc1912.zones
zone "8.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.8.zone";
};

编辑数据配置文件。 反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。

代码语言:javascript复制

#把named.loopback辅助成192.168.8.zone
cp -a /var/named/named.loopback /var/named/192.168.8.zone

$TTL 1D
@       IN SOA  ns.jen. dnsadmin.jen.com (
                                20200601        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      jen.com.
132     PTR     ns.jen.com.
133     PTR     ns.jen.com.
134     PTR     ns.jen.com.
132     PTR     www.jen.com.
132     PTR     main.jen.com.

检查配置文件,重启服务,测试。

代码语言:javascript复制
[root@localhost named]# named-checkconf
[root@localhost named]# named-checkzone 192.168.8.zone /var/named/192.168.8.zone
zone 192.168.8.zone/IN: loaded serial 20200601
OK
[root@localhost named]# rndc reload
server reload successful

使用dig来进行测试

代码语言:javascript复制
[root@localhost named]# dig -x 192.168.8.132

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -x 192.168.8.132
;; global options:  cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26873
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION:
132.8.168.192.in-addr.arpa. 86400 IN    PTR     ns.jen.com.
132.8.168.192.in-addr.arpa. 86400 IN    PTR     www.jen.com.
132.8.168.192.in-addr.arpa. 86400 IN    PTR     main.jen.com.

;; AUTHORITY SECTION:
8.168.192.in-addr.arpa. 86400   IN      NS      jen.com.

;; Query time: 0 msec
;; SERVER: 192.168.8.132#53(192.168.8.132)
;; WHEN: 一 6月 01 14:30:10 CST 2020
;; MSG SIZE  rcvd: 130

搭建DNS主从服务器:

在搭建之前在主服务器中添加第二个DNS为从服务器的地址 主从服务器好处是起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率。 从服务器配置的格式:On Slave

代码语言:javascript复制
定义一个从区域:
    zone "ZONE_NAME" IN {
        type slave;
        file "slave/ZONE_NAME.zone";
        masters {MASTER_IP;};
    };

首先在主服务器的区域配置文件中允许该从服务器的更新请求,即修改allow-update {允许更新区域信息的主机地址;};参数,然后重启主服务器的DNS服务程序。主服务器确保区域数据文件中为每个从服务器配置NS记录。在从服务器上配置:

代码语言:javascript复制
zone "jen.com" IN {
        type slave;
        file "slaves/jen.com.zone";
        masters { 192.168.8.132; };
};

zone "8.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/192.168.8.zone";
        masters { 192.168.8.132; };
};

在从服务器中修改name.conf配置文件,后面加一个自己的地址

代码语言:javascript复制
options {
        listen-on port 53 { 127.0.0.1; 192.168.8.134; };  <====*
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; };

接着在主服务器上添加从服务器的NS记录(即主服务器授权允许从服务器进行同步)

代码语言:javascript复制
        NS      ns.jen.com.
        NS      ns2.jen.com.  <===
        MX   10 mx1.jen.com.
        MX   20 mx2.jen.com.
ns      A       192.168.8.132
ns2     A       192.168.8.133  <===
www     A       192.168.8.132
mail    A       192.168.8.132
mx1     A       192.168.8.133
mx2     A       192.168.8.134

使用rndc reloa或systemctl restart named重新装载。使用dig来验证一下是否成功。这里可以看到使用从服务器已经解析了域名。

代码语言:javascript复制
[root@localhost slaves]# dig -t MX jen.com @192.168.8.134

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -t MX jen.com @192.168.8.134
;; global options:  cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29805
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jen.com.                       IN      MX

;; ANSWER SECTION:
jen.com.                86400   IN      MX      10 mx1.jen.com.
jen.com.                86400   IN      MX      20 mx2.jen.com.

;; AUTHORITY SECTION:
jen.com.                86400   IN      NS      ns2.jen.com.
jen.com.                86400   IN      NS      ns.jen.com.

;; ADDITIONAL SECTION:
mx1.jen.com.            86400   IN      A       192.168.8.133
mx2.jen.com.            86400   IN      A       192.168.8.134
ns.jen.com.             86400   IN      A       192.168.8.132
ns2.jen.com.            86400   IN      A       192.168.8.134

;; Query time: 0 msec
;; SERVER: 192.168.8.134#53(192.168.8.134)
;; WHEN: 一 6月 01 23:44:51 CST 2020
;; MSG SIZE  rcvd: 175

这里在主服务器中添加一条记录

代码语言:javascript复制
pop3    A       192.168.8.136

使用dig命令查看解析。可以看到已经同步过来数据了!!!

代码语言:javascript复制
[root@localhost slaves]# dig -t A  pop3.jen.com @192.168.8.134

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -t A pop3.jen.com @192.168.8.
134
;; global options:  cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52390
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
pop3.jen.com.           86400   IN      A       192.168.8.136

;; AUTHORITY SECTION:
jen.com.                86400   IN      NS      ns.jen.com.
jen.com.                86400   IN      NS      ns2.jen.com.

;; ADDITIONAL SECTION:
ns.jen.com.             86400   IN      A       192.168.8.132
ns2.jen.com.            86400   IN      A       192.168.8.134

;; Query time: 0 msec
;; SERVER: 192.168.8.134#53(192.168.8.134)
;; WHEN: 一 6月 01 23:55:23 CST 2020
;; MSG SIZE  rcvd: 124

查看一些反向解析记录,也是可以同步过来

代码语言:javascript复制
[root@localhost slaves]# dig -x  192.168.8.134 @192.168.8.134

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> -x 192.168.8.134 @192.168.8.1
34
;; global options:  cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5700
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION:
134.8.168.192.in-addr.arpa. 86400 IN    PTR     ns.jen.com.

;; AUTHORITY SECTION:
8.168.192.in-addr.arpa. 86400   IN      NS      jen.com.

;; Query time: 0 msec
;; SERVER: 192.168.8.134#53(192.168.8.134)
;; WHEN: 一 6月 01 23:56:21 CST 2020
;; MSG SIZE  rcvd: 93

0 人点赞