DNS服务及安装配置

DNS介绍

DNS 为Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种服务机制。

其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。 DNS使用TCP和UDP, 端口号都是53, 但它主要使用UDP,服务器之间备份使用TCP。

全世界只有13台“根”服务器,1个主根服务器放在美国,其他12台为辅根服务器,DNS服务器根据角色可以分为:主DNS, 从DNS, 缓存DNS服务器,DNS转发服务器。


有了网站域名,下面来看看域名 https://www.baidu.com 是如何解析到IP的,下图为域名解析流程图:

域名解析过程
  1. 在浏览器输入www.baidu.com域名,操作系统会先检查自己本地的hosts文件,是否有这个网址的映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果hosts里没有这个域名的映射,则查找本地的DNS解析缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  3. 如果hosts与本地DNS解析缓存器中都没有相应的网址映射关系,首先会找本机设置的首选DNS服务器,再次我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址的映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  5. 如果本地DNS服务器本地区域文件与缓存解析都失败,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用本地转发,本地DNS就把请求发至13台跟DNS,跟DNS收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS收到IP后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己已无法解析,他会找一个关系.com域下一级的DNS服务器地址(baidu.com)域服务器,重复上面的动作进行查询,直到找到www.baidu.com主机。
  6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级进行解析,上一级服务器如果不能解析,或找跟DNS或把转发请求转至上上级,以此循环,不管是本地DNS服务器用到是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由这个DNS服务器再返回给客户机。

DNS安装配置

我们使用bind来搭建DNS服务首先:

1. 安装bind
1
yum install -y bind bind-utils

清空默认配置文件,自定义配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cp /etc/named.conf /etc/named.conf.bak  
>/etc/named.conf
vim /etc/named.conf #写入如下配置

options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};

保存配置,然后修改其属性,定义本地根域配置

1
2
3
chown named /etc/named.conf
cd /var/named/
dig -t NS . > named.ca
2. 增加一个域名(zone)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vim /etc/named.conf 
// 增加:
zone "123.com" IN {
type master;
file "123.com.zone";
};

zone "189.168.192.in-addr.arpa" IN {
type master;
file "189.168.192.zone";
};

// 修改:
listen-on port 53 { 127.0.0.1;192.168.189.131; };

编辑zone文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim /var/named/123.com.zone
//增加下列配置:

$TTL 1D
@ IN SOA @ admin.123.com. (
2017032602 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.123.com.
IN MX 5 mail.123.com.
mail IN A 192.168.189.133
ns IN A 192.168.189.131
www IN A 11.11.11.11
bbs IN CNAME www

编辑反解析文件:

1
2
3
4
5
6
7
8
9
10
11
12
vim /var/named/189.168.192.zone
//增加
$TTL 1D
@ IN SOA @ admin.123.com. (
20170326 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.123.com.
131 IN PTR ns.123.com.
133 IN PTR mail.123.com.

重启named服务,测试

1
2
3
4
5
/etc/init.d/named restart                                 
停止 named: [确定]
启动 named: [确定]
dig @192.168.189.131 www.123.com #检测正解析
dig @192.168.189.131 -x 192.168.189.131 #检测反解析
3. 配置DNS转发

我们配置的DNS是只能解析我们定义的zone的,我们没有定义的是不能解析的。
配置DNS转发就可以解析其他互联网上的域名了,前提是这个域名在互联网中的确在使用,也就是说这个域名已经被某个DNS服务器解析了。

1
2
3
4
vim  /etc/named.conf 
//在options{} 里面增加
forward first;
forwarders { 114.114.114.114; };

这两行就是用来配置转发的,该DNS服务器不能解析的域名会转发到114.114.114.114这个DNS服务器上去解析。

4. 配置主从

在从服务器上

1
yum install -y bind bind-utils

修改一下从的/etc/named.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
options {
// listen-on port 53 { 127.0.0.1; };
// 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";
allow-query { localhost; };
recursion yes;

dnssec-enable yes;
dnssec-validation yes;

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

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

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";

zone "123.com" IN {
type slave ;
file "slaves/123.com.zone";
masters { 192.168.189.131; };
};

zone "189.168.192.in-addr.arpa" IN {
type slave;
file "slaves/189.168.192.zone";
masters { 192.168.189.131; };
};

从上生成rndc.key:

1
2
rndc-confgen -r /dev/urandom -a 
chown named:named /etc/rndc.key

从上启动named:

1
/etc/init.d/named start

启动成功后会在 /var/named/下生成一个slaves目录,这个目录下会有192.168.zone, abc.com.zone这两个文件,内容是和主上的一样的
在从上测试:

1
2
dig @192.168.189.133 www.123.com  #检测正解析
dig @192.168.189.132 -x 192.168.189.131 #检测反解析

5. 测试主从同步

在主dns上更改文件

1
2
3
4
vim /var/named/123.com.zone 
// 在最后增加一行:

graped IN A 111.111.111.111

另外需要修改一下第三行的那个数字串,这个是用来做标记的,只有这个数字变化了,才可以让从自动跟着变,数字只能是变大,不能减小,

1
2016081601 -> 2016081602

重启主namd服务:

1
/etc/init.d/named restart

经测试我们发现一个问题,就是从经常会同步特别慢,这是很要命的。所以需要我们做一个特殊操作,在主上的/etc/named.conf中,123.com的zone中增加两行:

1
2
notify yes;
also-notify { 192.168.0.12; };