分享

局域网内的简单linux DNS搭建

 quasiceo 2018-08-14
前言:
公司要求在服务器上搭建DNS server,方便客户端设备软件的初始化参数可以写死域名,通过这种方式简化客户端的设置工作量(公司产品形态决定了客户端数量比较大,300+以上的情况比较普遍,而且实施不方便)。操作系统环境:RHEL 6.5 x86_64
公司技术部同事提供了一份文档给我们参考(在以前的某项目上,由于特殊情况,客户端必须使用域名方式访问服务器)。把文档仔细看了,发现整个文档可能确实可以实现既定目标,却感觉知其然而不知其所以然,如果这样去做了,可能对服务器性能、安全与日后的产品维护工作没有好处。我希望的是最简配置达成目标。因为以前在cisco路由器上搞过DNS+DHCP,自认为都差不多,不免流俗,参考了技术部提供的文档,同时又参考百度到的一些博客,搞了下,实际动手后却各种报错。于是乎,下定决心,不走捷径,从原理开始学习,并把操作过程整理出来,方便分享与日后回顾。

软件环境:
首先,需要伯克利大学互联网域名工具(Berkeley Internet Name Domain),简称BIND,可以使用yum或rpm安装。因为我手中有足够的rpm包,我选择的是rpm安装。

关于chroot:
从名字能看得出,是change root。为了安全,bind需要的配置文件实际放在:
  • /var/named/chroot/etc/named.conf
  • /var/named/chroot/var/named/zone_file1
  • /var/named/chroot/var/named/zone_file.....
  • /var/named/chroot/var/run/named/...
因为新版本的 RHEL或CentOS 6.x 已经將 chroot 所需要使用到的路径,使用 mount --bind 的功能进行了目录链接,例如,我们需要的 /var/named 在启动脚本中通过 mount --bind /var/named /var/named/chroot/var/named 进行目录绑定!所以在操作过程中,无需切换工作目录至 /var/named/chroot/ ,使用正规的目录即可。启动脚本的内容参见下图:
修改/var/named/chroot/下的文件的优点很突出:如果umount后,原本非/var/named/chroot/下的文件不发生改变(无论你在chroot/下的文件中做什么),安全性非常好。所以,我们在学习配置过程中是可以忽略这部分知识的,等到配置过程都掌握后,在生产系统的配置过程中,一定是配置chroot/下的文件,也就是说,生产系统中下面的操作过程是针对chroot/下的对应文件,这点一定要注意。

文件配置与调用关系:
①首先配置的是/etc/named.conf,这是bind的主配置文件,看名称就知道这个配置文件的重要性啦。修改这两处为any;要注意的是directory "/var/named",这说明zone文档的路径;
②修改后,实际上就可以执行service named start。但是发现服务启动失败,怎么办呢?
要观察/var/log/messages日志,发现启动named的时候,有open: /etc/named.conf :permission denied错误提示;我是root用户登录的没问题。再cat /etc/passwd发现named组的存在,好了,执行chown :named /etc/named.conf,然后再启动named,启动成功。

③观察/etc/named.conf文件,在文件的末尾,有这么一句,说明还要调用这个包含性质的文件:
接下来配置/etc/named.rfc1912.zones。前面的不用管,只要增加下图中红框内的一段,并保存退出:
这一段是什么呢,是我希望的服务器使用istv.com这个域名的zone文件。
这个named.istv.com就是bind需要的zone文件,下面要配置这个文件。

④我们知道了需要配置上面说的这个zone文件,那么这个文件在哪里呢,不知道不要紧,继续从bind主配置文件找线索:
从bind主配置文件中,有这么一段描述,说明了了directory是 /var/named/ 这个路径。

⑤cp /var/named/named.localhost /var/named/named.istv.com,先创建这个文件。
上面是我编辑好的,最重要的是第二个@后面这一段,前面的可以不改;NS代表域名,A代表地址,翻译成中文,这样就非常好理解了。实际上,第二段中最重要的是最后一句,用来说明www.istv.com的IP地址。大家注意到com后面的.,这代表着完整主机名称FQDN。
TTL建议比较长,可以在客户端本地存储时间长一些,避免反复访问DNS server,给APP-Server带来不必要的压力。我使用的是1D,代表着one day,这个可能在测试的时候有影响,如果变更windows端的域名服务器或者域名解析配置有变动,还想要尽快看到测试结果,windows客户端需要把dns缓存flush掉。

⑥chown :named /var/named/named.istv.com经过实际操作证明,也是必不可少的。

⑦最后,要想让named进程开机自启动,需要执行chkconfig --level 2345 named on

上面的配置中,只是配置了正向解析,反向解析没有去配置,因为我们只是想通过安装这台DNS Server,终端设备可以在局域网内访问我们自己的istv.com这个域名,也就是说使用DNS服务器解析域名所对应的IP地址------正向解析。

关于配置文件的校验:
bind提供了有两个校验工具,使用者可以在配置完文件后,对文件进行手动校验。问题来了,校验的工具在哪里?关键还是思路,我们可以依靠搜索引擎,也可以利用搜索引擎+自己的思考。在/usr/sbin/路径下有两个命令,一个是named-checkconf,另外一个是named-checkzone,看名称就能猜到是什么用的。对头,分别是主配置文件和zone文件。
OK,我们现在知道了命令在哪儿和命令是什么了,命令的用法,使用者自己看提示就知道了,这里不详细说明了。
实际上,在/etc/init.d/named文件中,有这么一句:
这说明什么呢,在启动脚本中已经包含了这两个校验命令,可以透过named的restart并配合上面介绍的日志文件,实现同样的目的。

定时检查dns服务:
①编辑检查dns服务脚本,dns_check.sh:
#!/bin/bash
service named status &> /dev/null
if [ $? -ne 0 ]
then
echo "At time: `date` :named  is stop .">> /var/log/messages
service named start
else
echo "named is running ."
fi
②在crontab计划任务中,增加dns_check.sh的定时执行.

关于DNS测试命令:
配置OK了,程序启动也顺利OK了,接下来就要对结果进行一下测试,当然在使用PC浏览器访问服务器不方便的情况下,也是可以通过命令行去
①最简单的host命令。
host -a istv.com,你可以看到一个结果,好像有问题,当然,istv.com这个域名是在Internet上合法存在的,APP-Server上也配置的自己的dns,解析到的就是互联网的结果。我们局域网怎么用呢?host -a istv.com 172.16.1.7,对咯,后面指定dns服务器地址就可以了。个人认为,简单而好用。
②nslookup命令。
这个命令的用法就比较丰富了,这里我只用最简单的,不废话,直接给图。
③主流的dig命令。
更加丰富的使用方法和更加丰富的查询结果,没有仔细学习,用法差不多,继续直接给图。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多