一、什么叫DNS?
DNS
为Domain Name System
(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种服务机制。它在互联网的作用是:把域名转换成网络可以识别的ip地址,在通过IP地址访问主机。比如:我们上网时输入的 www.163.com会自动转换成为202.108.9.16。其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。 DNS使用TCP和UDP, 端口号都是53, 但它主要使用UDP,服务器之间备份使用TCP。
全世界只有13台“根”服务器,1个主根服务器放在美国,其他12台为辅根服务器,DNS服务器根据角色可以分为:主DNS, 从DNS, 缓存DNS服务器,DNS转发服务器。
什么是A记录?
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的二级域名。
什么是NS记录?
NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。
什么是别名记录(CNAME)?
也被称为规范名字。这种记录允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.domain.com”(A记录)。它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。这两个别名的全称就是“www.domain.com”和“mail.domain.com”。实际上他们都指向“host.domain.com”。
什么是泛域名解析?
泛域名解析定义为: 用户的域名aaa.com,之下所设的*.aaa.com全部解析到同一个IP地址上去。 比如客户设mail.aaa.com就会自已自动解析到与aaa.com同一个IP地址上去。
DNS
的查询方式
递归查询:只要发出递归查询,服务器必需回答目标IP与域名的映射关系。一般客户机和服务器之间属递归查询,即当客户机向DNS
服务器发出请求后,若DNS
服务器本身不能解析,则会向另外DNS
服务器发出查询请求,得到结果后转交给客户机;
迭代查询:服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以使其他的DNS
服务器地址。
一般DNS服务器之间属迭代查询,若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便再向DNS3发出请求;
二、使用bind
搭建DNS
服务器
测试环境: CentOS 6.5
主DNS服务器IP:192.168.1.5
辅DNS服务器IP:192.168.1.8
yum install -y bind bind-utils cp /etc/named.conf{,.bak} ## 备份主配置文件 > /etc/named.conf
vim /etc/named.conf
加入如下配置:
options { directory "/var/named"; ## 配置文件目录 }; zone "." IN { ## root根解析 type hint; file "named.ca"; }; zone "localhost" IN { ## 本地解析,localhost解析到127.0.0.1 type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { ## 本地反解析,127.0.0.1解析到localhost type master; file "named.local"; allow-update { none; }; }; include "/etc/rndc.key";
chown named /etc/named.conf ## 更改权限 cd /var/named/ dig -t NS . > named.ca
vim localhost.zone
## 加入
$TTL 600 @ IN SOA localhost. admin.localhost. ( 2 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS localhost. localhost. IN A 127.0.0.1
vim named.loca
## 加入
$TTL 86400 @ IN SOA localhost. admin.localhost. ( 2 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum @ IN NS localhost. 1 IN PTR localhost.
检测配置是否有问题:
named-checkconf
检测正解析:
named-checkzone "localhost" /var/named/localhost.zone
检测反解析:
named-checkzone "0.0.127.in-addr.arpa" /var/named/named.local
生成 rndc.key
, 如果没有这个key namd 是启动不了的。
rndc-confgen -r /dev/urandom -a
更改权限
chown named:named /etc/rndc.key
启动服务
/etc/init.d/named start
查看一下named
进程是否监听了53
端口
netstat -lnp |grep named
首先测试正向解析:
dig @127.0.0.1 localhost.
接着测试反解析:
dig @127.0.0.1 -x 127.0.0.1
三、增加一个域名(zone)
vim /etc/named.conf
## 增加
zone "123.com" IN { ## 域名解析 type master; file "123.com.dns"; allow-update { none; }; ## 表示允许指定的 client 來更新 zone 內的资料 allow-transfer { 192.168.1.8; }; ## 如果有辅助DNS,是否充许它可以同步zone文件。 }; zone "1.168.192.in-addr.arpa" IN { ## 域名反解析,通过IP解析域名 type master; file "123.com.rev"; allow-update { none; }; allow-transfer { 192.168.1.8; }; };
1.168.192.in-addr.arpa
是 192.168.1
网段倒着写 in-addr.arpa
是固定格式
编辑zone
文件:
vim /var/named/123.com.dns
## 增加 注意是这里是正向解析
$TTL 600 @ IN SOA 123.com. root.123.com. ( 2 ; serial 120 ; refresh 14400 ; retry 3600000 ; expiry 86400 ) ; minimum IN NS ns.123.com. ns IN A 192.168.1.5 www IN A 192.168.1.5
编辑反解析文件:
vim /var/named/123.com.rev
## 增加 注意这里是反向解析
$TTL 600 @ IN SOA 123.com. root.123.com. ( 2 ; Serial 120 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum @ IN NS 123.com. 5 IN PTR www.123.com. 5 IN PTR mail.123.com. 5 IN PTR bbs.123.com.
分别检测两个配置文件是否有问题:
named-checkzone "123.com" 123.com.dns named-checkzone "1.168.192.in-addr.arpa" 123.com.rev
重启named
服务测试:
dig @127.0.0.1 www.123.com dig @127.0.0.1 -x 192.168.1.5
四、配置DNS
转发
我们配置的DNS
是只能解析我们定义的zone
的,我们没有定义的是不能解析的。配置DNS
转发就可以解析其他互联网上的域名了,前提是这个域名在互联网中的确在使用,也就是说这个域名已经被某个DNS
服务器解析了。
vim /etc/named.conf
在options{}
里面增加
forward first; forwarders { 8.8.8.8; 8.8.4.4; };
如果只写添加主解析 8.8.8.8
貌似不能解析,需要主辅DNS
一起填写,虽然 /etc/resolv.conf
只填写主DNS也可以正常解析外网.
原理大概就是我们执行 dig @127.0.0.1 www.123.com
可以成功解析,那是因为我们定义了个域名(Zono)
,但是我们执行 dig @127.0.0.1 www.baidu.com
不会成功,是因为www.baidu.com
这个域名,我们并没有在Bind
中定义(Zone)
,所以,当用127.0.0.1
这个DNS
服务器不能解析www.baidu.com
的时候,可以自动转发请求到 8.8.8.8
这个DNS
服务器
重启服务
service named restart
再执行
dig @127.0.0.1 www.baidu.com
五、配置主从
在从服务器上
yum install -y bind bind-utils
拷贝主上的配置文件到从上:
scp /etc/named.conf [email protected]:/etc/named/ scp /var/name/{localhost.zone,named.local} [email protected]:/var/named/
/etc/named.conf, /var/named/localhost.zone, /var/named/named.local
拷贝过来后,修改一下从的/etc/named.conf
内容参考:
options { directory "/var/named"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "named.local"; allow-update { none; }; }; zone "123.com" IN { type slave; file "slaves/123.com.dns"; masters { 192.168.1.5; }; }; zone "1.168.192.in-addr.arpa" IN { type slave; file "slaves/123.dns.rev"; masters { 192.168.1.5; }; }; include "/etc/rndc.key";
生成rndc.key
rndc-confgen -r /dev/urandom -a
更改权限
chown named:named /etc/rndc.key
启动named
/etc/init.d/named start
启动成功后会在 /var/named/
下生成一个slaves
目录,这个目录下会有 123.com.dns
123.com.rev
这两个文件,内容是和主上的一样的
在从上测试
dig @127.0.0.1 www.123.com
再测试没有定义的域名
dig @127.0.0.1 www.baidu.com
六、测试主从同步
在主dns
上更改文件 /var/named/123.com.dns
## 在最后增加一行 ,随便加的哈
test IN A 1.1.1.1
另外需要修改一下第三行的那个数字串,这个是用来做标记的,只有这个数字变化了,才可以让从自动跟着变,数字只能是变大,不能减小
重启主namd
服务:
/etc/init.d/named restart
经测试我们发现一个问题,就是从经常会同步特别慢,这是很要命的。所以需要我们做一个特殊操作,在主上的/etc/named.conf
中,abc.com的zone中增加两行:
notify yes; also-notify { 192.168.0.12; };