一.本文环境

  1.CentOS 7 

  2. DNS服务软件bind

二.DNS资源记录的配置实现

  1.资源记录解析库类型

资源解析库,由众多RR组成(resource record:资源记录),记录类型,A,SOA,AAAA,CNAME,PTR,MX,NS

    A:                       将名称(域名)解析为IP地址

    MX:                    邮件交换服务器记录

    NS:                    主机名记录

    PTR:                  反向解析 把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa. value: FQDN

    SOA:                 初始授权记录,一个区域解析库有且只能由一个SOA记录 ,必须位于解析库的第一条记录

    AAAA:                将名称解析为IPV6地址

    CNAME :            别名记录

  2 .资源记录解析库语法

name:当前域的名字可以使用@来代替    TTL:缓存时长          IN:internet      rr_type:上面的其中资源记录类型           value:类型的值

    在七种记录中SOA的值是由多部份组成 :服务器名字  管理邮箱 (序列号  同步时间   重试时间  过期时间  否定答案)

  3.实现DNS服务器(三台机器)

    1.yum install bind -y

    2. 需要配置bind 主配置文件(/etc/named.conf)和解析库文件(/var/named)

    3.首先配置主配置文件/etc/named.conf    

1 options {
 2 //      listen-on port 53 { 127.0.0.1; };         #注释此行  开放端口不然无法被其他机器访问,改为localhost也可
 3         listen-on-v6 port 53 { ::1; };
 4         directory       "/var/named";
 5         dump-file       "/var/named/data/cache_dump.db";
 6         statistics-file "/var/named/data/named_stats.txt";
 7         memstatistics-file "/var/named/data/named_mem_stats.txt";
 8         secroots-file   "/var/named/data/named.secroots";
 9         recursing-file  "/var/named/data/named.recursing";
10 //      allow-query     { localhost; };            #注释此行   允许访问 改为any也可
11         allow-transfer   { none; };                #手动增加此行 任何主机不能同步。默认任何主机可以同步,此项不安全所以设为none

  配置/etc/named.conf无需改太多地方,注释掉两行,增加一行就行了。

    4.然后增加资源记录库文件/var/named/目录下,创建一个文件,文件名随意。但是这个文件名要和zone中的文件名一致

1 [root@CentOS-8 ~]# cat /var/named/bind.dns 
 2 $TTL 1D
 3 ;name TTL  IN      rr_type         value
 4 @          IN       SOA            .    . (
 5                 0000000001 ;序列号 增加就同步到从服务器
 6                 1D      ;同步刷新时间
 7                 2H      ;重试时间
 8                 2D      ;过期时间
 9                 1D          ;否定缓存时间
10 )
11 @         IN        NS            ns1
12 ns1       IN        A             192.168.39.8    
13 www       IN        A             192.168.39.6
14 *         IN        A             192.168.39.6 ;泛解析
15 @         IN        A             192.168.39.6 ;本域

    5.增加一个域。跟上面的第4步对应,在/etc/named.rfc1912.zones 文件中增加,里面由范例直接改就行了

1 zone "baidu.com" IN {
2         type master;
3         file "bind.dns";(这里的文件于第4步文件对应)
4         allow-update { none; };
5 };

    6.客户端curl访问

1 [root@centos7-lvm ~]# curl www.baidu.com
2 <h1></h1>
3 [root@centos7-lvm ~]# curl wwwwwww.baidu.com #因为泛解析所以能正确访问到 baidu.com这个域
4 <h1></h1> 
5 [root@centos7-lvm ~]# curl baidu.com
6 <h1></h1> 
7 [root@centos7-lvm ~]# curl aaaaaa.baidu.com # 因为泛解析所以能正确访问到 baidu.com这个域 
8 <h1></h1> 
9 [root@centos7-lvm ~]#

dig访问

1 [root@centos7-lvm ~]# dig baidu.com
 2 
 3 ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> baidu.com
 4 ;; global options: +cmd
 5 ;; Got answer:
 6 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64695
 7 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
 8 
 9 ;; OPT PSEUDOSECTION:
10 ; EDNS: version: 0, flags:; udp: 4096
11 ;; QUESTION SECTION:
12 ;baidu.com.            IN    A
13 
14 ;; ANSWER SECTION:
15 baidu.com.        86400    IN    A    192.168.39.6
16 
17 ;; AUTHORITY SECTION:
18 baidu.com.        86400    IN    NS    .
19 
20 ;; ADDITIONAL SECTION:
21 .        86400    IN    A    192.168.39.8
22 
23 ;; Query time: 0 msec
24 ;; SERVER: 192.168.39.8#53(192.168.39.8)
25 ;; WHEN: Sat Nov 16 15:55:00 CST 2019
26 ;; MSG SIZE  rcvd: 88

都可以访问了,这样一个DNS服务就完成了。

  4.实现DNS主从服务器的访问(四台机器)

1.增加一个从服务器很简单,新增一个机器,安装DNS服务软件bind

    2.同样需要配置主配置文件/etc/named.conf  注释两行增加一行

1 options {
 2         //listen-on port 53 { 127.0.0.1; };
 3         listen-on-v6 port 53 { ::1; };
 4         directory       "/var/named";
 5         dump-file       "/var/named/data/cache_dump.db";
 6         statistics-file "/var/named/data/named_stats.txt";
 7         memstatistics-file "/var/named/data/named_mem_stats.txt";
 8         recursing-file  "/var/named/data/named.recursing";
 9         secroots-file   "/var/named/data/named.secroots";
10         allow-transfer    { none; };
11         //allow-query     { localhost; };

 

    3.配置从服务器的配置文件/etc/named.rfc1912.zones

1 zone "baidu.com" IN {   #这个区域必须与主服务器上的区域项匹配
2         type slave;       #dns服务器类型
3         masters {192.168.39.8;};  #主服务器的IP
4         file "slaves/baidu.com.slase";  #文件名可以随意
5 };

 

   4.将主服务配置文件/etc/named.conf中的allow-transfer {none;}; 改为从服务器的IP

1 options {
 2 //      listen-on port 53 { 127.0.0.1; };
 3         listen-on-v6 port 53 { ::1; };
 4         directory       "/var/named";
 5         dump-file       "/var/named/data/cache_dump.db";
 6         statistics-file "/var/named/data/named_stats.txt";
 7         memstatistics-file "/var/named/data/named_mem_stats.txt";
 8         secroots-file   "/var/named/data/named.secroots";
 9         recursing-file  "/var/named/data/named.recursing";
10         allow-transfer { 192.168.39.27; };#  增加可以同步的从服务器IP

   5.其实现在启动从服务器上的DNS服务便可以同步主服务器上的bind.dns文件.

    但是主服务器并不知道谁是他的从服务器,所以还需要在主服务器的/var/named/bind.dns(资源记录文件)中加上一个A记录与一个NS记录

   

1 $TTL 1D
 2 ;name TTL  IN      rr_type         value
 3 @          IN       SOA            .    . (
 4                                 0000000001
 5                                 1D
 6                                 2H
 7                                 2D
 8                                 1D
 9 )
10 @          IN        NS          slave
11 slave      IN        A           192.168.39.27
12 @          IN        NS            ns1
13 ns1        IN        A             192.168.39.8
14 www        IN        A             192.168.39.6
15 *          IN        A             192.168.39.6 ;泛解析
16 @          IN        A             192.168.39.6 ;本域

 

    6.停止主服务上的DNS 测试从服务器是否可用  

1 [root@centos7-lvm ~]# dig www.baidu.com
 2 
 3 ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.baidu.com
 4 ;; global options: +cmd
 5 ;; Got answer:
 6 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32407
 7 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
 8 
 9 ;; OPT PSEUDOSECTION:
10 ; EDNS: version: 0, flags:; udp: 4096
11 ;; QUESTION SECTION:
12 ;www.baidu.com.                IN    A
13 
14 ;; ANSWER SECTION:
15 www.baidu.com.      86400      IN    A    192.168.39.6
16 
17 ;; AUTHORITY SECTION:
18 baidu.com.          86400      IN    NS    .
19 baidu.com.          86400      IN    NS    .
20 
21 ;; ADDITIONAL SECTION:
22 .    86400      IN    A    192.168.39.27
23 .      86400      IN    A    192.168.39.8
24 
25 ;; Query time: 1 msec
26 ;; SERVER: 192.168.39.27#53(192.168.39.27)  #从服务器地址 所以从服务器可用
27 ;; WHEN: Sat Nov 16 16:47:39 CST 2019
28 ;; MSG SIZE  rcvd: 128

  5.实现DNS父域和子域服务

  1.父域子域的实现需要也是通过 A记录委派实现的  

      2.父域的资源记录文件上增加子域委派  

1 $TTL 1D
 2 ;name TTL  IN      rr_type         value
 3 @          IN       SOA            .    . (
 4                                 0000000002
 5                                 1D
 6                                 2H
 7                                 2D
 8                                 1D
 9 )
10 @          IN        NS          slave
11 slave      IN        A           192.168.39.27
12 @          IN        NS            ns1
13 google     IN        NS            ns.google
14 ns.google  IN        A             192.168.39.37  #委派给服务器192.168.39.37
15 ns1        IN        A             192.168.39.8
16 www        IN        A             192.168.39.6
17 *          IN        A             192.168.39.6 ;泛解析
18 @          IN        A             192.168.39.6 ;本域

    3.在父域的DNS服务器上还需要将/etc/named.conf文件中的配置更改

1         dnssec-enable no;  #这样项改为no  默认yes
2         dnssec-validation no;

    4.子域服务器改注释的两行和增加的一行完成

    5.配置子域的配置文件/etc/named.rfc1912.conf 和创建资源文件 /var/named/google.baidu.com

    /etc/named.rfc1912.conf 

zone "google.baidu.com" IN {
        type master;
        file "google.baidu.com";
        allow-update { none; };
};

    创建资源配置文件   /var/named/google.baidu.com  

1 $TTL 1D
 2 @        IN   SOA   NS1 mail (
 3                                 000000001
 4                                 1D
 5                                 2H
 6                                 3D
 7                                 10H
 8 )
 9 @        IN   NS    NS1
10 NS1      IN   A     192.168.39.37
11 www      IN   A     192.168.39.6

    6.测试子域

1 [root@centos7-lvm ~]# curl www.google.baidu.com
2 www.google.baidu.com

   6.DNS转发

1.DNS转发

    DNS转发分全局转发和特定区域转发。

    实现DNS全局转发很简单只需在主配置文件/etc/named.conf文件中增加两行

 

1 options {
 2 //      listen-on port 53 { 127.0.0.1; };
 3         listen-on-v6 port 53 { ::1; };
 4         directory       "/var/named";
 5         dump-file       "/var/named/data/cache_dump.db";
 6         statistics-file "/var/named/data/named_stats.txt";
 7         memstatistics-file "/var/named/data/named_mem_stats.txt";
 8         recursing-file  "/var/named/data/named.recursing";
 9         secroots-file   "/var/named/data/named.secroots";
10 //      allow-query     { localhost; };
11         allow-transfer  {none;};
12         forward first;  #转发由两种方式  only  与 first  only是不会去找根域  而first回去找根
13         forwarders {192.168.39.8;};  #转发到DNS的ip

 

    实现DNS特定区域的转发,仅转发对特定的区域的请求,比全局转发优先级高   

1 zone "baidu.com" IN {
2         type forward;
3         forward first;
4         forwarders { 180.76.76.76; }; #返回的是真正的百度页面 因为优先级比全局高,不是我自己弄的页面了
5 };

Centos8 DNS更改后后怎么生效_服务器

     7.智能DNS

  1.实现DNS需要设置acl访问控制,设置访问的IP段。

    2.设置view视图,将匹配的acl与相应的zone文件配置关联起来。

    3.zone文件中的file配置是将解析库关联起来。

    4.解析库中的CNAME(别名记录)配合A记录来最终实现智能DNS

  根据如上步骤来配置 /etc/named.conf  文件实现

  1.设置acl

  acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用

注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面

 

 

1 acl beijingnet {
 2         192.168.39.0/24;
 3 };
 4 
 5 acl shanghainet {
 6         172.16.0.0/16;
 7 };
 8 
 9 acl othernet {
10         any;
11 };

 

  2.view 的配置

   View:视图,将ACL和区域数据库实现对应关系,以实现智能DNS

    一个bind服务器可定义多个view,每个view中可定义一个或多个zone
    每个view用来匹配一组客户端
    多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
   注意:
    一旦启用了view,所有的zone都只能定义在view中,所以需要将原来的根域的配置(zone "." ) 移到其他配置中,我此处移到了/etc/named/rfc1912.conf中

而且需要将include "/etc/named.rfc1912.conf" 删除
    仅在允许递归请求的客户端所在view中定义根区域
    客户端请求到达时,是自上而下检查每个view所服务的客户端列表

view  beijing {
        match-clients { beijingnet;}; #match-clients 中的一定要与acl的名称匹配
        include "/etc/named.beijing";
};
view shanghai {
        match-clients { shanghainet;};
        include "/etc/named.shanghai";
};

view  other {
        match-clients { othernet;};
        include "/etc/named.other";
};
include "/etc/named.root.key";

  3.配置zone文件

  配置zone根前面一样,如下。

zone "baidu.com" {
        type master;
        file "beijingnet";
};

  此处我创建了三个文件分别对应三个区域,格式都一样,只是file 指向了不一样的资源解析文件。

  4.资源解析记录

  创建与zone对应的资源解析文件,zone文件有三个,所以资源解析文件也与之相匹配。

  在资源解析文件中需要增加别名记录与A记录,其他的都一样。

  

1 [root@CentOS-8 named]# cat *net
 2 $TTL 1D
 3 @          IN   SOA  master mail (
 4                 000000001
 5                 1D
 6                 3H
 7                 1D
 8                 1D
 9 )
10 @          IN  NS    master
11 master     IN  A     192.168.39.8
12 www       IN  CNAME web
13 web        IN  A     192.168.39.6    
14 
15 
16 
17 
18 $TTL 1D
19 @          IN   SOA  master mail (
20                 000000001
21                 1D
22                 3H
23                 1D
24                 1D
25 )
26 @          IN  NS    master
27 master     IN  A     192.168.39.8
28 www       IN  CNAME web
29 web        IN  A     192.192.39.27    
30 
31 
32 
33 
34 $TTL 1D
35 @          IN   SOA  master mail (
36                 000000001
37                 1D
38                 3H
39                 1D
40                 1D
41 )
42 @          IN  NS    master
43 master     IN  A     192.168.39.8
44 www       IN  CNAME web
45 web        IN  A     192.168.39.17

  8.总结

    NS记录往往跟一条A记录把名字解析为IPV4的地址

    NS记录和A可实现子域委派,主从服务器。

    CNAME配合A记录实现CND,

    主服务器只可允许从服务器同步。从服务器不可任何主机同步(allow-transfer {none;};)

    子域的委派和DNS转发需要关闭如下

    关闭dnsec功能
    dnssec-enable no;
    dnssec-validation no;