DNS domain name system 域名系统
[root@li ~]# vim /etc/nsswitch.conf
hosts: files dns --涉及到名称翻译的都会先查找/etc/hosts,再查找DNS
www.baidu.com --> 公网的IP地址
TCP/IP 架构的网络都是以IP地址做为识别的,做逻辑寻址
但是因为客户不可能记得住那么多IP地址,所以使用一个域名,而DNS做的就是把域名解析为IP地址
DNS服务器
特点:
1,分布式的数据库,
2,解决了数据不一致,避免了名字冲突
3,有缓存机制,提高了性能和可靠性
分层结构,最多127层
查询方式:递归查询,迭代查询
DNS 全世界有13台根域服务器
.com .org .edu .gov .net .mil
商业 组织 教育 政府 通迅 军事
根
cn hk us jp tw in
.com.cn .net.us .edu.cn
深圳电信的DNS地址:
首选的:202.96.134.133
备选的:202.96.128.86 ----------
--对应的linux主机上写DNS指向,由/etc/resolv.conf
vim /etc/resolv.conf
nameserver 10.1.1.35 --可以写三个,第一个没有记录,则找第二个
本地DNS 远端DNS
DNS的工作原理及过程分下面几个步骤:
第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
让我们举一个例子来详细说明解析域名的过程.假设我们的客户机如果想要访问站点:www.linejet.com , 此客户本地的域名服务器是dns.company.com , 一个根域名服务器是NS.INTER.NET , 所要访问的网站的域名服务器是dns.linejet.com,域名解析的过程如下所示:
(1)客户机发出请求解析域名www.linejet.com的报文
(2)本地的域名服务器收到请求后, 查询本地缓存, 假设没有该纪录, 则本地域名服务器dns.company.com则向根域名服务器NS.INTER.NET发出请求解析域名www.linejet.com
(3)根域名服务器NS.INTER.NET收到请求后查询本地记录得到如下结果:linejet.com NS dns.linejet.com (表示linejet.com域中的域名服务器为:dns.linejet.com ), 同时给出dns.linejet.com的地址,并将结果返回给域名服务器dns.company.com。
(4)域名服务器dns.company.com 收到回应后,再发出请求解析域名www.linejet.com的报文。
(5)域名服务器 dns.linejet.com收到请求后,开始查询本地的记录,找到如下一条记录: www.linejet.com A 211.120.3.12 (表示linejet.com域中域名服务器dns.linejet.com的IP地址为:211.120.3.12),并将结果返回给客户本地域名服务器dns.company.com。
(6)客户本地域名服务器将返回的结果保存到本地缓存,同时将结果返回给客户机。
这样就完成了一次域名解析过程,
bind (berkeley intenet name domain)
yum install bind* -y
软件包;
bind.i386 --主服务软件包
bind-chroot.i386 -- 笼环境软件包
bind-devel.i386 --开发包
bind-libs.i386 --库文件
bind-utils.i386 --工具包
协议端口: tcp/udp 53
查询DNS记录只使用udp 53端口
主DNS服务器和备DNS服务器之间的数据同步使用tcp 53端口
配置文件的目录:
没有安装bind-chroot.i386的话
配置文件为/etc/named.conf
数据文件在/var/named目录下
安装了bind-chroot.i386
配置文件为/var/named/chroot/etc/named.conf --默认没有
数据文件在/var/named/chroot/var/named目录
从上面看到装了bind-chroot,笼环境为/var/named/chroot/
[root@dns data]# ls /var/named/chroot/etc/ --域配置文件目录
localtime rndc.key
[root@dns data]# ls /var/named/chroot/var/named/
data slaves
[root@dns data]# ls /var/named/chroot/var/named/data/ --存放主zone文件
[root@dns data]# ls /var/named/chroot/var/named/slaves/ --存放从zone文件
配置前的准备:
主机名三步,改好
hostname dns.cluster.com
vim /etc/hosts
10.1.1.35 dns.cluster.com
vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=dns.cluster.com
配置步骤:
1,编辑named.conf --记录你的域和域对应的数据文件在哪
2, 编辑zone区域文件 --就是数据文件,记录域名和IP的对应
vim /var/named/chroot/etc/named.conf --手动建立
第一步:编辑named.conf
vim /var/named/chroot/etc/named.conf
options {
directory "/var/named"; --定义你的目录路径,指的是/var/named/chroot/var/named/
};
zone "cluster.com" IN { --单独对cluster.com这个域的定义,注意“引号里不要有空格
type master; --定义dns服务器的类型为主
file "data/master.cluster.com.zone";--定义存放域名和IP地址对应的区域文件存放的地方
};
[root@dns data]# vim /var/named/chroot/var/named/data/master.cluster.com.zone
$TTL 86400 --生存时间,对应缓存多久
@ IN SOA dns.cluster.com. root. ( --定义一个授权域的开始
2011050401 --版本号,最好写十位数
120
240
360
86400 )
IN NS dns.cluster.com. --定义域为cluster.com
dns IN A 10.1.1.35 --表示li.cluster.com对应10.1.1.35
www IN A 11.22.33.44 --对应的ipDNS只负责解析,但能不能找到不是DNS的职责
[root@dns data]# /etc/init.d/named restart
客户端的操作:
[root@li ~]# vim /etc/resolv.conf
nameserver 10.1.1.35 --把这个指向DNS服务器
验证:现在在firefox里输入 http://li.cluster.com就访问到笔记了,就是因为解析成10.1.1.35了
还可以使用下面的三种命令来解析
nslookup - query Internet name servers interactively
dig - DNS lookup utility
host - DNS lookup utility
[root@li ~]# nslookup li.cluster.com
Server: 10.1.1.35
Address: 10.1.1.35#53
Name: li.cluster.com
Address: 10.1.1.35
[root@li ~]# dig li.cluster.com
[root@li ~]# host li.cluster.com
li.cluster.com has address 10.1.1.35
例二:反向解析
IP解析为域名 (邮件服务器反垃圾邮件时可以应用)
第一步:主配置文件添加以下区域:
zone "1.1.10.in-addr.arpa" IN {
type master;
file "data/master.1.1.10.in-addr.arpa.zone";
};
第二步:建立区域数据文件
[root@li ~]# vim /var/named/chroot/var/named/data/master.1.1.10.in-addr.arpa.zone
$TTL 86400
@ IN SOA 1.1.10.in-addr.arpa. root. (
2011050401
120
240
360
86400 )
IN NS dns.cluster.com.
35 IN PTR dns.cluster.com. --注意有点.号
[root@li ~]# /etc/init.d/named restart
[root@dns data]# nslookup 10.1.1.35
Server: 10.1.1.35
Address: 10.1.1.35#53
35.1.1.10.in-addr.arpa name = dns.cluster.com.
例三,使用DNS的轮循实现简单的负载均衡
[root@dns data]# vim /var/named/chroot/var/named/data/master.cluster.com.zone
$TTL 86400
@ IN SOA dns.cluster.com. root. (
2011050401
120
240
360
86400 )
IN NS dns.cluster.com.
dns IN A 10.1.1.35
IN A 10.1.1.36
IN A 10.1.1.37
www IN A 11.22.33.44
使用nslookup验证,会实现自动轮循
[root@dns data]# /etc/init.d/named restart
[root@dns data]# nslookup dns.cluster.com --每次访问下面的IP顺序都会变动,大多数客户端会访问第一个IP
Server: 10.1.1.35
Address: 10.1.1.35#53
Name: dns.cluster.com
Address: 10.1.1.35
Name: dns.cluster.com
Address: 10.1.1.36
Name: dns.cluster.com
Address: 10.1.1.37
例四:CNAME记录的使用 --与apache里虚拟主机课程有联系(同一台主机多少域名)
$TTL 86400
@ IN SOA dns.cluster.com. root. (
2011050401
120
240
360
86400 )
IN NS dns.cluster.com.
dns IN A 10.1.1.35
IN A 10.1.1.36
IN A 10.1.1.37
www IN A 11.22.33.44
bbs IN CNAME www
sports IN CNAME www
news IN CNAME www
[root@dns data]# /etc/init.d/named reload
验证时
nslookup www.cluster.com
nslookup bbs.cluster.com
nslookup sports.cluster.com
nslookup news.cluster.com
全部返回的是同一个IP地址
例五:实现直接对域的解析
$TTL 86400
@ IN SOA dns.cluster.com. root. (
2011050401
120
240
360
86400 )
IN NS dns.cluster.com.
dns IN A 10.1.1.35
IN A 10.1.1.36
IN A 10.1.1.37
www IN A 11.22.33.44
bbs IN CNAME www
sports IN CNAME www
news IN CNAME www
cluster.com. IN A 10.1.1.35 --注意com后面有点.
/etc/init.d/named reload
[root@dns data]# nslookup cluster.com
Server: 10.1.1.35
Address: 10.1.1.35#53
Name: cluster.com
Address: 10.1.1.35
例六:使用通配符实现泛解析
* IN A 10.1.1.35 --使用*号表示任何主机头
/etc/init.d/named reload
[root@li ~]# nslookup sldfjsladfjasfjdsa.cluster.com --主机头任意字符,都解析为10.1.1.35
Server: 10.1.1.35
Address: 10.1.1.35#53
Name: sldfjsladfjasfjdsa.cluster.com
Address: 10.1.1.35
例七:实现连接范围域名解析 --跟DHCP结合,可以在分配IP的同时分配主机名
实现station1~station254.cluster.com 与10.1.1.1~10.1.1.254的对应
正向DNS的写法
# vim /var/named/chroot/var/named/data/master.cluster.com.zone
$GENERATE 1-254 station$ IN A 10.1.1.$
/etc/init.d/named reload
测试:
nslookup 测试
反向DNS的写法
# vim /var/named/chroot/var/named/data/master.1.1.10.in-addr.arpa.zone
$GENERATE 1-254 $ IN PTR station$.cluster.com.
测试:
nslookup 测试
例8: 辅助DNS服务器(从DNS服务器)的配置
主 35
备 71
10.1.1.35 10.1.1.71
主 ---- 从
type master type slave
zone文件 被动的从主传过来zone文件
从DNS服务器的准备工作:
和主DNS服务器一样
1,配置从服务器的主配置文件
vim /var/named/chroot/etc/named.conf
options {
directory "/var/named";
};
zone "cluster.com" IN {
type slave; --类型定义为slave
file "slaves/slave.cluster.com.zone"; --最好把zone文件定义到slaves目录下
masters { 10.1.1.35; }; --指定主DNS服务器的IP地址
};
[root@localhost ~]# ls /var/named/chroot/var/named/slaves/ --此目录下什么都没有
[root@localhost ~]# /etc/init.d/named start --启动named服务
Starting named: [ OK ]
[root@localhost ~]# ls /var/named/chroot/var/named/slaves/ --再次查看发现是主上面下载过来了
slave.cluster.com.zone
如果不能下载过来:
查看网络是否连通,就是ping一下
查看iptables,selinux是否关闭
时间是否同步等
[root@localhost ~]# tail /var/log/messages
Mar 23 15:17:58 localhost named[6939]: zone cluster.com/IN: Transfer started.
Mar 23 15:17:58 localhost named[6939]: transfer of 'cluster.com/IN' from 10.1.1.35#53: connected using 10.1.1.71#60355
Mar 23 15:17:58 localhost named[6939]: zone cluster.com/IN: transferred serial 2011032301
Mar 23 15:17:58 localhost named[6939]: transfer of 'cluster.com/IN' from 10.1.1.35#53: end of transfer
Mar 23 15:17:58 localhost named[6939]: zone cluster.com/IN: sending notifies (serial 2011032301)
例九:验证主DNS到从DNS的更新
1,更新主服务器的区域文件的记录,注意,加大版本号
vim /var/named/chroot/var/named/data/master.cluster.com.zone
随便添加一条记录,然后增大版本号的数字,最好把刷新时间改小点(比如60秒)
2,/etc/init.d/named restart --重启服务
3,在从域名服务器这里查看
1,直接删除/var/named/chroot/var/named/slaves/slave.cluster.com.zone 文件
然后重启服务
2,从DNS服务器什么都不用做,用watch tail /var/log/messages查看日志看是否能够自动更新过来 --或者使用tail -f来查看
例十:限制从DNS的IP
主对从DNS的限制
vim /var/named/chroot/etc/named.conf
zone "cluster.com" IN {
type master;
file "data/master.cluster.com.zone";
allow-transfer { 10.1.1.71; }; --加上这一句,限制了只有71这台机才能做这个域的从DNS
};
例十一:转发服务器的设置
前面所做的全是一个域的情况,也就是我只能解析cluster.com这一个域,如果想要解析另外一个域
方法一:在named.conf里再写一个域
然后再配置一个对应zone数据文件
重启服务
方法二:做转发
单域转发
1,named.conf里加上下面一段
zone "man.com" IN {
type forward;
forwarders { 10.1.1.127; };
};
/etc/init.d/named restart
[root@li ~]# nslookup station171.man.com --查找能查出来,是因为127的DNS服务器的zone文件里有,我这里转发过去查找到结果,再返回过来
Server: 10.1.1.45
Address: 10.1.1.45#53
Non-authoritative answer:
Name: station171.man.com
Address: 10.1.1.171
2,完全转发
options {
directory "/var/named";
forwarders { 10.1.1.1; }; --这是写到options里的完全转发,指的是本机的zone文件查不到的情况,会去查找10.1.1.1,都查不到才会返回错误
};
options {
directory "/var/named";
forwarders { 10.1.1.127;10.1.1.199; }; --可以用分号隔开,写多个转发服务器的IP
};
=============================================================
实现子域
主域DNS服务器 子域DNS服务器
172.16.232.1 172.16.232.137
主机名 li.cluster.com dns.bbs.cluster.com
主域名 cluster.com
子域名 bbs.cluster.com
第一步:在主域服务器上对子域进行授权
# vim /var/named/chroot/etc/named.conf
options {
directory "/var/named";
};
zone "cluster.com" IN {
type master;
file "data/master.cluster.com.zone";
};
[root@dns data]# vim /var/named/chroot/var/named/data/master.cluster.com.zone
$TTL 86400
@ IN SOA dns.cluster.com. root. (
2011050402
60
240
360
86400 )
IN NS dns.cluster.com.
bbs.cluster.com. IN NS dns.bbs.cluster.com.
dns IN A 2.2.2.35
dns.bbs.cluster.com. IN A 172.16.232.137
# /etc/init.d/named restart
第二步:配置子域服务器
# vim /var/named/chroot/etc/named.conf
options {
directory "/var/named";
};
zone "bbs.cluster.com" IN {
type master;
file "data/master.bbs.cluster.com.zone";
};
# vim /var/named/chroot/var/named/data/master.bbs.cluster.com.zone
$TTL 86400
@ IN SOA dns.bbs.cluster.com. root. (
2011050401
120
240
360
86400 )
IN NS dns.bbs.cluster.com.
www IN A 1.2.3.4
abc IN A 5.6.7.8
# /etc/init.d/named restart
验证,再使用一台虚拟机(172.16.232.138)做客户端进行验证
vim /etc/resolv.conf 指向主域DNS服务器172.16.232.1,可以查看主和子的所有记录
但是指向子域DNS服务器172.16.232.137时,只能查看子的记录,不能查看主的记录
解决方法: 做转发
做主从(137又是1的子,又是1的从)