DNS介绍与部署-Day 01

1. 什么是DNS

DNS(Domain Name System)域名系统,是一种采用客户端/服务器机制,负责实现计算机名称与IP地址转换的系统。DNS作为一种重要的网络服务,既是Internet工作的基础,同时在企业内部网络中也得到了广泛地应用。

2. 递归查询与迭代查询

在域名解析的过程中,分别用到了两种不同类型的查询,分别是用户和自己所设置使用的本地域名服务器之间的递归查询,以及本地域名服务器与其它DNS服务器之间的迭代查询。
(1)递归查询
DNS客户端发出查询请求后,如果本地域名服务器内没有所需的数据,则服务器会代替客户端向其它的DNS服务器进行查询。在这种方式中,客户端只需发出一次查询请求,而域名服务器必须要给客户端做出回答。普通上网用计算机和所设置的DNS服务器之间都是采用递归查询。

(2)迭代查询
DNS服务器与服务器之间进行的查询,需要多次反复发出查询请求。也就是在上面的例子中,用户所使用的本地域名服务器从根服务器开始逐级往下查询,直到最终找到负责解析ytvc.com.cn域名的DNS服务器为止的过程。

3. DNS查找区域与DNS服务器类型

组成DNS系统的核心是DNS服务器,DNS服务器上保存了包含主机名和相应IP地址的数据库。
配置DNS服务,首先要创建DNS查找区域。
所谓查找区域是指DNS服务器所要负责解析的域名空间,如百度注册了baidu.com的域名,在百度的DNS服务器上就要创建名为“baidu.com”的查找区域。查找区域有正向和反向之分,正向查找区域负责把域名解析为IP,而反向查找区域负责把IP解析为域名。我们通常使用的主要是正向查找区域。
但并非所有的DNS服务器中都要创建查找区域,按照对查找区域的维护方式不同,
DNS服务器可分为三种类型:

  • 缓存域名服务器,这种服务器里没有要负责解析的区域,只是将域名查询结果缓存到本地,以提高客户端重复查询时的速度。
  • 主域名服务器,是我们最常使用的DNS服务器,要负责解析一个或几个区域,而且也可以起到缓存域名服务器的作用。
  • 从域名服务器,也称为辅助域名服务器,主要是作为主域名服务器的备份,所有数据都来源于主域名服务器。会自动从主DNS服务器上下载资源配置文件,或定期跟主DNS服务器同步资源配置文件数据。辅助DNS服务器可以帮助主DNS服务器分担一定的域名解析压力。

4. 部署自建DNS

4.1 安装bind

BIND的软件名为bind,对应的服务进程名为named。

[root@bind-01 ~]#  yum install bind -y
[root@bind-01 ~]# systemctl start named
[root@bind-01 ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@bind-01 ~]# netstat -lntup |grep 53
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      7057/named # tcp的53,主要是主DNS和从DNS进行数据同步时使用
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      7057/named
tcp6       0      0 ::1:53                  :::*                    LISTEN      7057/named
tcp6       0      0 ::1:953                 :::*                    LISTEN      7057/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           7057/named # udp的53,就是客户端和服务端进行域名解析用
udp6       0      0 ::1:53                  :::*                                7057/named

4.2 配置文件讲解

(1)主配置文件
/etc/named.conf:主要用于配置全局选项以及创建查找区域。比如要创建一个名为“example.com”的查找区域,此项操作就应该在主配置文件中完成。在CentOS7系统中,为了避免主配置文件变得过于庞大,新增了一个配置文件/etc/named.rfc1912.zones,这个文件被包含在主配置文件中,在该文件中做的所有设置都等同于在主配置文件中进行设置。因而,/etc/named.rfc1912.zones可以被视为/etc/named.conf的子配置文件。如果要创建查找区域,更加推荐在/etc/named.rfc1912.zones文件中完成。


(2)区域配置文件
/var/named/:用来存放DNS服务所要负责解析的区域的相关数据,其中主要是各种DNS记录。服务器中所创建的每个查找区域都要有一个相对应的区域配置文件,区域配置文件默认都保存在/var/named/目录中。

4.2.1 /etc/named.conf

主配置文件主要分成3部分:options、logging、zone

[root@bind-01 ~]# cat /etc/named.conf|grep -v "^/"

options { # 全局配置,该部分配置,在所有区域中都生效。(重要)
        listen-on port 53 { 127.0.0.1; };  # dns服务端口默认为53,127.0.0.1为默认监听地址,默认监听地址只能为自己提供服务。这里还可以写any,表示监听本机所有网卡,也可以写一个固定的ip地址
        listen-on-v6 port 53 { ::1; }; # 表示ipv6环境下的监听端口和监听地址。
        directory       "/var/named";  # 区域配置文件存放目录
        dump-file       "/var/named/data/cache_dump.db";  # 客户端向dns服务器发起域名解析请求,该请求会缓存一份到该目录下named.run文件中,下次请求就不会卡一下了
        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; };  # 允许客户端请求配置(允许谁向dns服务器发起请求),默认只允许本机。一般都会改成any,不过也可以指定网段或者某一个ip地址

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;  # 递归查询配置,默认开启(是否允许客户端把该dns当成它的首选DNS服务器)

        dnssec-enable yes;  # dns的安全配置,默认启用(一般在公网的dns服务器上启用)
        dnssec-validation yes;  # dns安全认证配置,默认启用(一般在公网的dns服务器上启用)

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key"; # named提供的受信任密钥的路径,默认即可,不需要更改。

        managed-keys-directory "/var/named/dynamic"; # 指定目录中的文件存储,跟踪管理DNSSEC密钥。

        pid-file "/run/named/named.pid"; # pid文件路径,不需要更改。
        session-keyfile "/run/named/session.key"; # 会话密钥路径,由named生成,默认即可。
};

logging {  # 日志配置
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {  # 区域配置。(重要) .是该区域的名字,也就是该DNS服务的根域
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones"; # 该文件中的内容,都会被视为主配置文件中的一部分,主要是用来配置查找区域的
include "/etc/named.root.key"; 

5. DNS的几种模式

5.1 缓存域名模式

缓存域名模式,即不创建查找区域,服务器直接把客户端的DNS请求发往根域服务器,并把查询结果保存在本地缓存里。因而这里只需修改主配置文件,而不涉及区域配置文件。

5.1.1 修改配置文件
[root@bind-01 ~]# vim /etc/named.conf
把 listen-on port 53 { 127.0.0.1; }; 中的127.0.0.1改成自己的ip
把 allow-query     { localhost; }; 中的localhost改成any
把 dnssec-enable yes; 中的yes改成no
把 dnssec-validation yes; 中的yes改成no

[root@bind-01 ~]# egrep "10.0.0.10|allow|dnssec" /etc/named.conf
        listen-on port 53 { 10.0.0.10; };
        allow-query     { any; };
        dnssec-enable no;
        dnssec-validation no;

# 检查语法配置是否有误
[root@bind-01 ~]# named-checkconf /etc/named.conf # 没有返回值表示语法正确
[root@bind-01 ~]# systemctl restart named
root@bind-01 ~]# netstat -lntup |grep 53
tcp        0      0 10.0.0.10:53            0.0.0.0:*               LISTEN      22234/named # 这里可以看到监听地址已经发生了变化
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      22234/named
tcp6       0      0 ::1:53                  :::*                    LISTEN      22234/named
tcp6       0      0 ::1:953                 :::*                    LISTEN      22234/named
udp        0      0 10.0.0.10:53            0.0.0.0:*                           22234/named # 这里可以看到监听地址已经发生了变化
udp6       0      0 ::1:53                  :::*                                22234/named
5.1.2 验证缓存域名服务器配置

这里需要用到一台客户机,并把dns指向dns服务器

[root@bind-client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.10 # dns配置

[root@bind-client ~]# ping www.baidu.com # 首次ping的时候,会卡一下,为什么会卡,是因为它向根dns服务器发起了迭代查询请求(它本身并不做解析),并把请求结果缓存到dns服务器上,第二次请求就不会卡了。
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=128 time=34.7 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=128 time=14.0 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=3 ttl=128 time=11.3 ms

# 这里所有的缓存都会保存到下面的文件中
[root@bind-01 /var/named/data]# ll
total 20
-rw-r--r-- 1 named named 18341 Jul 19 00:04 named.run

5.2 转发器模式

除了迭代查询之外,对于在内网中架设的DNS服务器,还可以通过设置转发器的方式,将无法解析出来的域名请求转发给其他的DNS服务器,由其代为完成域名解析工作,转发到的目标DNS服务器一般都是公网上由ISP提供的DNS服务器。 配置转发器可以在/etc/named.conf配置文件的全局配置部分增加以下两个设置项:
forward only;
forwarders ( 202.102.134.68; }; # 一般为公网上的dns服务器,要允许递归

forward only,表示仅转发(禁用迭代查询功能),对于自己无法直接解析的查询请求,全部转发给目标DNS服务器。另外还可以设置为forward first,表示先将解析请求转发给目标服务器,如果目标服务器无法解析出结果,那么再由自己发起迭代查询。
forwarders ( 202.102.134.68; },用于指定转发目标服务器。
保存退出后,重启服务生效。

5.3 配置主从DNS模式

该模式也是工作中常用

5.3.1 配置主域名服务器,并创建一个正向查找区域

完成该项要求,需要分别进行两步操作:

  1. 在主配置文件/etc/named.conf或/etc/named.rfc1912.zones中创建查找区域。
  2. 在/var/named目录中生成区域配置文件。
    推荐在/etc/named.rfc1912.zones中创建查找区域,这样主配置文件就不会因为配置太多而显得臃肿。
# 创建查找区域
[root@bind-01 ~]# tail -n 5 /etc/named.rfc1912.zones
zone "example.com" IN {
        type master;
        file "example.com.zone"; # 这里区域配置文件的名字,可以自定义,但是更加推荐现在这种写法。
        allow-update { none; };  # 当IP发生变化后,是否允许自动更新,一般都不开启,不加这行,默认也是none。
};

[root@bind-01 ~]# named-checkconf /etc/named.conf
[root@bind-01 ~]# echo $?
0

# 创建查找区域配置文件
## 这里建议用系统的区域配置文件当模板来改,不容易出错
[root@bind-01 ~]# cd /var/named/
[root@bind-01 /var/named]# ll  # 注意区域文件的权限
total 16
drwxrwx--- 2 named named   23 Jul 19 00:03 data
drwxrwx--- 2 named named   60 Jul 19 21:50 dynamic
-rw-r----- 1 root  named 2253 Apr  5  2018 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Feb 24 01:17 slaves
[root@bind-01 /var/named]# cp -a named.localhost example.com.zone # 用cp -a连带属性一起复制过来
[root@bind-01 /var/named]# ll
total 20
drwxrwx--- 2 named named   23 Jul 19 00:03 data
drwxrwx--- 2 named named   60 Jul 19 21:50 dynamic
-rw-r----- 1 root  named  152 Jun 21  2007 example.com.zone # 新复制的文件
-rw-r----- 1 root  named 2253 Apr  5  2018 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Feb 24 01:17 slaves

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D  # DNS缓存保存时间
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1 # A记录
        AAAA    ::1 # ipv6的A记录

5.3.2 DNS记录类型

  1. 主机记录(A记录)
    使用最广泛的DNS记录类型,用于将主机名解析成IPv4地址。另外还有类型为AAAA的主机记录,用于将主机名解析为IPv6地址。
  2. 指针记录(PTR记录)
    作用与A记录正好相反,用于将IP地址解析成主机名,即进行反向查询。
  3. 别名记录(CNAME记录)
    用来为现有的A记录定义别名。
    需要注意的是,主机名与IP地址之间并非是一一对应的关系,一个主机名可以对应多个IP地址,一个IP地址也可以对应多个主机名。通过别名记录就可以使一个IP对应到多个名字,比如某台服务器既是Web服务器,同时也是FTP服务器,那么就可以通过CNAME记录将服务器的IP地址对应到多个主机名上。
  4. 邮件交换器记录(MX记录)
    用于说明哪台服务器是当前区域的邮件服务器。
    例如在example.com区域中,mail.example.com是邮件服务器,那么所有发往后缀是@example.com的邮件都由该服务器负责接收。在一个区域中可能会有多台邮件服务器,因而MX记录必须要指明优先级,优先级用0~99之间的数字表示,数字越小,优先级越高。
  5. 名称服务器记录(NS记录)
    用于说明当前区域由哪些域名服务器负责解析。NS记录是任何一个DNS区域都必须要有的记录,而且当前区域中有几台DNS服务器,就应相应地设置几条NS记录。
  6. 起始授权记录(SOA记录)
    用于说明哪台服务器是当前区域的主域名服务器,同时还定义了一些域的全局参数。如果区域中只有一台DNS服务器,那么SOA也就是当前服务器。SOA也是任何一个DNS区域都不可缺少的记录,而且每个区域只能有一条SOA记录,另外SOA记录应位于区域配置文件的起始位置。
5.3.3 编辑区域配置文件

(1)配置SOA记录(必须)

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
# dns.example.com.,由于DNS服务器没有域名,所以这里自定义一个,正式工作中写申请的域名。
# 1184964356.qq.com.:邮箱地址,由于@符号会被当成区域符号,所以用.代替
@       IN SOA  dns.example.com. 1184964356.qq.com. (  
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
dns     IN      A      10.0.0.10 # 创建的A记录(主机记录)

区域配置文件中的第一条记录必须是SOA记录,该记录既指明了当前区域的主域名服务器,同时还包含了与从域名服务器之间进行数据同步的一些参数。 SOA记录的格式如下:
当前区域名 IN SOA 主域名服务器的FQDN名 管理员邮箱地址 ( 序列号 刷新间隔 重试间隔 过期间隔 TTL值) 。

  • 当前区域名:这里用@表示,在区域配置文件中@特指当前区域,这里即example.com(@=example.com)。
  • IN:关键字,代表Internet,在各种类型的DNS记录中均应包含IN关键字。
  • SOA:表示记录类型为SOA记录。
  • 主域名服务器的FQDN名(完整的域名):这里必须采用FQDN名的形式表示主域名服务器,而且FQDN名中最右侧表示根域的“.”不能省略。服务器的FQDN名可以通过在下面创建A记录来获得。
  • 管理员邮箱地址:负责维护DNS服务器的管理员邮箱地址。注意在书写时要用符号“.”代替符号“@”,因为“@”在本文件中特指当前区域,比如“root@example.com.”要写成“root.example.com.”(注意,最右侧的根域符号“.”也不能省略)。

其它与从域名服务器之间进行数据同步的参数将在配置从域名服务器部分介绍,需要注意的是,无论网络中是否存在从域名服务器,这些默认的同步参数都必须要保留下来。

(2)配置NS记录(必须)

区域配置文件中的第二条记录就应该是NS记录,用于指明当前区域中的所有域名服务器。
NS记录的格式:当前区域名 IN NS 域名服务器的FQDN名。
当前区域名同样可以使用@表示,另外在区域配置文件中还有一条默认规则:如果前后两条记录的名称是一样,那么后一条记录的名称可以省略不写。因而可以这样在配置文件中添加NS记录: 
  IN NS dns.example.com. 

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.example.com. # 有几台DNS服务器,就要添加几条NS记录。这里只有一台。这里还可以直接写成  IN NS dns.example.com. ,因为名称相同。
        A       127.0.0.1 # 这个可以删除
        AAAA    ::1 # 这个可以删除

(3)配置A记录

区域配置文件中的第一条记录必须是SOA记录,第二条记录必须是NS记录,再接下来对记录类型就没有要求了,不过通常都是添加A记录,因为这是最常用的DNS记录类型。
注意,主机名不要写“www.example.com”之类的全名,只需写“www”或“mail”,DNS就会自动在主机名称后面加上当前的区域名称作为后缀,形成完全合格域名。

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.example.com.
        A       127.0.0.1
        AAAA    ::1
dns     IN      A      10.0.0.10 # 添加的A记录
web     IN      A      10.0.0.10 # 这里假设还有台web服务器
web     IN      A      10.0.0.11 # 可以一个主机名对应多个IP(负载均衡),这种对话,A请求web时,获得10.0.0.10,B请求web时,获得10.0.0.11(DNS轮询)

另外在添加A记录时有两个问题需要注意:

  1. 同一个IP地址可以对应到多个主机名。比如我们将192.168.80.10这个
    IP地址同时对应到了dns和www两个名字,这表明在这台服务器中同时提供了DNS和
    Web两种服务,通过这两个名字都可以访问到这台服务器。对于服务器,可以通过所接收的数据包中的目的端口来区分客户端所访问的是DNS服务还是Web服务。
  2. 同一个名字可以对应到多个IP。比如我们将www这个名字同时对应到了192.168.80.10和192.168.80.11两个IP,这表明这个网站由两台服务器组成了一个集群,网站同时部署在两台服务器上。当客户端访问网站时,DNS服务器将会实现轮询,将这两个IP地址依次解析给客户端。

(4)配置CNAME记录(别名)

CNAME记录必须以A记录为基础,即必须先有了A记录之后,才能再创建CNAME记录。 CNAME记录的格式:别名 IN CNAME 主机名

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.example.com.
        A       127.0.0.1
        AAAA    ::1
dns     IN      A      10.0.0.10
web     IN      A      10.0.0.10
www     IN      CNAME  web.example.com. # CNAME记录,访问www.dns.example.com就会解析到web.dns.example.com

(5)配置MX记录(邮件)

MX记录也必须要以A记录为基础,同时必须要在MX记录中指明邮件服务器的优先级。 MX记录的格式: 当前区域名称 IN MX 优先级 邮件服务器的FQDN名 # 优先级0-99,越小优先级越高

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.example.com.
        A       127.0.0.1
        AAAA    ::1
dns     IN      A      10.0.0.10
web     IN      A      10.0.0.10
www     IN      CNAME  web.example.com.
mail    IN      A      10.0.0.10 # 邮件服务器的A记录
@       IN      MX     10      mail.example.com.  # 邮件服务器的MX记录

**(6)实现泛域名解析 **

泛域名解析是指将所有匹配不到资源记录的请求都解析到指定的IP地址,比如用户要访问网站www.example.com,在输入网址时不小心写成了web.example.com,通过泛域名解析就可以将这些名字统一进行解析。
泛域名解析的原理就是利用通配符“*”来代替任意名字,因而只需添加如下一条记录即可。

[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.example.com.
        A       127.0.0.1
        AAAA    ::1
dns     IN      A      10.0.0.10
web     IN      A      10.0.0.10
www     IN      CNAME  web.dns.example.com.
mail    IN      A      10.0.0.10
@       IN      MX     10      mail.dns.example.com.
*       IN      A      10.0.0.10  # 泛域名解析

[root@bind-01 /var/named]# named-checkconf /etc/named.conf
[root@bind-01 /var/named]# systemctl restart named

**(7)直接解析域名 **

# DNS服务默认只能解析www.example.com这样的FQDN名,而不能直接将域名example.com解析成IP。为了方便用户访问,可以添加下面的A记录,实现直接解析域名功能。 
## 修改配置文件,删除默认本地回环地址的解析
[root@bind-01 ~]# cat /var/named/example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      dns.example.com.
        A       127.0.0.1  # 删除这个
        AAAA    ::1  # 删除这个
dns     IN      A      10.0.0.10
web     IN      A      10.0.0.10
web     IN      A      10.0.0.11
www     IN      CNAME  web.dns.example.com.
mail    IN      A      10.0.0.10
@       IN      MX     10      mail.dns.example.com.
*       IN      A      10.0.0.10

[root@bind-01 ~]# systemctl restart named

# 客户端测试
[root@bind-client ~]# ping example.com # 这里发现ping不通了
ping: example.com: Name or service not known

# 添加直接解析域名配置
[root@bind-01 ~]# !vi
vim /var/named/example.com.zone
[root@bind-01 ~]# tail -1 /var/named/example.com.zone
@       IN      A      10.0.0.10
[root@bind-01 ~]# systemctl restart named

# 客户端测试
[root@bind-client ~]# ping example.com # 能ping通了
PING example.com (10.0.0.10) 56(84) bytes of data.
64 bytes from 10.0.0.10 (10.0.0.10): icmp_seq=1 ttl=64 time=0.360 ms
5.3.4 配置反向查找区域

根据已知的IP地址来查询DNS主机名称

# 配置文件中添加反向查找区域配置
[root@bind-01 ~]# tail -5 /etc/named.rfc1912.zones
zone "0.0.10.in-addr.arpa" IN { # .in-addr.arpa为固定写法
        type master;
        file "0.0.10.zone";
        allow-update { none; };
};

# 创建反向查找区域配置文件
[root@bind-01 /var/named]# cp -a  named.loopback 0.0.10.zone
[root@bind-01 /var/named]# vim 0.0.10.zone
[root@bind-01 /var/named]# cat 0.0.10.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.example.com.
10      IN PTR  dns.example.com.
10      IN PTR  www.example.com.
11      IN PTR  web.example.com.


[root@bind-01 /var/named]# systemctl restart named

# 测试
[root@bind-client ~]# host -t ptr 10.0.0.10
10.0.0.10.in-addr.arpa domain name pointer www.example.com.
10.0.0.10.in-addr.arpa domain name pointer dns.example.com.

[root@bind-client ~]# dig -x 10.0.0.10

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -x 10.0.0.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42325
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
10.0.0.10.in-addr.arpa. 86400   IN      PTR     dns.example.com.
10.0.0.10.in-addr.arpa. 86400   IN      PTR     www.example.com.

;; AUTHORITY SECTION:
0.0.10.in-addr.arpa.    86400   IN      NS      dns.example.com.

;; ADDITIONAL SECTION:
dns.example.com.        86400   IN      A       10.0.0.10

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Sat Jul 23 18:20:12 CST 2022
;; MSG SIZE  rcvd: 128

6. DNS测试工具

主要是用来验证域名解析的结果的

6.1 dig命令使用

dig(domain information groper)是一个灵活的DNS测试工具,它专用于测试DNS系统,不会查询hosts文件以及缓存。 dig命令的格式:
dig [-t type] name [@server]
通过“-t”选项可以指定要解析的DNS记录类型,默认为A记录;通过“@server”可以指定要测试的DNS服务器,默认为“/etc/resolv.conf”中所设置的DNS服务器。

# 新开一台客户端机器,用来测试,然后把DNS调整下
[root@bind-client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.10  # 调整dns地址为我们的dns服务器地址
6.1.1 A记录地址解析
[root@bind-client ~]# dig -t A web.example.com #;开头的为注释

; <<> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A web.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24135
;; flags: qr aa rd ra; QUERY(查询请求): 1, ANSWER(返回的记录): 2, AUTHORITY(权威的记录): 1, ADDITIONAL(附加的): 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:  # (问题部分:发出的请求是什么)重点关注
;web.example.com.               IN      A

;; ANSWER SECTION: # (答案部分:请求对应的的解析)重点关注
web.example.com.        86400   IN      A       10.0.0.10
web.example.com.        86400   IN      A       10.0.0.11

;; AUTHORITY SECTION: # (授权部门:example.com. 是由dns.example.com. DNS服务器进行解析的)重点关注
example.com.            86400   IN      NS      dns.example.com.

;; ADDITIONAL SECTION: # (附加部分:返回DNS服务器对应的地址)
dns.example.com.        86400   IN      A       10.0.0.10

;; Query time: 0 msec # 查询时间:0毫秒
;; SERVER: 10.0.0.10#53(10.0.0.10) # 服务端
;; WHEN: Thu Jul 21 22:26:59 CST 2022
;; MSG SIZE  rcvd: 110


[root@bind-client ~]# dig -t A web.example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A web.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40515
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
web.example.com.        86400   IN      A       10.0.0.11  # 第二次探测,就是11在前面了,证明了dns是轮询的
web.example.com.        86400   IN      A       10.0.0.10

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      dns.example.com.

;; ADDITIONAL SECTION:
dns.example.com.        86400   IN      A       10.0.0.10

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Thu Jul 21 23:08:49 CST 2022
;; MSG SIZE  rcvd: 110
6.1.2 CNAME记录解析
[root@bind-client ~]# dig -t A www.example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 5135
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION: # 返回了一条CNAME记录,返回的CNAME为web.dns.example.com
www.example.com.        86400   IN      CNAME   web.dns.example.com.

;; AUTHORITY SECTION:
example.com.            10800   IN      SOA     dns.example.com. 1184964356.qq.com. 0 86400 3600 604800 10800

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Thu Jul 21 22:59:19 CST 2022
;; MSG SIZE  rcvd: 116
6.1.3 MX 邮件记录解析
[root@bind-client ~]# dig -t MX mail.example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t MX mail.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20805
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

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

;; AUTHORITY SECTION:
example.com.            10800   IN      SOA     dns.example.com. 1184964356.qq.com. 0 86400 3600 604800 10800

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Thu Jul 21 23:02:23 CST 2022
;; MSG SIZE  rcvd: 99
6.1.4 NS 记录解析

查看谁来为这个域提供的解析

[root@bind-client ~]# dig -t NS example.com.

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t NS example.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7392
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2

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

;; ANSWER SECTION:
example.com.            86400   IN      NS      dns.example.com. # 返回的dns域名

;; ADDITIONAL SECTION:
dns.example.com.        86400   IN      A       10.0.0.10 # 返回的地址

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Thu Jul 21 23:05:20 CST 2022
;; MSG SIZE  rcvd: 74
6.1.5 SOA 记录解析

可以查看这个域的主域名服务器

[root@bind-client ~]# dig -t SOA example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t SOA example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53106
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

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

;; ANSWER SECTION:
example.com.            86400   IN      SOA     dns.example.com. 1184964356.qq.com. 0 86400 3600 604800 10800

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      dns.example.com.

;; ADDITIONAL SECTION:
dns.example.com.        86400   IN      A       10.0.0.10

;; Query time: 0 msec
;; SERVER: 10.0.0.10#53(10.0.0.10)
;; WHEN: Thu Jul 21 23:07:09 CST 2022
;; MSG SIZE  rcvd: 124
6.1.6 +trace 显示解析步骤
[root@bind-client ~]# dig -t A +trace www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A +trace www.baidu.com
;; global options: +cmd
.                       515235  IN      NS      f.root-servers.net. # 先查根服务器
.                       515235  IN      NS      a.root-servers.net.
.                       515235  IN      NS      g.root-servers.net.
.                       515235  IN      NS      b.root-servers.net.
.                       515235  IN      NS      c.root-servers.net.
.                       515235  IN      NS      e.root-servers.net.
.                       515235  IN      NS      i.root-servers.net.
.                       515235  IN      NS      m.root-servers.net.
.                       515235  IN      NS      d.root-servers.net.
.                       515235  IN      NS      l.root-servers.net.
.                       515235  IN      NS      k.root-servers.net.
.                       515235  IN      NS      j.root-servers.net.
.                       515235  IN      NS      h.root-servers.net.
;; Received 811 bytes from 10.0.0.10#53(10.0.0.10) in 1 ms

com.                    172800  IN      NS      l.gtld-servers.net. #再查顶级域
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    86400   IN      DS      30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.                    86400   IN      RRSIG   DS 8 1 86400 20220803140000 20220721130000 20826 . cs8IhZCr5UhGbC1J8ICnf+tO1HMNuLuv19Mr+aFlOWg+5CqRd7jhIVLa 2MGJm8/tkb+0s0HZF2yLBcCzTwmH3gLtfnehwaBKEGwKDj1C3Ch+yxZJ wYPkCVUZRnisr+lbsCWFsgCp/sRFwENU0wMjtyZ+uteVL425SfQG/OPt Vd/t7EM5SM1CuCiXXt841EtSUSPBCazTSAIiRZa362HWnsYODRvrdsss 603Vvo7tCrf0im35rPXs2YEIm+W6HTiUFT86PBw0I6uRJkt978kl45Ex tkUe36vVWIH5SQjHMjSCgHBZ62hFmZBFW2MmSpujdHzaKaaSOZcAeb33 eKQPYw==
;; Received 1176 bytes from 192.33.4.12#53(c.root-servers.net) in 192 ms

baidu.com.              172800  IN      NS      ns2.baidu.com. # 再查二级域
baidu.com.              172800  IN      NS      ns3.baidu.com.
baidu.com.              172800  IN      NS      ns4.baidu.com.
baidu.com.              172800  IN      NS      ns1.baidu.com.
baidu.com.              172800  IN      NS      ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20220726042407 20220719031407 32298 com. huiwFXn8HYzbaAxygaOQ1u56Q+FaHv0IcXlhxkbQbspEo8fMAxRxFNPB hLfIxcAj1pz94qDtC9jKU1VaXBieRFL9C456YpFXsFSpEBgDrVjFMTe9 uZ1naNeB5BdIzVeDIC+TfAqwO3Zd/zCjReVOWhbu9SjqjZ3L0mI1zlHe k3cikyasb4N6u2DB9FIOin9CzERuz38CpJ4eNq1bvxV47g==
HPVUVSGH5TFIA7CM6SS6SMPOS87OE0CE.com. 86400 IN NSEC3 1 1 0 - HPVV8SARM2LDLRBTVC5EP1CUB1EF7LOP NS DS RRSIG
HPVUVSGH5TFIA7CM6SS6SMPOS87OE0CE.com. 86400 IN RRSIG NSEC3 8 2 86400 20220726054003 20220719043003 32298 com. q3Hm7XRPzeHMx1xSNAboNM3iQRER3PT4PGjlzQNVvUeQ9MyvXHDzg0y4 O7j+WWdKhyyWeT+QW8mG7K8vSPn1I239gIBQQl0YUd4Ri8gAqrE3hj1A KXfj0J8eWykkXiPar/8+10eMkZC/1CnwijUfFyRcIYxoK8xamqScKS1B guKkcqv0nF/EqNl5zIg+dDTpLbJhfrKo4XVjgOTjuW5WFw==
;; Received 817 bytes from 192.54.112.30#53(h.gtld-servers.net) in 186 ms

www.baidu.com.          1200    IN      CNAME   www.a.shifen.com. # 最后查到完整域名
;; Received 72 bytes from 112.80.248.64#53(ns3.baidu.com) in 11 ms

6.2 host命令使用

**host命令用来做简单的主机名信息查询,用法与dig命令类似,但输出的信息要简洁得多。 **

6.2.1 解析A记录
[root@bind-client ~]# host -t A web.example.com
web.example.com has address 10.0.0.10
web.example.com has address 10.0.0.11
6.2.2 解析NS记录
[root@bind-client ~]# host -t NS example.com
example.com name server dns.example.com.
6.2.3 解析SOA记录
[root@bind-client ~]# host -t SOA example.com
example.com has SOA record dns.example.com. 1184964356.qq.com. 0 86400 3600 604800 10800

6.3 nslookup命令使用

nslookup是一个在Linux和Windows系统中都自带的DNS测试工具,与之前的两个命令不同,执行nslookup命令后默认将进入交互模式,用户可按照需要,输入指令进行交互式的操作。

6.3.1 解析A记录
[root@bind-client ~]# nslookup
> web.example.com
Server:         10.0.0.10 # 当前提供域名解析服务的服务器IP
Address:        10.0.0.10#53 # 当前提供域名解析服务的服务器IP和端口

# 这部是解析域名和对应出来的IP地址 
Name:   web.example.com
Address: 10.0.0.10
Name:   web.example.com
Address: 10.0.0.11


> www.baidu.com
Server:         10.0.0.10
Address:        10.0.0.10#53

Non-authoritative answer: # 非权威应答,表示当前的解析记录是通过迭代查询到的,并不是从本地数据库中查到的(该域名不是本地DNS解析出来的就会这样)
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 112.80.248.76
Name:   www.a.shifen.com
Address: 112.80.248.75
6.3.2 解析NS记录
[root@bind-client ~]# nslookup
> set type=NS # 或者set q=NS也行
> example.com
Server:         10.0.0.10
Address:        10.0.0.10#53

example.com     nameserver = dns.example.com.
6.3.3 解析MX记录
> example.com.
Server:         10.0.0.10
Address:        10.0.0.10#53

example.com     mail exchanger = 10 mail.dns.example.com.

7. 配置DNS服务主从模式

从域名服务器主要是作为主域名服务器的备份,并可以帮助主域名服务器分担一定的域名解析压力。
这里需要重新准备一台新的虚拟机充当从DNS的角色。

7.1 修改主域名服务器配置

7.1.1 修改正向区域配置文件
[root@bind-01 /var/named]# cat example.com.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com. (
                                        0       ; serial # 更新序列号。每当主域名服务器的解析库(配置文件)内容发生变化时,这个序列号就需要手动+1,这样从服务器才会同步新的数据过去。 
                                        1D      ; refresh # 从域名服务器检查主域名服务器更新序列号的时间,默认1天。
                                        1H      ; retry # 重试时间。如果主从服务器之间同步失败,那么从域名服务器经过多长时间后会再次向主域名服务器发起同步请求。
                                        1W      ; expire # 过期时间。如果从域名服务器一直联系不到主域名服务器,那么经过多长时间后,从域名服务器会放弃自己的角色,停止提供服务。
                                        3H )    ; minimum # 无效解析记录的最小缓存时间。
@       IN      NS      dns.example.com.
@       IN      NS      dns2.example.com. # 因为新加了一台DNS服务器,所以这也要新加一条NS记录
dns     IN      A      10.0.0.10
dns2     IN      A      10.0.0.11 # 新加DNS服务器的A记录
web     IN      A      10.0.0.10
web     IN      A      10.0.0.11
www     IN      CNAME  web.dns.example.com.
mail    IN      A      10.0.0.10
@       IN      MX     10      mail.dns.example.com.
*       IN      A      10.0.0.10
@       IN      A      10.0.0.10
7.1.2 修改反向区域配置文件
[root@bind-01 /var/named]# cat 0.0.10.zone
$TTL 1D
@       IN SOA  dns.example.com. 1184964356.qq.com (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.example.com.
        NS      dns2.example.com.
10      IN PTR  dns.example.com.
11      IN PTR  dns2.example.com.
10      IN PTR  www.example.com.
11      IN PTR  web.example.com.

[root@bind-01 /var/named]# systemctl restart named

7.2 配置从域名服务器

需要把从的DNS指向主

7.2.1 安装Bind服务并启动
[root@bind-02 ~]# yum -y install bind
[root@bind-02 ~]# systemctl start named
[root@bind-02 ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
7.2.2 修改主配置文件
[root@bind-02 ~]# grep -v "^//" /etc/named.conf

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";
        allow-query     { any; }; #改这里

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable no; #改这里
        dnssec-validation no; #改这里

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
7.2.3 修改子配置文件

创建查找区域(从服务器是同步的查找区域配置文件,所以还是需要创建查找区域)

[root@bind-02 ~]# cat /etc/named.rfc1912.zones
………………省略部分内容
zone "example.com" IN {
        type slave;
        file "slaves/example.com.zone"; # 这里推荐放在slaves目录下,因为该目录的属主属组都是named,并且不用写绝对路径,因为主配置文件已经定义了文件存放目录。
        masters { 10.0.0.10; }; # 指定master的地址
};
7.2.4 重启服务

服务重启后,从服务器会自动同步主域名服务器的区域查找配置文件

[root@bind-02 ~]# systemctl restart named
[root@bind-02 /var/named/slaves]# ll
total 4
-rw-r--r-- 1 named named 528 Jul 23 19:07 example.com.zone # 这个文件在从域名服务器是无法查看的

7.3 验证主从

7.3.1 修改客户端的DNS为从的IP
[root@bind-client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 10.0.0.11
7.3.2 测试
[root@bind-client ~]# dig -t A web.example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A web.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64687
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

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

;; ANSWER SECTION:
web.example.com.        86400   IN      A       10.0.0.10

;; AUTHORITY SECTION:
example.com.            86400   IN      NS      dns2.example.com.
example.com.            86400   IN      NS      dns.example.com.

;; ADDITIONAL SECTION:
dns.example.com.        86400   IN      A       10.0.0.10
dns2.example.com.       86400   IN      A       10.0.0.11

;; Query time: 0 msec
;; SERVER: 10.0.0.11#53(10.0.0.11)
;; WHEN: Sat Jul 23 21:39:59 CST 2022
;; MSG SIZE  rcvd: 129

[root@bind-client ~]# dig -t A www.example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 55701
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

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

;; ANSWER SECTION:
www.example.com.        86400   IN      CNAME   web.dns.example.com.

;; AUTHORITY SECTION:
example.com.            10800   IN      SOA     dns.example.com. 1184964356.qq.com. 1 86400 3600 604800 10800

;; Query time: 0 msec
;; SERVER: 10.0.0.11#53(10.0.0.11)
;; WHEN: Sat Jul 23 21:40:42 CST 2022
;; MSG SIZE  rcvd: 116

8. DNS的安全配置

8.1 为什么要做安全配置

辅助DNS服务器从主DNS服务器处获得查找区域数据的过程称为区域传送。默认情况下,主DNS服务器允许任意客户端与自己进行区域传送,这存在很大的安全隐患,因为这样任何客户端都可以从主DNS服务器那里获取到查找区域的所有记录数据。比如在客户端执行“dig -t axfr”命令模拟区域传送,就可以获取到指定查找区域中的所有主机记录。

[root@Client ~]# vim /etc/resolv.conf nameserver 192.168.80.20 
[root@Client ~]# host -t A www.example.com www.example.com has address 192.168.80.10 www.example.com has address 192.168.80.11 [root@Client ~]# host -t NS example.com example.com name server dns.example.com. example.com name server dns2.example.com. [root@Client ~]# host -t PTR 192.168.80.10 10.80.168.192.in-addr.arpa domain name pointer www.example.com. 10.80.168.192.in-addr.arpa domain name pointer dns.example.com. 

为了避免上述安全隐患,可在DNS服务器上设置只允许与指定的DNS服务器之间进行区域传送,这就需要添加allow-transfer设置项。比如添加设置项“allow-transfer { 192.168.80.20; };”就表示只允许与指定IP地址的DNS服务器进行区域传送,添加设置项“allow-transfer { none; };”则表示不允许与任何服务器进行区域传送。

8.2 模拟盗取主NDS的区域配置

[root@bind-client ~]# dig -t axfr example.com # axfr模拟区域传送(区域传送只能发生在主和从之间)

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t axfr example.com
;; global options: +cmd
example.com.            86400   IN      SOA     dns.example.com. 1184964356.qq.com. 1 86400 3600 604800 108                                                                              00
example.com.            86400   IN      NS      dns.example.com.
example.com.            86400   IN      NS      dns2.example.com.
example.com.            86400   IN      MX      10 mail.dns.example.com.
example.com.            86400   IN      A       10.0.0.10
*.example.com.          86400   IN      A       10.0.0.10
dns.example.com.        86400   IN      A       10.0.0.10
dns2.example.com.       86400   IN      A       10.0.0.11
mail.example.com.       86400   IN      A       10.0.0.10
web.example.com.        86400   IN      A       10.0.0.10
www.example.com.        86400   IN      CNAME   web.dns.example.com.
example.com.            86400   IN      SOA     dns.example.com. 1184964356.qq.com. 1 86400 3600 604800 108                                                                              00
;; Query time: 1 msec
;; SERVER: 10.0.0.11#53(10.0.0.11)
;; WHEN: Sat Jul 23 21:53:56 CST 2022
;; XFR size: 12 records (messages 1, bytes 313)

8.3 配置区域传送(主DNS)

8.3.1 修改主DNS的子配置文件(也可以改主配置文件)
[root@bind-01 /var/named]# cat /etc/named.rfc1912.zones
zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-update { none; };
        allow-transfer { 10.0.0.11;}; # 指定允许进行区域传送的主机
};

[root@bind-01 /var/named]# systemctl restart named
8.3.2 修改从DNS的主配置文件
[root@bind-02 ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

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";
        allow-query     { any; };
        allow-transfer { none;}; # 添加这里,因为从服务器不需要任何服务器来同步,所以直接设置成none
……省略部分输出

[root@bind-02 ~]# systemctl restart name
8.3.3 测试
[root@bind-client ~]# dig -t axfr example.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t axfr example.com
;; global options: +cmd
; Transfer failed.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值