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的,下图为域名解析流程图:
域名解析过程
- 在浏览器输入www.baidu.com域名,操作系统会先检查自己本地的hosts文件,是否有这个网址的映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts里没有这个域名的映射,则查找本地的DNS解析缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 如果hosts与本地DNS解析缓存器中都没有相应的网址映射关系,首先会找本机设置的首选DNS服务器,再次我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址的映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失败,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用本地转发,本地DNS就把请求发至13台跟DNS,跟DNS收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS收到IP后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己已无法解析,他会找一个关系.com域下一级的DNS服务器地址(baidu.com)域服务器,重复上面的动作进行查询,直到找到www.baidu.com主机。
- 如果用的是转发模式,此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
19cp /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 | chown named /etc/named.conf |
2. 增加一个域名(zone)
1 | vim /etc/named.conf |
编辑zone文件:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16vim /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
12vim /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 | /etc/init.d/named restart |
3. 配置DNS转发
我们配置的DNS是只能解析我们定义的zone的,我们没有定义的是不能解析的。
配置DNS转发就可以解析其他互联网上的域名了,前提是这个域名在互联网中的确在使用,也就是说这个域名已经被某个DNS服务器解析了。1
2
3
4vim /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 | options { |
从上生成rndc.key:1
2rndc-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
2dig @192.168.189.133 www.123.com #检测正解析
dig @192.168.189.132 -x 192.168.189.131 #检测反解析
5. 测试主从同步
在主dns上更改文件1
2
3
4vim /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 | notify yes; |