1. DNS介绍
DNS为Domain Name System(域名系统)的缩写,它是一种将IP地址转换成对应的主机名或将主机名转换成与之对应的IP地址的服务机制。其中通过域名解析出IP地址的叫做正向解析,通过IP地址解析出域名的叫做反向解析。DNS使用TCP和UDP,端口号都是53,但它主要使用UDP,服务器中间备份使用TCP。全世界只有13台“根”服务器,1个主根服务器放在美国,其它12太为辅根服务器。
DNS服务器根据角色可以分为:
- 主DNS
- 从DNS
- DNS缓存服务器
- DNS转发服务器
当有了网站域名,那是如何解析到IP的呢?下面为域名解析的过程:
- 在浏览器中输入www.lishiming.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址的映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
- 如果hosts文件里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
- 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找本机设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则反回解析结果给客户机,完成域名解析,词解析具有权威性。
- 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已经缓存了此网址的映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
- 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发)进行查询,如果未用转发模式,本地DNS就把请求发送至13台根DNS,根DNS服务器收到请求后会判断这个域名(.net)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会练习负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,它就会找一个管理.net域的下一级DNS服务器(lishiming.net)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找lishiming.net域服务器,重复上面的动作,进行查询,直至找到www.lishiming.net主机。
- 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求专职上上级DNS服务器,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
2. bind安装配置
2.1. 安装
我们使用bind来搭建DNS服务。首先安装bind
2.2. 配置本地的域
- 把默认的配置文件清空(改文件是主配置文件),然后我们自定义配置:
> /etc/named.conf
vim /etc/named.conf
加入如下配置:
123456789101112131415161718options {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";};保存配置后,修改其属主:
12chown named /etc/named.confcd /var/named/
接下来:
定义根域配置文件:
1dig -t NS . > named.ca然后定义本地域配置:
123456789101112# vim localhost.zone#<==加入如下内容@ IN SOA localhost. admin.localhost. (20130816011H10M7D1D)@ IN NS localhost.localhost. IN A 127.0.0.1再配置反解析配置:
12345678910111213# vim named.local#<==加入如下配置86400@ IN SOA localhost. admin.localhost. (2013081601iH10M7D1D)@ IN NS localhost.1 IN PTR localhost
进行检测:
检测配置是否有问题:
1named-checkconf检测正解析
1named-checkzone "localhost" /var/named/localhost.zone检测反解析
1# named-checkzone "0.0.127.in-addr.arpa" /var/named/named.conf生成rndc.key,如果没有这个key,named是启动不了的。
12rndc-confgen -r /dev/urandom -achown named:named /etc/rndc.key启动named服务:
1/etc/init.d/named start查看是否有53端口
1netstat -lnp | grep named首先测试正向解析:
1# dig @127.0.0.1 localhost.接着测试反解析:
1# dig @127.0.0.1 -x 127.0.0.1
2.3. 增加一个域名(zone)
上面的操作仅仅是建立了一个本地的域localhost,还不是我们想要的,下面再增加一个域名(zone):
编辑zone文件
编辑反解析文件:
分别检测两个配置文件是否有问题:
named-checkzone "abc.com" abc.com.zone
named-checkzone "137.168.192.in-addr.arpa" 192.168.zone
重启named服务,测试:
dig @127.0.0.1 www.abc.com
dig @127.0.0.1 -x 192.168.127.11
abc.com的域配置好后,要想使用它必须把系统里面的DNS服务器IP设定为这台机器的IP,但是这样也会带来一个问题,那就是它只能解析abc.com的域名,其它域名不能解析,比如www.lishiming.net它没有办法解析,这时候需要给它配置DNS转发。
2.4. DNS转发配置
|
|
这两行就是用来配置转发的,该DNS服务器不能解析的域名会转发到8.8.8.8这个DNS服务器上去解析。
2.5. DNS主从配置
任何服务都有可能因为某些原因导致不能正常提供服务,所以我们有必要为DNS服务器配置一个备用的,但是这两台服务器需要保证数据的一致性。比如我们更改主上配置把www.abc.com解析IP更改了,那么备用服务器上也得跟着自动变。下面的步骤就是配置主从的。
首先,在从服务器上安装bind:
1yum install -y bind然后拷贝主上的配置文件到从上,在这里主服务器的IP为192.168.0.11,从服务器IP为192.168.0.12(注意,下面的操作是在主服务器上)
123# scp /etc/named.conf 192.168.0.12:/etc/# scp /var/named/localhost.zone 192.168.0.12:/var/named/# scp /var/named/named.local 192.168.0.12:/var/named/从服务器上,拷贝过来后,修改一下
/etc/named.conf
,内容如下:123456789101112131415161718192021222324252627282930options {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";};zone "abc.com" IN {type slave;file "slaves/abc.com.zone";masters { 192.168.0.11; };};zone "137.168.192.in-addr.arpa" IN {type slave;file "slaves/192.168.zone";masters { 192.168.0.11; };};从上生成rndc.key:
12rndc-confgen -r /dev/urandom -achown named:named /etc/rndc.key从上启动named:
1/etc/init.d/named start启动成功后会在/var/named/下生成一个slave目录,这个目录下会有192.168.zone和abc.com.cone这两个文件,内容是和主上的一样。
- 然后在从上测试是否可以解析:1# dig @127.0.0.1 www.abc.com
下面我们测试主从同步:
在主DNS上更改文件/var/named/abc.com.zone
123#<==在最后增加一行123 IN A 1.1.1.1另外需要修改一下第三行的那个数字串,这个是用来做标记的,只有这个数字变化了,才可以让从自动跟着便,数字只能变大,不能减小,把2013081601改成2013081602
重启主named服务:
1/etc/init.d/named restart经测试我们发现一个问题,就是从经常hi同步特别慢,这是很要命的。所以需要我们做一个特殊操作
- 在主上的/etc/named.conf中,abc.com的zone中增加两行:12notify yes;also-notify { 192.168.0.12; };
- 在主上的/etc/named.conf中,abc.com的zone中增加两行: