天天看点

RHCE课程-RH253Linux服务器架设笔记五-DNS服务器配置

在LINUX下面架设DNS服务器,不知道DNS解析原理,根本会了和不会没区别,

网络中为了区别各个主机,必须为每台主机分配一个惟一的地址,这个地址即称为“IP地址”。但这些数字难以记忆,所以就采用“域名”的方式来取代这些数字了。

当某台主机要与其他主机通信时,就可以利用主机名称向DNS服务器查询该主机的IP地址,所以我们的网卡要上网至少要3个信息,IP地址,网关,DNS服务器地址。

DNS的组织结构

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018160tBtL.png"></a>

这个就是DNS的组织结构,最上面是根域名 dot,全球13台根域服务器,没有一台在中国,因为中国网络发展,起步迟。而且所有的dot DNS服务器都是bind软件架设的,我们今天要学习的也是bind软件。全球70%的大型DNS服务器都是基于bind软件。

常见的顶级域服务器

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018195DFii.png"></a>

我国的顶级域也就只有cn

DNS解析过程

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018220z80x.png"></a>

根域名服务器就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是主机。

每台主机都有一个host文件,负责IP地址的域名快速解析的文件,文件以ASCII格式保存在“/etc”目录下,文件名为“hosts”,hosts文件包含了IP地址和主机名之间的映射,还包括主机名的别名。 

hosts文件的格式如下: 

IP地址 主机名/域名  主机别名 

windows下也有hosts文件,C:\WINDOWS\system32\drivers\etc

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390182312COY.png"></a>

可以使用记事本打开

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018240ifPt.png"></a>

linux也有这个文件

/etc/hosts

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018244yfey.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018247y3Kq.png"></a>

好了,下面介绍下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 

   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 

   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 

   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 

   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 

   1:bind-chroot            ########################################### [100%] 

[root@rhel5 ~]#

注意:bind-chroot软件包最好最后一个安装,否则会报错哈~~~

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018264Xnn5.png"></a>

bind的配置文件默认是没有的,需要自己手写,但是很多,容易写错,所以我们安装模板文件,然后来修改。由于安装了chroot环境,所以我们的/etc/named.conf  应该在/var/named/chroot/etc/ 目录。

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018268cmFw.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018270JUmA.png"></a>

没有named.conf,所以我们要把named.caching-name.conf文件copy一份成named.conf哈~

cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf

编辑named.conf这个文件,把文件里面多余的东西删除了,只剩下如图中的内容,然后我们来写

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018289j7R7.png"></a>

先检查你主机的名字,使用hostname

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018297ns1J.png"></a>

记住,linux的主机名要是FQDN的样式,把你们自己的主机名字改改,不要最后的那个,这个很重要的。

刚才讲了FQDN最后有根域的,把那个跟域去掉,就是你的主机名,改成那个样子。

linux修改主机名字修改三个地方,不知道大家还记得不?

第一步:hostname 主机名

第二步:vim /etc/hosts

第三步:vim /etc/sysconfig/network

修改完了把终端关闭了,然后重新打开就可以了

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018337AGWp.png"></a>

修改完了,我们继续

下面我以michael.com这个二级域名来建立一个域名服务器

全局配置(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

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390183505o1E.png"></a>

下面我们开始写zone文件

区域配置(zone ) 

zone 语句作用是定义DNS 区域,在此语句中可定义DNS 区域选项

zone区域设置,第一步,设置根区域

当DNS服务器处理递归查询时,如果本地区域文件不能进行查询的解析,就会转到根DNS服务器查询,所以在主配置文件named.conf文件中还要定义根区域。 

zone "." {  

type hint; 

file "named.ca";  

}; 

type:设置域的类型 

file:设置根服务列表文件名

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018353Dftu.png"></a>

“.” 意思的根区域

IN 是internet记录

type是类型 根的类型是hint

file是根区域文件

下面我们去看看根区域文件,根的类型

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018355Ycrk.png"></a>

这些就是根服务器,你数数,全球13台。

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018361VIj6.png"></a>

继续,指定正向解析的配置文件

记住,bind对配置文件要求很严格,就算是有些地方多了个空格,服务器都可能启动不了哈~

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018364VXru.png"></a>

反向解析配置文件

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018366OUrV.png"></a>

一个简单的named.conf配置文件

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018371fv3w.png"></a>

保存,然后我们去修改区别文件,添加记录

cp /var/named/chroot/var/named/localhost.zone /var/named/chroot/var/named/michael.com.zone

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390183784hUa.png"></a>

michael.com.zone 是你刚才在named.conf里面定义的名字,记住,要和那个一样

反向区域的zone名字,必须是这样的命令方式,把IP地址反过来表达

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018383rQi8.png"></a>

vim /var/named/michael.com.zone

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018386DQ5y.png"></a>

TTL是生存期,单位是秒 

$TTL是全局定义的 

第二行 SOA记录,@取代在/etc/named.conf中指定的域名。 

SOA段中的数字,分别为:序列号、刷新、重试、过期、生存期

序列号:序列号用于DNS数据库文件的版本控制。每当数据被改变,这个序列号就应该被增加。 

刷新:从服务器向主服务器查询最新数据的间隔周期。每一次检查时从服务器的数据是否需要更改,则根据序列号来判别。 

重试:一旦从服务器尝试连接主服务器失败,下一次查询主服务器的延迟时间。 

过期:如果从服务器无法连通主服务器,则在经过此时间后,宣告其数据过期。 

生存期:服务器回答 ‘无此域名’ 的间隔时间。

数字的默认单位为秒。否则:W= 周、D= 日、H= 小时、M= 分钟。

下面我们来写自己的ZONE文件

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018389FLpf.png"></a>

IN 是internet记录

SOA 是SOA 初始化记录,我们说的是初始授权记录,这个翻译不过,理解很多反正知道是那个意思就行了

mail.michael.com. 是DNS服务器的名称

root.unix.com. 是管理员的邮箱地址

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390183906eJs.png"></a>

版本号改成日期后面加两个00,其他都默认,下面开始添加主机记录

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018391yBeY.png"></a>

第一个NS记录

NS(name server):设置域名服务器的域名

然后添加一个MX记录

MX (Mail eXchanger ): 设置邮件交换器资源记录

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018394RJEw.png"></a>

简单的正向配置文件就到这里,下面接着讲反向解析的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

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018399qT69.png"></a>

然后我们来修改反向解析

vim /var/named/1.168.192.in-addr.arpa.zone

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018403W6by.png"></a>

SOA记录可以不修改,NS记录和MX记录也可以不修改

只需要把A记录修改成PTR记录就可以了,PTR是反向解析的意思,把IP地址解析成域名

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018406Oo9D.png"></a>

然后保存退出

配置文件就写完了,下面我们来使用配置文件检测工具来检测我们的配置文件语法是否正确

named-checkconf /var/named/chroot/etc/named.conf

这个命令是检查named.conf主配置文件的,如果没有提示,就证明这个文件没有问题

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018409rh5j.png"></a>

检测区域文件的语法

语法为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

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018410rKvL.png"></a>

下一步就可以启动DNS服务了

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390184126qMB.png"></a>

启动失败,我们来排错,把日志文件检测起来

tail -f /var/log/messages

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018418s8Zn.png"></a>

chmod 644 /var/named/chroot/etc/named.conf

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018423MFCT.png"></a>

把named.conf配置文件的权限改成644就可以了,出现这些问题,大家就要学会分析日志。

我们来配置client,然后来测试我们DNS服务器是否架设成功

vim /etc/resolv.conf

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018429qhGb.png"></a>

修改成自己的IP地址,然后保存

我们现在来测试我们的DNS

dig -t soa michael.com

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018432eTFi.png"></a>

dig -t mx michael.com

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018438b9fz.png"></a>

这是dig 工具,查询 michael.com域中的SOA记录和MX记录

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018444wDue.png"></a>

dig [url]www.michael.com[/url]

dig mail.michael.com 

这是查询mail.michael.com

dig -x  是反向查询

dig -x 192.168.1.8

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018450yl7o.png"></a>

当然,还有简单的命令来查询dns解析,比如nslookup 和host 都可以

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018453GUTj.png"></a>

查不到哈~看下日志

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018460tKIE.png"></a>

chmod 644 /var/named/chroot/var/named/michael.com.zone 

chmod 644 /var/named/chroot/var/named/1.168.192.in-addr.arpa.zone

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018471qTuI.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018486s1IQ.png"></a>

现在正常了我们测试下

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018496PXHd.png"></a>

nslookup 也可以,和win下的用法一样

##################Michael分割线#####################

下面我们使用DNS来实现简单的负载均衡

这个技术在很早的时候被yahoo和163等网站使用实现过负载均衡,不过现在已经很少有企业这样做负载均衡了,因为这样负载均衡是随即的,他没有使用算法,不科学,但是我们也了解下吧,对于小企业还是可以考虑这样做的, 呵呵,真正的负载均衡听麻烦,不是三言两语说的清楚的,而且还要fence device的支持。

回到正体,DNS负载均衡的原理给大家说说

DNS负载均衡的优点是经济简单易行,它在DNS服务器中为同一个域名配置多个IP地址(即为一个主机名设置多条A资源记录),在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的计算机上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。

我们下面给www主机做负载均衡

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018507XAD0.png"></a>

那个0是这个记录的生存期

重新启动服务器

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018513SRJK.png"></a>

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018520JVZv.png"></a>

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,这个就是使用了直接解析域名

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_123901852795LT.png"></a>

现在我们没有直接解析域名,其实直接解析域名除了用在网站,还用在邮件服务器,这样就免去了编写出站表的麻烦事情,直接通过DNS的直接解析域来处理。

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018529llf6.png"></a>

这个就是直接解析域名的写法,注意后面有个点

重新启动服务器,然后我们来测试

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390185337UBv.png"></a>

看见没有,把MX记录也解析出来了

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018535X9rM.png"></a>

实现连续解析域名

在一个企业中,可能有上百台计算机,如果要为每一个计算机分配一个域名,如果一条一条的添加到域文件中,则相当耗时。

$GENERATE 是函数  

1-200 是要循环的变量 

host$是主机名  

192.168.1.$是对应的IP地址 

反向解析我们也写上吧

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018544FJwx.png"></a>

重启下服务哈~

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018549eeCf.png"></a>

现在1-200的主机我们都有解析了

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_12390185527xP3.png"></a>

这就是效果了

说说实现泛域名的解析

你们试过adfkjakldfjakldjf kl.baidu.com ,也能进入baidu的网站么?就是主机位置随便输入什么,都可以正确访问,我意思是主机名随便输入,以前baidu用来的,现在baidu没用泛域名了,用了直接域。

泛域名很简单,就是用*匹配所有,但是注意了,这个解析要放在最后,应为ZONE文件是从上到下读取的,当上面的都不匹配的时候才会读取泛域名解析。

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018557P6Mz.png"></a>

保存退出,重启named服务哈~

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018565TxAA.png"></a>

这样也可以解析,厉害吧

下面我们来测试辅助域名服务器

这个需要两个服务器,用辅助域名服务器给主域名服务器备份,当然也可以指一个NS记录到辅助域名服务器,这样为主域名服务器减轻负载

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018574XB3n.png"></a>

在主DNS的zone区域加allow-transfer 语句,指名那个client可以来复制我的zone文件,这个参数也可以放在options字段,放options全局有效。

<a href="http://redking.blog.51cto.com/attachment/200904/6/27212_1239018584e4HK.png"></a>

把主DNS的刷新时间改小点

#######################Michael分割线##########################

未完待续哈~~~~~~~~~~~~~~~~

本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/146708,如需转载请自行联系原作者

继续阅读