DNS服务及其实现bind(一)
一、DNS基本原理
1.1 什么是DNS?BIND又是什么?
DNS:Domain Name Service,它是一个基于应用层的协议,是C/S构架的,监听在 53/udp和 53/tcp。
BIND: Berkerley Internet Name Domain, 它是DNS域名解析的一种实现方式。
1.2 DNS发展
早期的域名解析方式:
但是随着互联网的普及,全世界的电脑太多了,要解析就很不容易,所以现在的互联网是分层树状结构的去解析,结构图如下
二、DNS基本概念
2.1 DNS服务器的类型有哪些?
有主DNS服务器、辅助DNS服务器、缓存DNS服务器、转发器
2.2 解析类型有哪些?
有正向区域解析和反向区域解析,正向解析为name --> IP, 反向解析为IP--> Name
2.3 主DNS服务器和从DNS服务器有什么区别?
主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理员维护
从DNS服务器:从主DNS服务器或其他的从DNS服务器那里复制(区域传递)一份解析库
2.4 区域传送有哪些?
全量传送:传送整个解析库
增量传送:传送解析库变化的那部分内容
2.5 DNS查询类型有哪些?
递归查询: 一次请求就得到正确答案
迭代查询: 一次请求得到一个答案,然后根据答案再去发送请求,经过多次请求后得到正确答案的过程
2.5 一次完整的查询请求经过的流程
client --> hosts文件 --> dns service
(local cache --> dns server)(recursion递归) --> server cache --> iteration(迭代)
2.6 bind是什么?
bind是dns协议的一种实现
2.7 bind如何进行解析?
bind解析是通过区域解析库来实现
2.8 区域解析库是什么?
区域解析库表现形式是由众多RR(Resource Record )组成,RR在配置文件中进行定义
2.9 资源记录
2.9.1 资源记录类型有哪些?
记录类型有: A、AAAA、PTR、SOA、NS、CNAME、MX
2.9.2 资源记录各类型含义?
SOA: Start Of Authority, 起始授权记录:一个区域解析库有且仅能有一个SOA记录,而且必须为解析库的第一条记录。
A: internet Address, 作用就是提供正向解析: FQDN --> IP
AAAA: ipv6地址正向解析: FQDN --> IPv6
PTR: PoinTeR, 反向解析:Ip --> FQDN
NS: Name Server, 标明当前区域的DNS服务器
CNAME: Canonical Name, 别名记录
MX:Mail eXchanger, 邮件服务器
2.9.3 资源记录定义的格式及定义示例
语法: name [TTL] IN rr_type value
注意: a. TLL可从全局继承
b. @可用于引用当前区域的名字
SOA:
name: 当前区域的名字,如“baidu.com.”
value: 有多部分组成
1. 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
2. 当前区域管理员的游戏地址,地址中不能使用@符号,一般用.替换,如 alen.chengkaihua.com
3. (主从服务协调属性的定义以及否定的答案的统一TTL值)
例如:
alen.com. IN SOA ns1.alen.com. nsadmin.alen.com. (
2015042201 ; 序列号
2H ;刷新时间
10M ;重试时间
1W ; 过期时间
1D ;否定答案的TTL值
)
NS:
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字
注意: 一个区域可以有多个NS记录
例如:
alen.com. IN NS ns1.alen.com.
alen.com. IN NS ns2.alen.com.
注意:1.相邻的两个资源记录的name相同时,后续的可省略
2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
MX:
name: 当前区域的名字
value: 当前区域的某邮件服务器的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高。
例如:
alen.com. IN MX 10 mx1.alen.com.
alen.com. IN MX 20 mx2.alen.com
注意: 对MX记录而言,每一个MX记录后面的服务器名字,都应该在后续有一个A记录
A:
name: 某主机的FQDN
value: 主机名对应主机的IP地址
例如:
ns1.alen.com. IN A 1.1.1.1
ns2.alen.com. IN A 1.1.1.2
MX1.alen.com. IN A 1.1.1.3
MX2.alen.com. IN A 1.1.1.4
注意:
*.alen.com. IN A 1.1.1.5
避免用户写错答案时给错误答案,可通过泛域名解析进行解析至某特定地址
AAAA:
name: FQDN
value: IPv6
PTR:
name: IP,有特定格式,IP地址反过来写,1.1.1.2要写成2.1.1.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.alen.com.
CNAME:
name: 别名的FQDN
value: 正式名字的FQDN
例如:
web.alen.com. IN CNAME www.alen.com.
三、前期准备
3.1 实验目标
以域名alen.com.为例,配置一台主DNS服务器,实现正反向解析功能,以192.168.1.102为主DNS服务器
3.2 安装包及配置文件
查看bind服务相关包,安装所需要的包即可:
# yum list bind*
安装bind服务及其依赖包,主要安装这三个包: bind、bind-libs、bind-utils
# yum install bind bind-libs bind-utils
bind相关配置文件:
服务脚本:/etc/rc.d/init.d/named
主配置文件: /etc/named.conf, /etc/named.rfc1912.zones
解析库文件:/var/named/ZONE_NAME.ZONE(需要自己定义)
日志文件: /var/log/messages
四、开始搭建DNS服务器
4.1 主DNS实现正向解析和反向解析
4.1.1 配置缓存名称服务器
4.1.1.1 监听外部地址即可
4.1.1.2 dnssec: 建议测试时关闭dnssec
cp /etc/named.conf{,.bak}
vim /etc/named.conf
options {
// listen-on port 53 { 192.168.1.102; 127.0.0.1; }; //可以设置ip也可以直接注释整行
// 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 { any; }; //可以设置为any也可以直接注释掉
recursion yes;
//关闭dnssec
// dnssec-enable yes;
// dnssec-validation yes;
/* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key";
// managed-keys-directory "/var/named/dynamic";
};
4.1.2 在缓存dns服务器的基础上,配置主DNS服务器
cp /etc/named.rfc1912.zones{,.bak}
vim /etc/named.rfc1912.zones
4.1.2.1 在最后一行添加正向解析区域和反向解析区域:
zone "alen.com" IN {
type master; // 正向区域类型
file "alen.com.zone"; //相对于/var/named而言,输入区域相对路径
};
zone "1.168.192.in-addr.arpa" IN { //反向解析区域
type master;
file "192.168.1.zone";
};
定义区域正向解析库文件
在/var/named创建 alen.com.zone正向解析库文件并配置
$TTL 86400
$ORIGIN alen.com.
@ IN SOA ns1.alen.com. admin.alen.com (
2010010101 ;序列号
1H ;刷新时间
5M ;重试时间
7D ;七天过期
1D ) ;否定答案的统一TTL值
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 192.168.1.102
ns2 IN A 192.168.1.103
mx1 IN A 192.168.1.104
mx2 IN A 192.168.1.105
www IN A 192.168.1.102
www IN A 192.168.1.103
ftp IN CNAME www
alen.com. IN A 192.168.1.102
* IN A 192.168.1.102 ;泛域名解析
定义区域反向解析库文件
在/var/named目录下创建 192.168.1.zone反向解析库文件并配置
$TTL 1D
$ORIGIN 1.168.192.in-addr.arpa.
@ IN SOA ns1.alen.com. admin.alen.com. (
2015041101 ;序列号
2H ;刷新时间
5M ;重试时间
1W ;过期时间一周
1D ) ;否定答案的统一TTL值
IN NS ns1.alen.com.
IN NS ns2.alen.com.
102 IN PTR ns1.alen.com.
103 IN PTR ns2.alen.com.
102 IN PTR www.alen.com.
103 IN PTR www.alen.com.
104 IN PTR mx1.alen.com.
105 IN PTR mx2.alen.com.
五、测试
5.1 测试工具介绍
5.1.1 dig的使用
dig [-t type] name [@SERVER] [query options]
用于测试DNS系统,不会查询hosts文件进行解析
比如: dig -t A ns1.alen.com @192.168.1.102
查询选项:
+[no]trace: 跟踪解析过程
-[no]recurse: 递归解析
测试反向解析:
dig -x IP @SERVER
比如: dig -x 192.168.1.102 @ 192.168.1.102
模拟区域传送:
dig -t axfr ZONE_NAME @SERVER
5.1.2 host命令
host [-t type] name [SERVER]
比如: host -t A ns1.alen.com 192.168.1.102
5.1.3 nslookup命令
nsloopup [-option] [name | - ] [server]
交互式模式:
server IP: 指明使用哪个DNS server 进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
比如: nsloopup
> server 192.168.1.102
> set q=A
> ns1.alen.come
5.2 测试
修改 alen.com.zone和192.168.1.zone文件属组
# chowm :named alen.com.zone
# chown :named 1.168.192.zone
检查区域配置文件有无错误:
# named-checkconf //检查主配置文件
# named-checkzone "alen.com" alen.com.zone
# named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone
重启named服务
# service named restart
测试资源记录
# dig -t NS alen.com @192.168.1.102
# dig -t A ns1.alen.com @192.168.1.102
# dig -t A www.alen.com @192.168.1.102
# dig -t A pop.alen.com @192.168.1.102
# dig -t A alen.com @192.168.1.102
# host -t A ns2.alen.com 192.168.1.102
测试反向解析:
# dig -x 192.168.1.102 @192.168.1.102
至此,一台主DNS服务器就配置好了,且支持正反向解析功能。

更多精彩