您的位置:首页 > 理论基础 > 计算机网络

Linux 网络服务之 DNS && bind 详解

2013-08-15 08:09 411 查看
前提:

学过网络的朋友都知道,如果要实现两台主机的通信都需要由相应的IP地址来实现。在互联网中,众多的IP地址不仅提升我们记忆的难度,而且使用起来非常的不方便,这就需要来提供一中机制,来实现IP到域名的解析。这样当我们需要访问百度的时候就不需要在地址栏输入百度的IP地址,直接输入百度的域名就可以进行访问了。那我们是如何实现地址和域名之间的映射呢?这就需要一个DNS服务器来实现。

一、DNS工作原理
DNS全名为 Domain Name System.能够实现域名到IP的解析。主要原理图如下:




如果本地PC访问百度的站点:

1.当我们将www.baidu.com输入地址栏时,主机会到我们本地设置的DNS上去查询。这个过程一般被称为递归。
2.当DNS(这里我们假设为电信的),收到主机的查询请求时,会在本服务器的缓存中进行查询,如果查询到了就会将结果返回给PC,如果查询不到就会帮该PC去别的主机查询。

3.默认每台DNS服务器中都内置了全球13台根域服务器的IP地址,电信的DNS会将PC机的查询请求发送到根域以查询com域的地址。

4.接着该DNS主机会去com域中查询baidu.com域的IP地址。

5.当电信DNS主机获取到baidu.com域的地址之后,就会去这台服务器上查询www这台主机的地址。

6.当获取到www.baidu.com这台主机的地址之后,电信的DNS就会将IP地址返回给PC,这样PC就可以拿着这个IP来访问百度了。

二、DNS服务器的类型
1.缓存DNS服务器
缓存服务器会对查询的结果进行缓存,包括错误的相关结果,这些查询结果都会有一个默认的生存时间 ( time to live ),当时间过了之后,会从当前缓存中清除。但是缓存服务器给出的查询结果是非权威的答案。
2.主DNS服务器(master)
主服务器中的数据库更新都是由管理员手动完成
3.辅助DNS服务器(slave)
辅助DNS服务器中的数据库更新是从主服务器或其它辅助DNS服务器那里完成的。这样实现了当前DNS环境的冗余。

三、linux系统中的DNS服务器
在linux服务器中用于搭建DNS服务器的软件主要有两种,bind和powerdns,而bind更占据了DNS服务器的半壁江山,本篇博文实现的功能将完全在RHEL6.4上使用bind来实现。
当我们配置好yum源之后查询bind软件组成和功能如下:
bind-utils
提供客户端使用的工具,可以使用 rpm 命令查询详细信息
bindDNS服务主程序,提供DNS服务
bind-libs为bind和bind-utils提供库
bind-chroot装上之后能限制服务的相关活动目录(这里我们并不安装)
四、利用bind在linux上实现相关的DNS服务

1.简单安装
[root@station1 ~]# yum install bind -y


2.安装完成查看配置文件


/etc/named.conf 是该服务的主要配置文件
/etc/named.rfc1912.zones 设置需要解析的相关zone
data 该目录用于存放相关的日志信息
name.ca 用于根域的解析,如果丢失可以用 "dig -t NS . @DNS_IP" 重定向
slave 该目录用于辅助服务器从主服务器同步的信息

3.启动服务并查看监听端口
[root@station1 ~]# service named start
Starting named:                                            [  OK  ]
[root@station1 ~]# ss -atuln4 | grep :53
udp    UNCONN     0      0          172.16.21.100:53               *:*
udp    UNCONN     0      0              127.0.0.1:53               *:*
tcp    LISTEN     0      3          172.16.21.100:53               *:*
tcp    LISTEN     0      3              127.0.0.1:53               *:*
[root@station1 ~]# chkconfig named on


4.缓存服务器配置
有的时候我们需要提供一个仅缓存服务器来提高我们解析互联网站域名的速度,相关的配置如下:

[root@station1 ~]# vim /etc/named.conf
options {
directory       "/var/named";
forward only;
forwarders { 172.16.0.1; };
bindkeys-file "/etc/named.iscdlv.key";
};
[root@station1 ~]# named-checkconf
[root@station1 ~]# rndc reload
简单测试:
dig -t NS .
注意:也可以争取某个特定的zone做转发:
zone "xiong.com" IN {
type forward;
forward only;
forwarders { 172.16.0.1; };
};


5.主服务器的实现(master)
实现对xiong.com域的正反向解析如下:
首先编辑配置文件 vim /etc/named.conf



然后编辑/etc/named.rfc1912.zones,添加如下zone:



编辑资源记录文件named.xiong和xiong.name实现正反向解析:






修改文件权限并检查配置文件的正确性,然后重启服务:

修改本机的DNS指向并进行测试如下:

vim /etc/resolv.conf
nameserver 172.16.21.100
dig -t axfr xiong.com @172.16.21.100     测试并注意其中列出的内容含义


6.辅助DNS的实现
需要首先在主服务器上添加该从服务器的NS资源记录,这样才能及时的通知主服务器上的资源记录更新



修改区域配置文件:



重启服务,并使用dig命令测试:
dig-t axfr xiong.com @172.16.21.100


7.子域授权
为域xiong.com完成子域kun1.xiong.com的授权,并实现kun1.xiong.com子域的正向查询。
编辑域xiong.com 的 master 配置文件 vim /var/named/named.xiong 添加如下行:



保存以完成子域的授权。



结果:

父域能解析子域的资源记录:子域不能解析父域的资源记录:
dig -t A www.kun1.xiong.com  @172.16.21.100
子域不能解析父域的资源记录,可以争对父域创建一个forward转发:



这样子域就能正常的对父域中的资源记录进行解析了。这就完成了子域的授权。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux DNS bind域