CentOS下各种DNS资源的配置


一.本文环境

  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 ns1.baidu.com. mail.baidu.com. (  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>www.google.com</h1>
3 [root@centos7-lvm ~]# curl wwwwwww.baidu.com #因为泛解析所以能正确访问到 baidu.com这个域
4 <h1>www.google.com</h1>
5 [root@centos7-lvm ~]# curl baidu.com
6 <h1>www.google.com</h1> 
7 [root@centos7-lvm ~]# curl aaaaaa.baidu.com # 因为泛解析所以能正确访问到 baidu.com这个域
8 <h1>www.google.com</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 ns1.baidu.com. 19 
20 ;; ADDITIONAL SECTION: 21 ns1.baidu.com.        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            ns1.baidu.com.    mail.baidu.com. (
 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 ns1.baidu.com. 19 baidu.com.          86400 IN NS slave.baidu.com. 20 
21 ;; ADDITIONAL SECTION: 22 slave.baidu.com.    86400      IN    A    192.168.39.27
23 ns1.baidu.com.      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 ns1.baidu.com. mail.baidu.com. (  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 };

     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;

    

   

     

 

 

    

    

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM