|
|
一、 DNS简介:
DNS(Domain Name System),是互联网的一种很重要的基础服务,DNS服务作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。当在DNS区域传送机制运行在TCP协议,使用端口号53。
二、 DNS查询方式:
DNS共有两种查询方法:
由局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域的根域服务器进行查询,再由根域名服务器一级级向下查询。最后,将得到的查询结果返回结局部DNS服务器,再由局部DNS服务器返回给客户端。
2.迭代查询
当局部DNS服务器自己不能回答客户机的DNS查询请求时,也可以通过迭代查询的方式进行域名解析,如图2所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器发出查询请求,直到得到查询结果为止。
三、常用DNS资源记录类型及示例:
任何解析库文件的第一个记录类型必须是SOA
RRType结构:
Name[ttl] INRRTypevalue
1. SOA记录:
Start Of Authority
Name: 区域名称, 通常可以简写成@
[ttl]: time to live, 此值可以省略
IN: 是固定的,表示Internet
RRType: 就是Record Resource Type, 可以使A,AAAA,SOA,NS,CNAME等等
value: 主DNS服务器的FQDN,也可以是当前区域的区域名称
例如: @INSOAns.magedu.com.admin.magedu.com.(
serial number;解析库的版本号,例如20150703
refresh time;周期性同步时间间隔
retry time;重试的时间间隔
expire time;过期时长, 从服务器放弃解析的时间间隔
nagative answer ttl; 否定答案的统一缓存时长
)
#最后面的. 不能省略,管理员的邮箱地址不能使用@,因为这里@有特殊意义,通常用.来代替
记录如果很长,可以使用()来表示 括号内都是一行的内容
serial number,需要给定一个起始值,以后每一次更改,就会自动增加,window dns会自动生成,linux需要自己指定
2. NS记录:
name server 表明域名解析服务器的记录
name: 区域名称
value: DNS服务器的FQDN
例如: @IN NS ns.magedu.com.
注意:
如果有多台NS服务器,每一个都必须有对应的NS记录,否则不会被识别成dns服务器,RR有变化,也不会notify
对于正向解析来讲,每个NS的FQDN都应该有一个A记录
3. MX记录:
Mail eXchanger 邮件服务记录
name: 区域名称
value: 邮件服务器的FQDN
例如:
@IN MX 10mail.magedu.com.
@IN MX 20mail.magedu.com.
注意:
如果有多台MX服务器,每一个都必须有对应的MX记录,单各MX记录还有优先级属性
对于正向解析文件来讲,每一个邮件服务器的FQDN都应该有一个A记录
4. A记录:
IPv4 Address
name: FQDN
value: IP
例如:
www.magedu.com.INA 1.1.1.1
www.magedu.com.IN A 1.1.1.2
pop3.magedu.com.IN A 1.1.1.3
imap.magedu.com. INA 1.1.1.3
5. AAAA记录:
IPv6 Address 类似A记录,不详述
6. CNAME记录:
Canonical Name 别名记录
name:FQDN
value:FQDN
例如:
www.magedu.com. INA 1.1.1.4
web.magedu.com.IN CNAME www.magedu.com.
7. PTR记录:
pointer 反向解析记录
name: 逆向主机IP地址(不包含网络地址)加后缀in-addr.arpa.
例如: 172.16.100.7/16, 网络地址是172.16,主机地址,100.7,其name为7.100.in-addr.arpa.
value: FQDN
例如:
7.100.in-addr-arpa.IN PTR www.magedu.com.
常用的DNS资源记录也就这几种,下面来介绍如何在CentOS6下使用bind软件来实现DNS服务器搭建及配置。
四、CentOS6下DNS服务器搭建及简单配置
在Linux系统中,最常用的DNS服务器软件是bind(Bekerley Internet Name Domain),是由isc.org维护更新的,可以通过rpm -ql bind来查看bind的配置文件及二进制命令。
注意: 这次实验是在内网搭建DNS服务器,并不能对外网提供解析服务,如果需要对外提供DNS服务,还需要到域名注册商去注册域名
绑定我们的DNS服务器才能实现对外DNS服务。
1. bind安装
1
| #yum install -y bind.x86_64
|
2. 修改bind主配置文件 /etc/named.conf
定义区域:
#此配置文件中,可以用//来标示注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| 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;
//dnssec-enable yes; //和dnssec相关的内容先不解释,和安全相关
//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;
};
};
zone "." IN {
type hint;
file "named.ca"; //13个根节点都在这个文件中
};
include "/etc/named.rfc1912.zones"; //定义区域内各种记录的zone配置文件
//include "/etc/named.root.key"; //和dnssec相关,先注释掉,下篇博客解释高级应用时候在做详细解释
|
3. 修改区域定义文件/etc/named.rfc1912.zones
1
| #vim /etc/named.rfc1912.zones
|
在此文件中,bind默认创建了5个zone,分别是:
1
2
3
4
5
| zone "localhost.localdomain"
zone "localhost" IN
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa"
zone "1.0.0.127.in-addr.arpa"
zone "0.in-addr.arpa"
|
本地解释,IPv6的本地解析及其反向本地解析区域,我们保持默认即可,在文件最下方继续追加我们需要创建的区域(zone)
追加内容:
1
2
3
4
| zone "mageedu.com" IN {
type master;
file "mageedu.com.zone";
};
|
4. 修改区域解析库文件 /etc/named/mageedu.com.zone
1
2
3
4
5
6
7
8
9
10
11
12
13
| $TTL 3600
@ IN SOA ns.mageedu.com. admin.mageedu.com. (
20150705
2H
10M
7D
1D)
IN NS ns.mageedu.com.
IN MX 10 mail.mageedu.com.
ns.mageedu.com. IN A 172.16.100.7
mail.mageedu.com. IN A 172.16.100.8
www.mageedu.com. IN A 172.16.100.9
pop.mageedu.com. IN CNAME mail.mageedu.com.
|
5. 修改区域解析库文件的权限及属性
1
2
| #chgrp named /var/named/mageedu.com.zone
#chmod 640 /var/named/mageedu.com.zone
|
6. 检查配置文件的语法
CentOS6下可以使用:
1
| #service named configtest
|
由于CentOS7,不在使用Service启动,所以可以使用以下两个命令单独查看:
1
2
| #named-checkconf 查看主配置文件/etc/named.conf的语法错误
#named-checkzone 查看区域定义文件/etc/named.rfc1912.zones的语法错误
|
7. DNS服务器启动
1
2
| #service named reload #只要是没有改变监听端口,都可以使用reload命令来重新载入配置信息
#rndc reload
|
至此,一个区域为"mageedu.com"的正向解析就创建好了,可以提供解析服务了。
但是要注意,需要将客户端的/etc/resolv.conf的DNS服务器地址修改成我们提供DNS服务器的IP
五、DNS客户端测试工具
bind-utils包提供了三款DNS客户端测试工具:
/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
接下来,按个介绍下:
a. 正向解析测试:
1). host -t RRType NAME [SERVER]
host -t A www.mageedu.com 使用本机/etc/resolve.conf的name erver来解析
host -t A www.mageedu.com 172.16.100.7 使用指定的dns服务器来解析
注意: 指定记录,需要特定记录的格式,例如 NS记录,就需要指定一个区域的名字:
host -t NS mageedu.com 172.16.100.7
2). nslookup
nslookup>
server IP:
set type={A|SOA|NS|MX...}
name: 一定要和type对应的名称
3). dig
dig -t TYPE name @server
类型可使用: AXFR
例如:dig -t AXFR mageedu.com @172.16.100.7
测试反向解析不使用-t PTR,而使用-x选项
dig: 查询选项
+trace
+recurese
+norecurese
可以用dig -t NS @a.root-servers.net.来生成 name.ca文件,确保获取到的都是最新的根dns
b. 反向区域测试:
区域名称为逆向网络地址加 .in-addr-arpa.
例如:
zone "100.16.172.in-addr.arpa." IN {
type master;
file "172.16.100.zone";
};
反向区域解析库文件: /var/named/172.16.100.zone
$TTL 600 #每一个dns条目的缓存秒数
@IN SOA ns.magedu.com. admin.magedu.com. (
20140801 ; 分好后可以写注释
2H ;
10M
7D
1D)
IN NS ns.mageedu.com. #这里name没有填写,表示和上一条的name一致
//反向解析无MX记录
7 IN PTR ns.mageedu.com.
8 IN PTR www.mageedu.com.
9 IN PTR mail.mageedu.com.
然后可以使用如下几种方法测试反向解析:
1
2
| #host -t x 172.16.100.9 172.16.100.7
#dig -t x 172.16.100.7 @172.16.100.7
|
测试区域
1
| #dig -t AXFR 100.16.172.in-addr.arpa @172.16.100.7
|
#172.16.100.in-addr.arpa 是反向区域的名字
说明:
1. 正向解析和反向解析文件中的名称可以仅适用于相对名称,他们均相对当前区域而言
@ IN NS ns
ns IN A 172.16.100.7
mail IN A 172.16.100.8
www IN A 172.16.100.9
pop IN CNAME mail
或者在zone文件里增加变量$ORIGIN指明简写后的部分
例如: $ORIGIN mageedu.com
2. 绝对后缀可以使用$ORIGIN来定义
正向
$ORIGIN mageedu.com
反向
$ORIGIN 172.16.100.in-addr-arpa.
下篇博客会介绍bind的高级应用,例如便已安装,区域传送及压力测试等。
|
|