Linux之DNS详解
2013-08-16 11:29:20

 

标签: DNS
原创作品,允许转载,转载时请务必以超链接形式标明文章   原始出处  、作者信息和本声明。否则将追究法律责任。 http://lanlian.blog.51cto.com/6790106/1274830

一、DNS的原理

DNS(DomainName Server)是域名解析服务器,提供域名和IP地址之间一种转换机制,IP地址是平面结构不容易记住,DNS是层次化的结构,便于记忆

下面是DNS原理的通俗易懂图便于理解下面的讲解

DNS的层次化

1)根域:根域位于层次结构的最顶部并用“.”来表示,全球有十三个根服务器,一个主根服务器,十二个辅助根服务器。

2)顶级域:顶级域是按照组织或地理位置来划分的

.gov:表示政府组织

.com:表示商业组织

.net:网络中心

.org:非营利性组织

.edu:教育部门

.cn   .uk .us:国家国别的代码,cn表示中国,uk表示英国,us表示美国

3)二级域:由国际域名组织为互联网中的个人或部门指定和登记的二级域,如51cto.com,baidu.com

DNS服务器配置大致分为三种

(1)主DNS服务器(Master DNS) :数据库更新由管理员手动完成

(2)辅助DNS服务器 (SlaveDNS):数据库更新从主服务器或其他辅助DNS服务器那里完成

(3)缓存DNS服务器:没有自己的区域数据文件,只是帮助客户端向外部DNS请求查询,然后将查询的结果保存到它的缓存中。

一个域可以有拥有多个从服务器,但只能有一台主服务器

一台从服务器也可以从另一台从服务器那里获取数据

客户端检索本地数据文件的相关记录,客户端将无法自行解释的需求,通过53端口送给指定的DNS服务器


DNS解析类型

    FQDN(Fully Qualified Domain Name)完全合格域名,由主机名+域名组成,如www.51cto.com

正向解析:FQDN-->IP,把完全合格域名解析为IP地址

反向解析:IP-->FQDN,把IP解析为完全合格域名。


二、关于软件BIND

BIND:BerkeleyInternet Name Daemon,BIND是在Internet上应用最为广泛的DNS服务器,提供稳定与可信赖的下层结构以提供域名与IP地址的转换

Bind的相关软件包

bind-9.8.2-0.17.rc1.el6.x86_64提供域名服务的主程序和相关文件

bind-libs-9.8.2-0.17.rc1.el6.x86_64提供域名域名服务器所依赖的库文件

bind-utils-9.8.2-0.17.rc1.el6.x86_64提供了对DNS 服务的测试工具程序

注:bind-chroot:安装上这个包之后让named进程有限的活动在/var/named/chroot/中防止黑客攻击导致服务器的崩溃。这里就不安装了,因为安装之后除了路径改变之后其他均不变。所以为了更好的熟悉过程就暂时不装了

安装bind软件:

首先确保yum源创建好,然后安装bind软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@stu2~]# yum -y install bind
查看生成了那些配置文件
[root@stu2~]# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf           //主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones  //区域配置文件
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/ var /named/named.ca
/ var /named/named.empty
/ var /named/named.localhost
/ var /named/named.loopback

三、配置缓存服务器

把客户端发送的请求转发给能解析到的服务器

在主配置文件里面/etc/named.conf里面修改

开启服务service named start (/etc/rc.d/init.d start)

第一次需要开启服务,之后只需要加载配置文件即可

servicenamed reload (rndc reload)

named-checkconf


DNS的测试工具

1
2
3
4
5
6
7
8
9
[root@stu2named]# rpm -ql bind-utils
/usr/bin/dig           //测试命令工具
/usr/bin/host          //host测试命令工具
/usr/bin/nslookup      //nslookup测试命令工具
/usr/bin/nsupdate
/usr/share/man/man1/dig. 1 .gz
/usr/share/man/man1/host. 1 .gz
/usr/share/man/man1/nslookup. 1 .gz
/usr/share/man/man1/nsupdate. 1 .gz


命令的使用

dig[option] 资源记录类型名称 @servier-ip

option:

-t指定类型

-x指定IP

@servier-ip说明解析是指定服务器的IP

不写IP,默认是/etc/resolve.conf里面指定的IP

资源记录有类型:

A:正向记录,用来记录当前域名所对应的IP地址

NS:(nameserver)指明当前域内有哪些服务器

MX:用来指明一个域的邮件服务器

CNAME:进行正式名称和别名的对应

SOA:标明当前域的起始授权记录,指明当前域内的主DNS服务器

PTR:代表“IP地址”与“主机名”的对应关系,作用刚好与A记录相

nslookup dig host三个命令的使用范例

1
2
3
4
5
6
7
8
9
10
11
[root@stu2named]# nslookup    //测试工具命令
>server  172.16 . 0.1             //指向能为你解析域名服务器的IP地址(一般为运营商的IP地址)
Defaultserver:  172.16 . 0.1
Address: 172.16 . 0.1 # 53
> set   q=A                      //用set设置q指定类型为A记录,然后输入FQDN
>www.bai.com
Server:         172.16 . 0.1
Address:  172.16 . 0.1 # 53
Non-authoritativeanswer:
Name:    www.bai.com
Address: 221.5 . 71.29             //解析到的结果#172

[root@stu2 named]# dig -t A www.baidu.com @172.16.0.1

[root@stu2 named]# host -t A www.baidu.com 172.16.0.1


四、主从DNS服务器的搭建

首先在主配置文件/etc/named.conf中需要注释掉几行

然后在区域配置文件/etc/named.rfc1912.zones中创建区域

1
2
3
4
5
6
7
8
9
10
zone  "magedu.com"   IN {         //zone关键字添加正向区域解析库文件
    type master;                //指定类型
    file  "magedu.com.zone" ;     //指定区域文件名,是相对于/var/named路径,这里的相对路径是根据主配置文件里面的directory关键字定义的
    allow-transfer {  172.16 . 2.16 ; };  //指定slave服务器的Ip,可以指定多个
};
zone  "10.16.172.in-addr.arpa"   IN {  //zone关键字添加一个反向解析库文件
    type master;
    file  "172.16.10.zone" ;
    allow-transfer {  172.16 . 2.16 ; };
};


正向解析文件创建目录为/var/named/magedu.com.zone


区域创建好之后需要修改权限和属组

#chmod  640  magedu.com.zone

#chown  :named  magedu.com.zone

反向区域解析文件  /var/named/172.16.10.zone

配置完之后,检查语法是否错误,然后加载配置文件后即可进行正反向的区域解析。

#named-checkconf

#rndc reload


从slave的配置

在主配置文件/etc/named.conf中需要注释掉几行

 

 

 

在区域配置文件/etc/named.rfc1912.zones中创建区域

 

#rndcreload

#cd/var/named/slaves

#ls即可以查看内容


五、DNS的子域授权

思路:在父域的区域解析库文件里面创建子域的NS记录和子域的A记录,在子域服务器上面有子域的区域解析库文件

在/etc/named.conf注释掉一下四行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
options{
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
         directory        "/var/named" ;
         dump-file       "/var/named/data/cache_dump.db" ;
         statistics-file "/var/named/data/named_stats.txt" ;
         memstatistics-file "/var/named/data/named_mem_stats.txt" ;
//      allow-query     { localhost; };
         recursion yes;
logging{
         channel default_debug {
                 file "data/named.run" ;
                 severity  dynamic ;
         };
};
zone "."   IN {
         type hint;
         file  "named.ca" ;
};
include "/etc/named.rfc1912.zones" ;
//include"/etc/named.root.key";  用//表示注释掉这几行

在/etc/named.rfc1912.zones添加内容并创建子域区域解析库文件dns.dep1.magedu.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
zone "dep1.magedu.com"   IN {
         type master;
         file  "dep1.magedu.com.zone" ;
};
$TTL600
@     IN SOA   dns.dep1.magedu.com. admin.dep1.magedu.com. (
               20130813
               2H
               10M
               7D
               2D )
          IN  NS  dns
          IN  MX  10   mail
dns         IN  A   172.16 . 251.253
mail        IN  A   172.16 . 251.6
www         IN  A   172.16 . 251.6
www         IN  A   172.16 . 251.8

实现子域授权

父域是可以直接解析子域的,子域默认是不能解析父域的,但可以进行转发进行访问父域

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@stu2named]# dig -t A www.dep1.magedu.com
;<<>> DiG  9.8 .2rc1-RedHat- 9.8 . 2 - 0.17 .rc1.el6 <<>> -t Awww.dep1.magedu.com
;;global options: +cmd
;;Got answer:
;;->>HEADER<<- opcode: QUERY, status: NOERROR, id:  43341
;;flags: qr rd ra; QUERY:  1 , ANSWER:  2 , AUTHORITY:  1 , ADDITIONAL:  1
;;QUESTION SECTION:
;www.dep1.magedu.com.        IN A
;;ANSWER SECTION:
www.dep1.magedu.com.     600      IN A    172.16 . 251.8
www.dep1.magedu.com.     600      IN A    172.16 . 251.6
;;AUTHORITY SECTION:
dep1.magedu.com.    536      IN NS dns.dep1.magedu.com.
;;ADDITIONAL SECTION:
dns.dep1.magedu.com.   536      IN A    172.16 . 251.253
;;Query time:  6   msec
;;SERVER:  172.16 . 10.8 # 53 ( 172.16 . 10.8 )
;;WHEN: Thu Aug  15   17 : 54 : 40   2013
;;MSG SIZE  rcvd:  103

六、DNS的转发

当客户端找自己的DNS服务器解析自己的主机时,该DNS服务器查看不是自己管理范围,就直接转发出去通过能解析的

DNS服务器进行解析,将返回结果返回给客户端自己的DNS服务器,由该服务器将结果返回给客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
options {
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
         directory        "/var/named" ;
         dump-file        "/var/named/data/cache_dump.db" ;
         statistics-file  "/var/named/data/named_stats.txt" ;
         memstatistics-file  "/var/named/data/named_mem_stats.txt" ;
//      allow-query     { localhost; };
         recursion yes;
             forward only;  //只允许转发
             forwarders {  172.16 . 0.1 ; };  //转发到能解析的服务上
//      dnssec-enable yes; //关于安全的文件都注释掉
//      dnssec-validation yes;
//      dnssec-lookaside auto;
         /* Path to ISC DLV key */
         bindkeys-file  "/etc/named.iscdlv.key" ;
         managed-keys-directory  "/var/named/dynamic" ;
};
logging {
         channel default_debug {
                 file  "data/named.run" ;
                 severity  dynamic ;
         };
};

总结:深刻理解DNS服务器的工作原理和操作过程对以后的学习有很大的帮助,希望大家互相学习,共同进步,不足之处我会尽量完善!

本文出自 “时光的印记” 博客,请务必保留此出处http://lanlian.blog.51cto.com/6790106/1274830

 

Logo

更多推荐