基础认知篇

DNS服务的概述

DNS是Domain Name System 的缩写,即域名系统。DNS服务主要功能是将域名转换为相应的IP地址,提供DNS服务的系统就是DNS服务器。形如它能够把www.baidu.com这样的域名转换为61.135.169.125这样的IP地址;没有DNS,浏览baidu.com这个网站时,就必须用61.135.169.125这么难记的数字来访问。

DNS服务器可以分为3种,即主域名服务器(Master DNS)、辅助域名服务器(Slave DNS)、缓存服务器。

uMaster DNS:本身提供DNS 服务,并且本身含有区域数据文件。

uSlave DNS:和Master一起提供DNS服务,当Master服务器上的配置信息修改的时候,会同步更新到Slave服务器上

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

在linux系统下DNS服务的功能是通过bind软件实现的,几乎每个linux发行版都自带了这个DNS服务软件。下面将具体讲述DNS服务的安装、配置和使用。


服务器搭建篇

第一部分:主DNS服务的搭建实现(包含知识点阐述)

环境介绍:CentOS6.4-x86_64

bind版本:bind 9.8.2-0.17.rc1.el6

一.安装bind软件:

CentOS系统下安装bind时,一般都需要同时安装bind-utils、bind-chroot、ypbind、bind-libs和caching-nameserver几个支持bind的软件包。

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

上面的几个软件包都可以从系统光盘中查找,可以通过指向yum源进行安装:

[root@localhost ~]#yum install bind


1
2
3
4
5
6
7
8
9
10
11
12
13
14
查看安装软件生成的配置文件
[root@localhost ~]# 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


二.配置DNS服务

l 准备工作

dig(域信息搜索器)命令是个用于询问 DNS 域名服务器的灵活的工具。他执行 DNS 搜索,显示从受请求的域名服务器返回的答复。多数 DNS 管理员利用 dig 作为DNS 问题的故障诊断,因为他灵活性好、易用、输出清楚。虽然通常情况下 dig 使用命令行参数,但他也能够按批处理模式从文档读取搜索请求。不同于早期版本,dig 的 BIND9 实现允许从命令行发出多个查询。除非被告知请求特定域名服务器,dig 将尝试 /etc/resolv.conf 中列举的任何服务器。当未指定任何命令行参数或选项时,dig 将对“.”(根)执行 NS 查询。

dig命令格式:

dig –t 资源记录类型名称@server-ip

dig –x IP @server-ip 反向解析
dig –t axfr zone 验证完全区域传送
dig –t ixfr zone 验证增量区域传输(通常需要指定序列号)


l 配置工作

主配置文件:named.conf,主要作用是定义区域,定义各区域的全局配置,定义视图,定义日志,注意每个完整语句都要使用分号结尾,否则视为语法错误。

bind安装完毕之后,主程序目录默认为/var/named。


1).named.conf文件详解

1
2
3
4
5
6
7
8
[root@localhost ~]# vim /etc/named.conf
//named.conf
//
//Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
//server as a caching only nameserver (as a localhost DNS resolver only).
//
//See /usr/share/doc/bind*/sample/forexample named configuration files.
在named.conf配置文件中主要使用”//”进行注释信息,还可以使用/*、*/将多行注释


1
2
3
4
5
6
7
8
9
options {
listen-on port 53 { 127.0.0.1; }; #由于这里监听的地址是本机所以启动之后只会本机当服务器端本机当客户端进行通信;所以要改成外部地址或注释不要。
listen-on-v6 port 53 { ::1; }; #这里是IPV6的监听地址也可注释
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; }; #DNS定义完成之后允许谁来访问,这里定义的为只允许本地查询,所以可以注释不要。
#这是定义全局选项的,定义之后对所有区域都生效哦。
1
2
3
4
5
6
logging {
channel default_debug {
file"data/named.run";
severity dynamic;
};
#定义日志选项的
1
2
3
4
5
zone "."IN {
typehint;
file"named.ca";
};
#定义区域文件的

1
2
3
include"/etc/named.rfc1912.zones";
include"/etc/named.root.key";
#包含其他文件,意思就是可以将这些文件读取进来


2).定义本地区域文件解析

首先更改/etc/named.rfc1912.zones主区域配置文件,在文件尾部新增下面一段内容:

1
2
3
4
5
zone "magedu.com"IN {
typemaster;
file"magedu.com.zone"; #定义的是相对路径
allow-update { none; };
};

上面这段设置是用zone关键字来定义的一个正向区域,对应的域名为magedu.com。在这里type类型有三种,他们分别为master、slave、hint,含义如下:

master:表示定义的主域名服务器

slave:表示定义的是辅助域名服务器

hint:表示是互联网中的根域名服务器

file用来指定存放DNS记录的文件(一般都是区域名称.zone),allow-update定义是否允许客户主机或服务器自行更新DNS记录,上面指定的这个正向区域不允许更新DNS记录。

1
2
3
4
5
zone "18.16.172.in-addr.arpa"IN {
typemaster;
file"172.16.18.zone";
};
#这段设置是定义一个IP为172.16.18.*的反向区域


3).定义区域数据文件:

[root@localhost ~]# cd /var/named/ #切换到区域文件存放目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost named]# vim magedu.com.zone #编辑正向区域文件
$TTL 86400 #一天的时间秒钟计算,看你的需求你需要多少写多少
@ IN SOA dns.magedu.com. admin.magedu.com. (
2013081401
2H
10M
7D
6H )
IN NS dns #若不写全会自动同步名称,若不写全不能以”.”结尾
IN MX 10 mail
dns IN A 172.16.18.20
mail IN A 172.16.18.2
www IN A 172.16.18.6
www IN A 172.16.18.7 #若一个主机名两个地址可以实现“负载均衡“
ftpIN CNAME www

下面我们分析一下我们已经设定好的magedu.com正向区域数据文件的格式和含义:

可以看出,区域数据文件的内容很简单。

第一行是一个TTL设定,定义区域数据文件里面的各项记录的宏,缺少此行不影响使用,但是会出现警告信息。

第二行是一个SOA记录的设定,“@“代表相应的域名,也就是在/etc/named.rfc1912.zones,如在这里表示magedu.com,IN表示后面的数据使用的是Internet标准。SOA表示目前区域授权开始。每一个区域数据文件只能有一个SOA,不能重复,并且必须是所负责的zone中第一个”记录“。在SOA后面分别指定这个区域的授权主机名称和管理者的邮箱。

注:授权主机名和管理员信箱后面都要有一个”.”。由于”@”在区域数据文件中有其他含义,因此管理员邮箱地址中用”.”代替“@“符号。

接下来包含在括弧内的5组数字是作为服务器同步信息而设置的,含义如下:

第一段表示配置文件的修改版本,格式是年月日加上修改的次数,每次修改这个配置文件时都应该修改这个数值,因为当DNS进行信息同步时,会比较这个数值的值。如果这个数值比自身的数值大,就进行更新,否则忽略更新。(这个设置很重要,如果修改区域数据后没有更新该值,那么所做的更改就不会同步到其他DNS服务器)

第二段表示用来设定DNS服务器进行同步的间隔时间又称刷新时间。只通知给本区域解析库文件中定义NS记录的所有主机;

第三段表示同步更新失败之后,在进行重试的间隔时间。

第四段表示同步更新失败之后,多长时间清除对应的记录,又称过期时间

第五段表示否定的TTL值

接下来是对域名解析的具体设置,第1列表示不同的主机域名,但是省略了后面的域信息(若为空白表示与上面域名相同)。例如:”www”其实是www.magedu.com等。“IN“后面的指令含义说明如下:

NS:用来定义这个主机是个域名服务器,是个区域名称

MX:定义邮件服务器,这里需要定义优先级的哦!这里定义的交换级别为10

A:定义了一个A记录,即域名到IP的记录

CNAME:定义了域名的别名


[root@localhostnamed]# cp magedu.com.zone 172.16.18.zone #定义反向区域文件

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost named]# vim 172.16.18.zone #编辑反向区域文件
$TTL 86400
@ IN SOA dns.magedu.com. admin.magedu.com. (
2013081401
2H
10M
7D
6H )
IN NS dns.magedu.com. #这里必须写全,不然会默认成dns.18.16.172
20 IN PTR dns.magedu.com.
2 IN PTR mail.magedu.com.
6 IN PTR www.magedu.com.
7 IN PTR www.magedu.com.

分析:可以看出,反向区域文件基本结构和正向区域数据文件基本完全相同,只不过这里多出了一个PTR选项。PTR用来定义一个反向记录,也就是通过IP可以查到对应的域名信息。最后四行的第一列表示是主机的IP地址,只不过省略了网络地址部分,系统会自动补全,如20对应的是172.16.18.20.

至此,DNS文件配置部分已经基本配置完成,从过程可以看出DNS配置文件对格式的要求非常严格。因此,在以后的配置中要格外的小心。


4).定义区域文件的权限关系

1
2
3
4
5
6
7
8
9
10
11
[root@localhost named]# ls -l
total 36
-rw-r--r-- 1 root root 470 Jul 28 13:56 172.16.18.zone
drwxrwx--- 2 named named 4096 Jul 28 10:51 data
drwxrwx--- 2 named named 4096 Jul 28 13:52 dynamic
-rw-r--r-- 1 root root 504 Jul 28 13:56 magedu.com.zone
-rw-r----- 1 root named 1892 Feb 18 2008 named.ca
-rw-r----- 1 root named 152 Dec 15 2009 named.empty
-rw-r----- 1 root named 152 Jun 21 2007 named.localhost
-rw-r----- 1 root named 168 Dec 15 2009 named.loopback
drwxrwx--- 2 named named 4096 Feb 22 11:10 slaves

在这里我们通过编辑创建的magedu.com.zone文件,然后将该文件的权限属组更改成系统默认设定权限,这个授权很重要,要不然DNS无法正常工作。

1
2
3
4
[root@localhost named]# chmod 640 magedu.com.zone
[root@localhost named]# chmod 640 172.16.18.zone
[root@localhost named]# chown :named magedu.com.zone
[root@localhost named]# chown :named 172.16.18.zone

这里的named属组属主都是创建DNS时系统默认创建的。


5).检查区域文件语法错误与否:

1
2
3
4
5
6
7
8
[root@localhost named]# named-checkconf #检查主配置文件语法,无信息输出说明配置成功
[root@localhost named]# named-checkzone "magedu.com" /var/named/magedu.com.zone #检查zone语法错误与否
zone magedu.com/IN: loaded serial 2013081401
OK
[root@localhost named]# named-checkzone "18.16.172.in-addr.arpa" /var/named/172.16.18.zone
zone 18.16.172.in-addr.arpa/IN: loaded serial 2013081401
OK


三.测试DNS配置

在对DNS文件的所有配置完成后,需要重启服务,以使配置生效。由于我们这里还未启动过服务所以执行如下命令启动DNS服务:

1
2
3
[root@localhost etc]# service named start #启动服务
Generating /etc/rndc.key: [ OK ] #也许读取速度会很慢,稍等!
Starting named: [ OK ]

建议:若之前启动过服务,配置完成之后想重新启动新数据,建议不要使用restart重启,因为这样可能导致网络服务断掉,所以要使用reload重新载入信息。

1
2
[root@localhost named]# service named reload
Reloading named: [ OK ]

下面我们使用dig命令对DNS正向区域解析情况进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost named]# dig -t A www.magedu.com @172.16.18.20 #解析A记录
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t A www.magedu.com @172.16.18.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44158
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.magedu.com. IN A
;; ANSWER SECTION:
www.magedu.com. 86400 IN A 172.16.18.6
www.magedu.com. 86400 IN A 172.16.18.7
;; AUTHORITY SECTION:
magedu.com. 86400 IN NS dns.magedu.com.
;; ADDITIONAL SECTION:
dns.magedu.com. 86400 IN A 172.16.18.20
;; Query time: 1 msec
;; SERVER: 172.16.18.20#53(172.16.18.20)
;; WHEN: Sun Jul 28 14:31:54 2013
;; MSG SIZE rcvd: 98


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost named]# dig -t NS magedu.com @172.16.18.20 #解析NS记录
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t NS magedu.com @172.16.18.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41920
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;magedu.com. IN NS
;; ANSWER SECTION:
magedu.com. 86400 IN NS dns.magedu.com.
;; ADDITIONAL SECTION:
dns.magedu.com. 86400 IN A 172.16.18.20
;; Query time: 1 msec
;; SERVER: 172.16.18.20#53(172.16.18.20)
;; WHEN: Sun Jul 28 14:39:00 2013
;; MSG SIZE rcvd: 62


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@localhost named]# dig -t SOA magedu.com @172.16.18.20 #解析SOA记录
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t SOA magedu.com @172.16.18.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60898
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;magedu.com. IN SOA
;; ANSWER SECTION:
magedu.com. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600 #这里全部以秒为单位进行显示
;; AUTHORITY SECTION:
magedu.com. 86400 IN NS dns.magedu.com.
;; ADDITIONAL SECTION:
dns.magedu.com. 86400 IN A 172.16.18.20
;; Query time: 1 msec
;; SERVER: 172.16.18.20#53(172.16.18.20)
;; WHEN: Sun Jul 28 14:44:34 2013
;; MSG SIZE rcvd: 104

下面我们使用dig命令对DNS反向区域解析情况进行测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost named]# dig -x 172.16.18.20 #反向区域解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -x 172.16.18.20
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13525
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;20.18.16.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
20.18.16.172.in-addr.arpa. 86400 IN PTR dns.magedu.com.
;; AUTHORITY SECTION:
18.16.172.in-addr.arpa. 86400 IN NS dns.magedu.com.
;; ADDITIONAL SECTION:
dns.magedu.com. 86400 IN A 172.16.18.20
;; Query time: 1 msec
;; SERVER: 172.16.18.20#53(172.16.18.20)
;; WHEN: Sun Jul 28 15:56:49 2013
;; MSG SIZE rcvd: 101


1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost named]# dig -t axfr 18.16.172.in-addr.arpa #反向完全区域解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t axfr 18.16.172.in-addr.arpa
;; global options: +cmd
18.16.172.in-addr.arpa. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600
18.16.172.in-addr.arpa. 86400 IN NS dns.magedu.com.
2.18.16.172.in-addr.arpa. 86400 IN PTR mail.magedu.com.
20.18.16.172.in-addr.arpa. 86400 IN PTR dns.magedu.com.
6.18.16.172.in-addr.arpa. 86400 IN PTR www.magedu.com.
7.18.16.172.in-addr.arpa. 86400 IN PTR www.magedu.com.
18.16.172.in-addr.arpa. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600
;; Query time: 5 msec
;; SERVER: 172.16.18.20#53(172.16.18.20)
;; WHEN: Sun Jul 28 16:02:04 2013
;; XFR size: 7 records (messages 1, bytes 220)

从上面的输出信息可以看出,DNS都可以正确解析,说明我们的配置没有问题,DNS服务器已经正常工作了。

小拓展:如何不用指向本机就能做本地解析??

#直接将DNS指向本机即可

1
2
3
4
[root@localhost named]# vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.16.18.20
#直接将DNS指向本机即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@localhost named]# dig -t axfr magedu.com #正向完全区域解析
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t axfr magedu.com
;; global options: +cmd
magedu.com. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600
magedu.com. 86400 IN NS dns.magedu.com.
magedu.com. 86400 IN MX 10 mail.magedu.com.
dns.magedu.com. 86400 IN A 172.16.18.20
ftp.magedu.com. 86400 IN CNAME www.magedu.com.
mail.magedu.com. 86400 IN A 172.16.18.2
www.magedu.com. 86400 IN A 172.16.18.6
www.magedu.com. 86400 IN A 172.16.18.7
magedu.com. 86400 IN SOA dns.magedu.com. admin.magedu.com. 2013081401 7200 600 604800 21600
;; Query time: 1 msec
;; SERVER: 172.16.18.20#53(172.16.18.20)
;; WHEN: Sun Jul 28 15:00:08 2013
;; XFR size: 9 records (messages 1, bytes 231)



本文出自 “起点梦想” 博客,请务必保留此出处http://pangge.blog.51cto.com/6013757/12730