一.本文环境
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.com6 <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; };# 增加可以同步的从服务器IP5.其实现在启动从服务器上的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: 1285.实现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.66.测试子域
1 [root@centos7-lvm ~]# curl www.google.baidu.com
2 www.google.baidu.com6.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.178.总结
NS记录往往跟一条A记录把名字解析为IPV4的地址
NS记录和A可实现子域委派,主从服务器。
CNAME配合A记录实现CND,
主服务器只可允许从服务器同步。从服务器不可任何主机同步(allow-transfer {none;};)
子域的委派和DNS转发需要关闭如下
关闭dnsec功能
dnssec-enable no;
dnssec-validation no;
















