在LINUX下面架设DNS服务器,不知道DNS解析原理,根本会了和不会没区别,
网络中为了区别各个主机,必须为每台主机分配一个惟一的地址,这个地址即称为“IP地址”。但这些数字难以记忆,所以就采用“域名”的方式来取代这些数字了。
当某台主机要与其他主机通信时,就可以利用主机名称向DNS服务器查询该主机的IP地址,所以我们的网卡要上网至少要3个信息,IP地址,网关,DNS服务器地址。
DNS的组织结构
image
这个就是DNS的组织结构,最上面是根域名 dot,全球13台根域服务器,没有一台在中国,因为中国网络发展,起步迟。而且所有的dot DNS服务器都是bind软件架设的,我们今天要学习的也是bind软件。全球70%的大型DNS服务器都是基于bind软件。
常见的顶级域服务器
image
我国的顶级域也就只有cn
DNS解析过程
image
我给大家解释下,比如解析[url]www.redhat.com[/url],第一步,查询本地host文件和缓存有没有这个记录,有就直接解析,没有就访问DNS服务器,如果DNS服务器上没[url]www.redhat.com[/url]或 者redhat.com不在你访问的DNS服务器管理区域内,那么DNS服务器就会向dot根域名服务器发递归查询,如果找到了记录了,DNS就会返回给 client,并且把记录保存在自己缓存里,下次有client请求,他就会调用自己的缓存,直到这条记录的生存期结束,就会丢弃这条记录。
根域名服务器就13台域名服务器,他负责管理顶级域。顶级域负责管理二级域,我们现在申请的一般是2级域名-3级域名。比如 michael.com,michael.com.cn哈~michael.com是2级域名,michael.com.cn是3级域 名,michael.com.cn.这个就是FQDN。
本周我们要学习的内容
主配置文件 
设置根区域 
设置主区域 
设置反向解析区域 
根服务器信息文件named.ca 
区域文件 
反向解析区域文件 
实现负载均衡功能 
实现直接解析域名 
实现泛域名的解析 
主要名称服务器的测试 
配置辅助域名服务器
配置缓存域名服务器
我们申请的是域名,然后你去管理你的域名,自己添加主机记录哈~
其实michael.cn是域名,前面的主机记录随便你怎么写,abc.michael.cn也行,jfajldjfklajdfkljaklf.michael.cn也行,michael.com是域名,www是主机。
比如[url]www.redhat.com[/url][url]www.redhat.com.[/url] 最后点是根域名,然后com是顶级域名,redhat是二级域名,www是主机记录,如果你要说[url]www.redhat.com[/url]是域名也可以,那么主机就改成是[url]www.www.redhat.com[/url].了,在选择域名时必须符合RCF 1123中的规定:域名由所有大写字母(A~Z)、小写字母(a~z)、数字(0~9)和连字符(-)组成。由于很多域名商,所以现在想申请到好的2及域名是不可能了,域名大小写不敏感。
每台主机都有一个host文件,负责IP地址的域名快速解析的文件,文件以ASCII格式保存在“/etc”目录下,文件名为“hosts”,hosts文件包含了IP地址和主机名之间的映射,还包括主机名的别名。
hosts文件的格式如下:
IP地址 主机名/域名  主机别名 
windows下也有hosts文件,C:\WINDOWS\system32\drivers\etc
image
可以使用记事本打开
image
如果host里有记录就会优先使用,这个文件也是***,和病毒软件***你的一个入口,如果某个病毒软件在这个文件添加一个记录202.23.23.1   [url]www.163.com[/url], 然而前面这个IP地址是带有病毒的而已网站,或者是钓鱼***,你可能就会出问题,所以这个文件一般修改成只读,还有些第三方软件,为了防止一些***之类的 病毒,会把一些有问题的网站在自理定义,解析成127.0.0.1,这样你就不会访问到这些网站,360就会这么干哈~
linux也有这个文件
/etc/hosts
image
image
好了,下面介绍下bind软件,Linux下架设DNS服务器通常是使用Bind程序来实现的。
Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件。Bind原本是美国DARPA资助伯克里大学(Berkeley)开设的一个研究生课 题,后来经过多年的变化发展,已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上绝大多数的DNS服务器有都是用Bind来架设的。
DNS服务介绍 
后台进程:named
脚本:/etc/rc.d/init.d/named
使用端口:53(tcp,udp)
所需RPM包:bind-9.3.3-10.el5
相关RPM包:bind-chroot
                    caching-nameserver
配置文件:/var/named/chroot/etc/named.conf
相关路径:/var/named/
1990年以后,bind-chroot增加了bind服务器的安全性,早期Linux服务都是以root权限启动和运行的,随着技术的发展, 各种服务变得越来越复杂,导致BUG和漏洞越来越多。***利用服务的漏洞***系统,能获得root级别的权限,从而控制整个系统。
为了减缓这种***所带来的负面影响,现在服务器软件通常设计为以root权限启动,然后服务器进程自行放弃root,再以某个低权限的系统账号来运行进程。这种方式的好处在于该服务被***者利用漏洞***时,由于进程权限很低,***者得到的访问权限又是基于这个较低权限。
bind的主配置文件/etc/named.conf ,我们先安装bind服务器
[root@rhel5 ~]# rpm -ivh /mnt/cdrom/Server/bind-9.3.3-10.el5.i386.rpm
warning: /mnt/cdrom/Server/bind-9.3.3-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:bind                   ########################################### [100%]
[root@rhel5 ~]# rpm -ivh /mnt/cdrom/Server/bind-libbind-devel-9.3.3-10.el5.i386.rpm
warning: /mnt/cdrom/Server/bind-libbind-devel-9.3.3-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:bind-libbind-devel     ########################################### [100%]
[root@rhel5 ~]# rpm -ivh /mnt/cdrom/Server/bind-sdb-9.3.3-10.el5.i386.rpm
warning: /mnt/cdrom/Server/bind-sdb-9.3.3-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:bind-sdb               ########################################### [100%]
[root@rhel5 ~]# rpm -ivh /mnt/cdrom/Server/bind-devel-9.3.3-10.el5.i386.rpm
warning: /mnt/cdrom/Server/bind-devel-9.3.3-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:bind-devel             ########################################### [100%]
[root@rhel5 ~]# rpm -ivh /mnt/cdrom/Server/caching-nameserver-9.3.3-10.el5.i386.rpm
warning: /mnt/cdrom/Server/caching-nameserver-9.3.3-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:caching-nameserver     ########################################### [100%]
[root@rhel5 ~]# rpm -ivh /mnt/cdrom/Server/bind-chroot-9.3.3-10.el5.i386.rpm
warning: /mnt/cdrom/Server/bind-chroot-9.3.3-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:bind-chroot            ########################################### [100%]
[root@rhel5 ~]#
 image
注意:bind-chroot软件包最好最后一个安装,否则会报错哈~~~
image
bind的配置文件默认是没有的,需要自己手写,但是很多,容易写错,所以我们安装模板文件,然后来修改。由于安装了chroot环境,所以我们的/etc/named.conf  应该在/var/named/chroot/etc/ 目录。
image
image
没有named.conf,所以我们要把named.caching-name.conf文件copy一份成named.conf哈~
cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf
 image
编辑named.conf这个文件,把文件里面多余的东西删除了,只剩下如图中的内容,然后我们来写
image
先检查你主机的名字,使用hostname
image
记住,linux的主机名要是FQDN的样式,把你们自己的主机名字改改,不要最后的那个,这个很重要的。
刚才讲了FQDN最后有根域的,把那个跟域去掉,就是你的主机名,改成那个样子。
linux修改主机名字修改三个地方,不知道大家还记得不?
第一步:hostname 主机名
image
第二步:vim /etc/hosts
image
第三步:vim /etc/sysconfig/network
 image
修改完了把终端关闭了,然后重新打开就可以了
image
修改完了,我们继续
下面我以michael.com这个二级域名来建立一个域名服务器
 image
全局配置(options ) 
options 语句在每个配置文件中只有一个。如果出现多个options, 则第一个options 的配置有效,并会产生一个警告信息。
listen-on port 53 { 127.0.0.1; };
监听端口,修改成自己的IP地址,如果有多个IP,就写多个,每行要以;结束。
directory       "/var/named";
zone文件的存放目录,这里的/var/named 是相对目录,在chroot环境下/var/named目录下。
allow-query     { localhost; };
允许查询的client,我们修改成本地网段192.168.1.0/24
image
下面我们开始写zone文件
区域配置(zone ) 
zone 语句作用是定义DNS 区域,在此语句中可定义DNS 区域选项
zone区域设置,第一步,设置根区域
当DNS服务器处理递归查询时,如果本地区域文件不能进行查询的解析,就会转到根DNS服务器查询,所以在主配置文件named.conf文件中还要定义根区域。
zone "." { 
type hint;
file "named.ca"; 
};
type:设置域的类型
file:设置根服务列表文件名
image
“.” 意思的根区域
IN 是internet记录
type是类型 根的类型是hint
file是根区域文件
下面我们去看看根区域文件,根的类型
image
这些就是根服务器,你数数,全球13台。
image
继续,指定正向解析的配置文件
记住,bind对配置文件要求很严格,就算是有些地方多了个空格,服务器都可能启动不了哈~
image
反向解析配置文件
image
一个简单的named.conf配置文件
image
保存,然后我们去修改区别文件,添加记录
cp /var/named/chroot/var/named/localhost.zone /var/named/chroot/var/named/michael.com.zone
image
michael.com.zone 是你刚才在named.conf里面定义的名字,记住,要和那个一样
反向区域的zone名字,必须是这样的命令方式,把IP地址反过来表达
image
vim /var/named/michael.com.zone
image
TTL是生存期,单位是秒 
$TTL是全局定义的 
第二行 SOA记录,@取代在/etc/named.conf中指定的域名。 
SOA段中的数字,分别为:序列号、刷新、重试、过期、生存期
序列号:序列号用于DNS数据库文件的版本控制。每当数据被改变,这个序列号就应该被增加。
刷新:从服务器向主服务器查询最新数据的间隔周期。每一次检查时从服务器的数据是否需要更改,则根据序列号来判别。
重试:一旦从服务器尝试连接主服务器失败,下一次查询主服务器的延迟时间。
过期:如果从服务器无法连通主服务器,则在经过此时间后,宣告其数据过期。
生存期:服务器回答 ‘无此域名’ 的间隔时间。
数字的默认单位为秒。否则:W= 周、D= 日、H= 小时、M= 分钟。
下面我们来写自己的ZONE文件
image
IN 是internet记录
SOA 是SOA 初始化记录,我们说的是初始授权记录,这个翻译不过,理解很多反正知道是那个意思就行了
mail.michael.com. 是DNS服务器的名称
root.unix.com. 是管理员的邮箱地址
image
版本号改成日期后面加两个00,其他都默认,下面开始添加主机记录
image
第一个NS记录
NS(name server):设置域名服务器的域名
然后添加一个MX记录
MX (Mail eXchanger ): 设置邮件交换器资源记录
image
简单的正向配置文件就到这里,下面接着讲反向解析的zone文件
把正向解析zone文件拷贝一份,名字是你在named.conf中定义的反向解析的名字
cp /var/named/chroot/var/named/michael.com.zone /var/named/chroot/var/named/1.168.192.in-addr.arpa.zone
image
然后我们来修改反向解析
vim /var/named/1.168.192.in-addr.arpa.zone
image
SOA记录可以不修改,NS记录和MX记录也可以不修改
只需要把A记录修改成PTR记录就可以了,PTR是反向解析的意思,把IP地址解析成域名
image
然后保存退出
配置文件就写完了,下面我们来使用配置文件检测工具来检测我们的配置文件语法是否正确
named-checkconf /var/named/chroot/etc/named.conf
这个命令是检查named.conf主配置文件的,如果没有提示,就证明这个文件没有问题
image
检测区域文件的语法
语法为named-checkzone  域名   配置文件
两个配置文件都要检查
named-checkzone michael.com /var/named/chroot/var/named/michael.com.zone named-checkzone michael.com /var/named/chroot/var/named/1.168.192.in-addr.arpa.zone
image
下一步就可以启动DNS服务了
image
启动失败,我们来排错,把日志文件检测起来
tail -f /var/log/messages
image
chmod 644 /var/named/chroot/etc/named.conf
image
把named.conf配置文件的权限改成644就可以了,出现这些问题,大家就要学会分析日志。
我们来配置client,然后来测试我们DNS服务器是否架设成功
vim /etc/resolv.conf
image
修改成自己的IP地址,然后保存
我们现在来测试我们的DNS
dig -t soa michael.com
image
dig -t mx michael.com
image
这是dig 工具,查询 michael.com域中的SOA记录和MX记录
image
dig mail.michael.com 
这是查询mail.michael.com
dig -x  是反向查询
dig -x 192.168.1.8
image
当然,还有简单的命令来查询dns解析,比如nslookup 和host 都可以
image
查不到哈~看下日志
image
chmod 644 /var/named/chroot/var/named/michael.com.zone
chmod 644 /var/named/chroot/var/named/1.168.192.in-addr.arpa.zone
image
image
现在正常了我们测试下
image
nslookup 也可以,和win下的用法一样
image 
##################Michael分割线#####################
下面我们使用DNS来实现简单的负载均衡
这个技术在很早的时候被yahoo和163等网站使用实现过负载均衡,不过现在已经很少有企业这样做负载均衡了,因为这样负载均衡是随即的,他 没有使用算法,不科学,但是我们也了解下吧,对于小企业还是可以考虑这样做的, 呵呵,真正的负载均衡听麻烦,不是三言两语说的清楚的,而且还要fence device的支持。
回到正体,DNS负载均衡的原理给大家说说
DNS负载均衡的优点是经济简单易行,它在DNS服务器中为同一个域名配置多个IP地址(即为一个主机名设置多条A资源记录),在应答DNS查 询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的计算机上去,使得不同的客户端访 问不同的服务器,从而达到负载均衡的目的。
我们下面给www主机做负载均衡
image
那个0是这个记录的生存期
重新启动服务器
image
我们来测试下,我们用ping命令,测试ping [url]www.michael.com[/url]是不是每次ping到的IP不一样
image
ping了三次,每次ping到的主机都不一样,这样就简单的实现了负载均衡,现在国内负载均衡一般使用的lvs+heartbeat+HA,红帽有集群的专门解决方案GFS+conga+XEN
LVS是集群技术,章文嵩教授开发的
heartbeat 是心跳线
HA 是高可用性,解决方案
这个就涉及到fence device ,电源交换机,光纤存储交换机,FASTER ethernet交换机
心跳线是BS和备份BS之间通信,如果BS宕机了,备份BS马上起来取代BS的任务,BS是负载均衡服务器
提提,有兴趣的自己下去研究吧
下一个功能,直接解析域名 
我们在IE输入baidu.com 也能访问到baidu,这个就是使用了直接解析域名
image
现在我们没有直接解析域名,其实直接解析域名除了用在网站,还用在邮件服务器,这样就免去了编写出站表的麻烦事情,直接通过DNS的直接解析域来处理。
image
这个就是直接解析域名的写法,注意后面有个点
重新启动服务器,然后我们来测试
image
看见没有,把MX记录也解析出来了
image
实现连续解析域名
在一个企业中,可能有上百台计算机,如果要为每一个计算机分配一个域名,如果一条一条的添加到域文件中,则相当耗时。
$GENERATE 是函数 
1-200 是要循环的变量
host$是主机名 
192.168.1.$是对应的IP地址
 
 image
反向解析我们也写上吧
image
重启下服务哈~
image
现在1-200的主机我们都有解析了
image
这就是效果了
说说实现泛域名的解析
你们试过adfkjakldfjakldjf kl.baidu.com ,也能进入baidu的网站么?就是主机位置随便输入什么,都可以正确访问,我意思是主机名随便输入,以前baidu用来的,现在baidu没用泛域名了,用了直接域。
泛域名很简单,就是用*匹配所有,但是注意了,这个解析要放在最后,应为ZONE文件是从上到下读取的,当上面的都不匹配的时候才会读取泛域名解析。
image
保存退出,重启named服务哈~
image
这样也可以解析,厉害吧
下面我们来测试辅助域名服务器
这个需要两个服务器,用辅助域名服务器给主域名服务器备份,当然也可以指一个NS记录到辅助域名服务器,这样为主域名服务器减轻负载
image
在主DNS的zone区域加allow-transfer 语句,指名那个client可以来复制我的zone文件,这个参数也可以放在options字段,放options全局有效。
image
把主DNS的刷新时间改小点