您的位置:首页 > 运维架构 > Linux

架设DNS服务器

2016-04-15 20:28 465 查看

架设DNS服务器

架设DNS服务器
DNS基本原理

实验环境

阐述一个问题

在DNS服务器节点上配置内网DNS

安装bind套件并进行相关配置

测试是否成功的启动DNS服务

问题

DNS基本原理

DNS的理论十分的晦涩,DNS服务器的架设还是比较复杂的,相比其他的例如NFS服务器的架设来说更加的难,是因为其配置较为复杂,其中的参数较多,概念也较多,比如其中的正解、反解的概念,正解意思为将主机名翻译为ip地址,而反解的意思是将ip地址反解为主机名。还有很多及其复杂的配置,请看下面的内容。

实验环境

CentOS Linux release 7.1.1503 (Core),内核版本:3.10.0-229.el7.x86_64,在节点192.168.101.66节点上配置DNS服务器,并负责解析下面的10个节点ip以及主机名

192.168.101.66 #DNS服务器节点,同时也是hadoop的master节点
192.168.101.67
192.168.101.68
192.168.101.69
192.168.101.70
192.168.101.71
192.168.101.72
192.168.101.73
192.168.101.74
192.168.101.75


我修改上面所有节点的主机名,其具体如下,

$ su    # 进入root权限
$ vim /etc/hostname    #修改主机名


将对应节点的主机名修改为下面的值:

192.168.101.66 # 主机名为master.hadoop.com
192.168.101.67 # 主机名为slave1.hadoop.com
192.168.101.68 # 主机名为slave2.hadoop.com
192.168.101.69 # 主机名为slave3.hadoop.com
192.168.101.70 # 主机名为slave4.hadoop.com
192.168.101.71 # 主机名为slave5.hadoop.com
192.168.101.72 # 主机名为slave6.hadoop.com
192.168.101.73 # 主机名为slave7.hadoop.com
192.168.101.74 # 主机名为slave8.hadoop.com
192.168.101.75 # 主机名为slave9.hadoop.com


阐述一个问题

是不是说我自己制定了一个DNS,那么是不是就意味着我的DNS服务器的服务可以被全世界的用户所访问?回答肯定是否定的,只有权威DNS才可以,所谓权威DNS是指由授权资质的机构进行认证才行。

在DNS服务器节点上配置内网DNS

在提供DNS服务的节点,也就是192.168.101.66上配置DNS地址,这样才能保证正确的解析域名,如下图:



在其他的从节点上同样进行这种配置。

安装bind套件并进行相关配置

有关bind套件的详细介绍请参见维基百科,在这里我只做简单的介绍。bind是一个开源的DNS服务器搭建软件,同时还支持多个平台,DNS是一个服务协议,bind用来创建这种协议为这种协议的实现提供可能,当然很有其他的软件可以使用去架设DNS服务器。bind软件套件的主服务进程是named,其中正解就是将hostname翻译成ip,反解就是将ip翻译成hostname的过程。

$ yum -y install bind* #安装bind相关的所有软件,*为通配符,此条命令的含义是安装bind开头的所有相关软件
$ rpm -qa | grep '^bind'  #查看安装的bind相关包
$ syatemctl start named  #启动named进程,该进程是bind的主要进程,通过日志查看是否启动成功
$ tail -100 /var/log/messages  #输出该日志文件的最后100行,从中可以看到是否成功,特别是当不能启动时,去查看日志文件十分有效


每一次重启named服务时,一定要使用log去查看是否有warning或者error,bind套件十分不好的一个地方是当你不能成功启动时有时候也并不会包任何的错误,所以在每次对named重启时务必要查看log文件看到底有没有隐含的错误。

$ systemctl stop firewalld.service  # 关闭防火墙
$ systemctl disabled firewalld.service  #关闭开机自启动
$ netstat -l  #查看domain端口是否处于LISTEN状态
$ vim /etc/named.conf  #修改该文件, 在/etc/named.conf中要修改两处,分别是:


第11行  listen-on-v6 port 53 {127.0.0.1;};表示localhost主机的53号端口, 修改为: listen-on-v6 port 53 {any;} 表示监听任何主机的53号端口
第17行 allow-query  {localhost;};  修改为allow-query  {any;};
在recursion yes;行之后添加下面的两行:
forward only;  # 不去一层层的解析,之允许转发。节省时间
fordwarders  {8.8.8.8;};  #使用谷歌的服务器进行解析
接着wq!保存退出
systemctl restart named # 启动named服务,每次在重新配置之后,都要重新启动named进程
$ tail -100 /var/log/message  # 查看是否有隐含的错误
$ host -a baidu.com  192.168.101.66  # 查看是否正确的配置DNS解析服务
$ netstat -l  # 查看domain端口是否已经开放,可以看到被localhost监听


接下来我自定义了一个全新的域名(自己)hadoop.com,并通过下面的配置进行解析。

$ vim /etc/named.rfc1912.zones  #修改该文件,在/etc/named.rfc1912.zones中添加下面的两个zone。


# 添加下面的两个zone
zone "hadoop.com" IN {
type master;
file "named.hadoop.com";
allow-update   { none; };
};
#其中101.168.192中的101是我的ip地址的开头24位逆序写
zone "101.168.192.in-addr.arpa" IN {
type  master;
file  "named.192.168.101.zone";
allow-update  { none; };
};


$ cd /var/named  # 进入该目录
$ cp -p named.localhost  named.hadoop.com #-p参数保证了在复制的过程中权限不会发生改变
$ vim /var/named/named.hadoop.com #这是整个配置中最核心的文件
在上面的文件中加入下面的内容:


# 在下面要插入的部分,master、slave等代表的是主机名,其中hadoop.master.hadoop.com中的第一个hadoop是用户名
$TTL 1D
@       IN SOA   master.hadoop.com. hadoop.master.hadoop.com (
0       ; serial
1D      ; refresh
1H      ; retry
1W      ; expire
3H )    ; minimu
@                   IN NS   master.hadoop.com.
master.hadoop.com.  IN A 192.168.101.66
slave1.hadoop.com.  IN A 192.168.101.67
slave2.hadoop.com.  IN A 192.168.101.68
slave3.hadoop.com.  IN A 192.168.101.69
slave4.hadoop.com.  IN A 192.168.101.70
slave5.hadoop.com.  IN A 192.168.101.71
slave6.hadoop.com.  IN A 192.168.101.72
slave7.hadoop.com.  IN A 192.168.101.73
slave8.hadoop.com.  IN A 192.168.101.74
slave9.hadop.com.   IN A 192.168.101.75


$ cp -p named.localhost named.192.168.101.zone #将其中的内容换成下面的内容
$ vim /var/named/named.192.168.101.zone  #在其中添加下面的语句


$TTL 1D
@       IN SOA master.hadoop.com. hadoop.master.hadoop.com. (
0       ; serial
1D      ; refresh
1H      ; retry
1W      ; expire
3H )    ; minimum
@                IN     NS     master.hadoop.com.
66   IN     PTR    master.hadoop.com.
67   IN     PTR    slave1.hadoop.com.
68   IN     PTR    slave2.hadoop.com.
69   IN     PTR    slave3.hadoop.com.
70   IN     PTR    slave4.hadoop.com.
71   IN     PTR    slave5.hadoop.com.
72   IN     PTR    slave6.hadoop.com.
73   IN     PTR    slave7.hadoop.com.
74   IN     PTR    slave8.hadoop.com.
75   IN     PTR    slave9.hadoop.com.


查看是否成功的开启DNS服务,输入下面的命令:

$ systemctl restart named  # 重新启动named服务
$ chkconfig named on  #设置开机自启动
$ systemctl enable named.service  #设置开机自启动
$ systemctl status named  #查看DNS服务是否正常的启动




测试是否成功的启动DNS服务



问题

在我做完上述的操作之后,发现两个问题:

不能进行反向的解析

这个问题的出现让我郁闷好久,明明配置了,为什么不能进行反向的解析呢?最后解决发现在配置/var/named/named.192.168.101.zone 文件时,ip地址值需要写最后的一个字段,请参见我的/var/named/named.192.168.101.zone 文件配置,严格的按照我的方式来写,一旦不一样就不能进行反向的解析。

在其他的节点不能进行正向和反向的解析

这个问题几乎困扰了我一天的时间,在每一个节点都和下图一样进行了DNS的配置:



但是我郁闷的是为上面进行了配置,在这些节点仍然不能进行域名的解析呢?很费解,终于找到了原因,我竟然都忽略了,在slave节点上我没有关闭防火墙!!!关闭了slave节点的防火墙之后,重新启动named。这么愚蠢的错误,接下来我解释一下为什么不关闭防火墙就不能在这些节点上进行域名的解析:如果想让其他的主机使使用本地的DNS服务,那么务必要让本地DNS服务器监听能和其它主机联通的IP上,如果存在连接超时或者找不到DNS服务器,那么可能是DNS服务器所在主机的防火墙过滤了请求,所以务必要做的事情是在提供DNS服务的主机上关闭防火墙,开放端口以便其它主机进行监听。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息