DNS服务是域名转换服务。
原理及功能可以参考http://kmk0226.blog.51cto.com/5975994/1678180
今天的博客是介绍DNS服务的编译安装,以及安装之后如何配置DNS服务,让服务能正常运行。
在Linux系统中,DNS服务在Bind这个程序中配置的。
首先,要编译安装DNS服务,需要先去下载源码包。
源码包可以在bind官方网站下载
bind官方站点:www.isc.org
有9.9.X与9.10.X的版本,我们这里以9.9.X的版本来编译安装。
X代表子版本,可能版本会跟图片中不一样
先下载源码包到Linux系统中。
具体如何下载可以先下载到win系统中再共享方式到linux系统中,如果linux系统有图形界面可以直接到官方网站下载。
下载完成之后,解压源码包
tar -xvf bind-9.9.7-P1.tar.gz :解压源码包 cd bind-9.9.7-P1 :进入解压后的目录 ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --enable-threads --disable-chroot --disable-ipv6 :运行configure程序,生成配置脚本文件makefile文件
--prefix= :指定单独的安装路径,为了删除方便,一般放在/usr/local/下
--sysconfdir= :存放配置文件,配置文件一般在,/etc/下
--enable-threads:默认关闭的,启用线程工作模式,拥有更好的性能
--disable-ipv6:关闭IPV6的功能
--with-dlz--mysql:基于mysql安装
编译完之后直接可以安装
make && make install :编译与安装,编译安装都是根据以上配置脚本文件中的配置来编译与安装的
安装完之后程序会放在原来指定的安装路径中。
我们这里的安装路径在:/usr/local/bind9
安装目录下有很多的工具与库文件
bin,sbin:存放工具,如dig。
share:存放man
man -M /usr/local/bind9/share/man
可以查看新版的man
lib:库文件
虽然已经安装完成了,但是我们的服务还没有完全安装完成,因为我们编译安装的服务程序,是不会自动帮忙更新man、PATH、库文件,以及服务启动脚本
所以我们需要自己导入与编写。
首先:先导入man
vim /etc/man.config
修改man配置文件
MANPATH /usr/local/bind9/share/man
将/usr/local/bind9/share/man加入到MANPATH参数中
MANPATH /usr/man MANPATH /usr/share/man MANPATH /usr/local/man MANPATH /usr/local/share/man MANPATH /usr/X11R6/man MANPATH /usr/local/bind9/share/man
导入man文件之后,我们要将我们的bind工具加入到PATH中
vim /etc/profile.d/bind.sh 在/etc/profile.d目录中新建一个bind.sh的shell脚本
脚本中写入:export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
注意:最后的$PATH一定要加,这是为了添加原先已经有的PATH,否则原来的就不能用了。
脚本添加完毕重启系统,脚本将会自动将我们的新工具添加到PATH中
最后我们查看下库文件。
所有的库文件都是静态的以.a结尾的库文件,所以不需要安装
如果遇到动态的库文件就需要安装了,结尾为.so的为动态库文件
到此我们的服务就安装完成了,接下去就是要提供配置文件,让服务运行起来了。
编译安装的服务是不会自带配置文件的。
DNS的配置文件都放在/etc/named目录下
先进入/etc/named cd /etc/named 然后新建named.conf这个配置文件 vim named.conf options { directory "/var/named"; recursion yes; }; #这里options代表是配置文件中的全局配置 directory:是配置文件中的工作目录,一般都位置为/var/named目录中 recursion yes:代表是否允许递归,一定要保留,看过DNS原理的都知道DNS服务器是以递归方式工作的,所以这一项必须要开启 全局配置只要开启两项就能正常工作了 其他的配置可以参考man文件来配置。毕竟我们已经更新了man文件了,嘿嘿 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 "127.0.0.zone"; allow-update { none; }; zone "kmk.com" IN { type master; file "kmk.zone"; allow-update { none; }; }; zone代表区域配置 zone "域名" IN{ type {master(主区域)|slave|hint(根区域)|forward}; :类型 file "mageedu.com.zone"; :文件 allow-update { none; }; :域DHCP服务联动更新,域名IP,绝对不允许这是安全问题 }; 反解域需要将IP地址倒过来写,并且添加.in-addr.arpa 如上:0.0.127.in-addr.arpa 注意:所有的语句后面都需要用;分号结尾 主配置文件建立完毕,我们要先修改下权限,让配置文件可以被named用户访问,如果没有named用户需要先建立,named的用户与组 id named:查看下是否有建立用户组 没有的话新建用户与组 useradd -r named :添加用户-r代表添加的是系统用户 groupadd named :添加组 修改属组属主及权限:chown root:named named.conf chmod 640 named.conf
以上为主配置文件的建立,配置完主配置文件,我们还需要配置区域配置文件
进入刚刚全局配置中的工作目录
先创建工作目录与修改属组属主,编译安装的服务,工作目录是没有的 创建目录:mkdir /var/named/slaves -pv chown root:named /var/named/ chown named:named /var/named/slaves/ chmod 750 /var/named/ chmod 770 /var/named/slaves/ 目录创建完成,先获取根域的节点信息 dig -t NS . @a.root-servers.net > /var/named/named.ca 用dig工具获取到根节点的信息,然后发送到/var/named/named.ca这个配置文件中 这样就配置玩根节点了 然后配置本地域名解析 在配置.zone文件 vim localhost.zone $TTL 3600 :定义统一的缓存时长单位是秒钟 @ IN SOA localhost. admin.localhost. (SOA记录,文件必须要的。 2015072207 :序列号,最多十个数字 2H :刷新时间间隔 ,每两个小时同步一次 10M :如果主DNS服务器不在线,每十分钟重试一次 7D :试7天之后,还不在线断线 1D :否定回答TTL值 ,1天 ) IN NS localhost. :ns记录,第一行的区域名称与上面一条一样可以省略 IN A 127.0.0.1 :A记录 vim 127.0.0.zone:这个是反向解析区域文件 $TTL 3600 @ IN SOA localhost. admin.localhost. ( 2015072305 3H 15M 7D 1D ) IN NS localhost. 1 IN PTR localhost. vim kmk.zone :配置自定义的区域文件 $TTL 3600 @ IN SOA ns.kmk.com. admin.kmk.com. ( 2015072301 2H 10M 7D 1D ) IN NS ns.kmk.com. IN MX 10 mail.kmk.com. ns.kmk.com. IN A 192.168.142.128 www.kmk.com. IN A 192.168.142.128 mail.kmk.com. IN A 192.168.142.129 区域解析库文件说明: 区域解析库: 资源记录:rr(resource record),一行一个资源记录 有类型的概念:用于此记录解析时的属性 SOA:Start Of Authority,起始授权记录,一个区域文件,只能有一个soa文件记录 NS:Name Server,代表名称服务器 MX:Mail eXchange,邮件交换器,MX记录有优先级属性(0-99,越小越高) A:FQDN --> IP:专用于正向解析库,不能域PTR同时在一起 PTR:IP --> FQDN:专用于方向解析库,不能域A同时在一起 AAAA:FQDN --> IPV6,专用于正向解析库 CNAME:Canonical Name,正式名称,别名记录 张三的正式名称是tom,代表张三是别名 配置完之后修改属组属主及权限: chgrp named 127.0.0.zone localhost.zone named.ca kmk.zone:修改属组 chmod 640 127.0.0.zone localhost.zone named.ca kmk.zone :修改权限
现在一个缓存DNS服务器已经完成
可以尝试启动缓存名称服务器
named-checkconfig:检查配置文件是否有语法错误
named 命令可以直接启动named服务
-h:查看版主文件
-g:前台启动
-u:启动服务
-c:启动服务的配置文件在哪
named -g -u named -c /etc/named/named.conf:启动服务
成功之后出现字符:
all zones loaded
running
出现以上字符代表已经启动成功,但是不会继续下去,如果想要测试,可以新建窗口进行测试
测试方法为
dig -t PTR kmk.com @192.168.142.128
这个代表解析kmk.com这个域里面的所有信息,而解析服务器为192.168.142.128这个服务器IP为你现在建立的DNS服务器IP,如果解析出来了代表成功了。
如果测试成功,那么不要高兴,因为你的服务器还是个半成品,我们要需要导入rndc密钥信息
否则你的服务器将会很不安全。
导入rndc
rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
利用rndc-confgen将urandom中的一个随机数添加至rndc.conf
urandom:一个提供随机数的目录
-r:代表利用urandom中的随机数,不是熵池中的随机数
再将rndc.conf中的key段发送到/etc/named/named.conf中
options { directory "/var/named"; recursion yes; }; #rndc发送过来的key信息 #Use with the following in named.conf, adjusting the allow list as needed: key "rndc-key" { algorithm hmac-md5; secret "4NNN/HzlnbeGLOewSowoaQ=="; }; 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 "127.0.0.zone"; allow-update { none; }; }; zone "kmk.com" IN { type master; file "kmk.zone"; allow-update { none; }; }; 以上是最后完整的全局配置文件信息
最后再重读named.conf这个配置文件
killall -HUP named
chmod 440 rndc.conf:修改rndc.conf权限
到此DNS服务的配置就全部完成了,可以使用named -g -u named -c /etc/named/named.conf来启动服务,但是这样很不方便,可以再编辑一个服务脚本来控制启动关闭及重启之类的操作。
如用service机制,具体可以参考cent OS 6的service脚本编辑来写脚本