DNS服务及BIND基础应用
DNS :Domain Name Service,一种重要的网络基础服务协议,采用C/S架构,属于应用层协议
BIND :Berkerley Internet Name Domain,ISC组织负责维护,是DNS协议的一种实现,监听于53/tcp端口,53/udp端口,named是bind程序的运行的服务进程名
- DNS协议是基于两个更基础的协议,使用情况为:
使用UDP协议 :主机名称解析过程时使用
使用TCP协议 :区域传输时使用
- 本地名称解析配置文件:hosts
CentOS系统的位置:/etc/hosts
Windows系统位置 :%WINDOWS%/system32/drivers/etc/hosts
DNS服务器:向客户端提供域名解析服务的服务器·
DNS服务器的类型;
4.1. 主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理维护;读写操作均可进行;
4.2从DNS服务器:从主DNS服务器或从其他的从DNS服务器那里区域传递(类似“复制”)一份解析库,只能进行读操作
4.3缓存DNS服务器:负责代理客户机的递归查询工作,并且采用迭代查询的服务器
4.4转发器:如果目标域名在本DNS服务器辖区内,直接转发
完整的DNS解析请求经过的流程:
客户端首先检查本机hosts文件中是否对目标域名已经定义,然后对客户端本地的DNS缓存内容检查,不成功后向DNS服务器发出【递归】请求,DNS服务器收到请求后,首先检查目标域名是否为自己辖区内的主机名,如果是直接返回答案,如果不是则检查本服务器自己的缓存信息,不成功则进行【迭代】搜寻。
Client –> 本机hosts文件 –> Local Cache –> DNS Server(recursion,递归) –> Server Cache –> iteration(迭代) –> 根 –> 顶级域 –> 对应的二级域 –> … –> 得出最终解析答案
- DNS解析响应生效优先级:从高到低排序为:
客户端的hosts文件 –> 客户端本地的DNS缓存 –> 服务器端DNS缓存 –> 客户端委托的DNS服务器实际查询请求的结解析答案
DNS查询类型
递归查询:只发出一次请求,就可以得到最终答案,过程中要委托服务器完成整个查询过程;一般来说,客户端向DNS服务端发出的都是递归查询请求,该请求只发出一次,就可以静候服务器给出解析答案。
迭代查询:服务器查询目标域名的过程中,需要从根开始,一直到目标域,得出最终结果的过程;DNS服务器端向根服务器询问、向目标域名的对应在根下的顶级域服务器询问,向下一级服务器询问,… ,直至查询到最终精确的解析答案的过程。
区域解析库:由众多RR组成
资源记录:Resource Record,RR,DNS条目,记录类型包括:
SOA :Start Of Authority , 起始授权记录;一个区域解析库有且仅能有一个SOA记录,且必须位于解析库的第一条记录
A :internet Address , FQDN –> IPv4
AAAA :FQDN –> IPv6
PTR :PoinTeR ,指针记录, IP –> FQDN
NS :Name Server , 专用于标明当前区域的DNS服务器
CNAME :Canonical Name , 别名记录
MX :Mail eXchanger , 邮件交换器
注意:
(1) TTL可以从全局继承,TTL : Time to Live,缓存时长,此项内容可省略,如果TTL值未明确单位的话,默认单位为秒
(2) @ 可用于表示当前域名
(3) 相邻的两个资源记录的name相同时,后续的可以省略
(4) 同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮调方式响应并解析
(5) 同一个值也可能有不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机而已,无特殊含义,此种情况也可以写成CNAME格式的条目。
bind配置:
主配置文件:/etc/named.conf
或包含进来其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析库文件:
/var/named/目录下;
一般名字为:ZONE_NAME.zone注意:
(1) 一台DNS服务器可同时为多个区域提供解析;
(2) 必须要有根区域解析库文件: named.ca;
(3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
正向:named.localhost
反向:named.loopback
DNS服务配置实例
准备两台虚拟机A,B(以CentOS6为例),分别安装bind程序包,进行如下操作
1.配置主DNS服务器(A号虚拟机):
service named start;ss -tnl
2.设置服务主配置文件
vim /etc/named.conf
#修改以下内容
options {
#监听能与外部主机通信的地址;
listen-on port 53 { 172.16.254.22;127.0.0.1; };
//listen-on-v6 port 53 { ::1; };
allow-query { any; };
recursion yes;
#学习时,建议关闭dnssec
dnssec-enable no;
dnssec-validation no;
3.检查配置文件语法错误:
named-checkconf [/etc/named.conf]
4.修改域配置文件,包含正反解
vim /etc/named.rfc1912.zones
#增加以下内容
zone "main.cjl.io" IN {
type master;
file "main.cjl.com.zone";
};
zone "16.172.in-addr.arpa" IN {
type master;
file "16.172.zone";
};
5.配置正解的解析库文件cjl.io.zone
cd /var/named/;ls
vim cjl.io.zone
$TTL 86400
$ORIGIN cjl.io.
@ IN SOA ns.cjl.io.nsadmin.cjl.io. (
2017052305 ;serial number
1H ;refresh
5M ;retry
1W ;deadline
1D ) ;neagtive TTL
IN NS ns1.cjl.io.
IN NS ns2.cjl.io.
ns1.cjl.io. IN A 172.16.254.22
ns2.cjl.io. IN A 172.16.253.30
www.cjl.io. IN A 172.16.254.1
web IN CNAME www
bbs IN A 172.16.254.2
6.配置反解的解析库文件16.172.zone
$TTL 86400
$ORIGIN 16.172.in-addr.arpa.
@ IN SOA ns1.cjl.com. admin.cjl.com. (
2017052901
1H
10M
1W
1D )
IN NS ns1.cjl.com.
22.254 IN PTR ns1.cjl.com.
30.253 IN PTR ns2.cjl.com.
1.254 IN PTR www.cjl.com.
2.254 IN PTR bbs.cjl.com.
注意
(1)” com “后面的 ” . “符号为必须,不可省略; 分号 ; “后为注释内容
(2) TTL可以从全局继承,TTL : Time to Live,缓存时长,此项内容可省略,如果TTL值未明确单位的话,默认单位为秒
(3) @ 可用于表示当前域名
(4) 相邻的两个资源记录的name相同时,后续的可以省略
(5) 同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮调方式响应并解析
(6)对SOA记录而言:
- 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字:@ 符号
- 当前区域管理员的邮箱地址,地址中不能使用@符号,一般用 ” . “符号替换,例如:linuxedu.magedu.com.
- 括号内的内容:(主从服务器协调属性的定义以及否定答案统一的TTL值)
(7)对NS记录而言:
- 任何一个NS记录后面的服务器名字都应该在后续有一个A记录
(8)对MX记录而言: - 一个区域内,MX记录可以有多个,但每个value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小表示优先级越高
-
(9)对A或AAAA记录而言:
为了避免用户写错名称而无法得到正确答案,可通过泛域名解析进行解析至某特定地址,如:
*.achudk.com. IN A 1.1.1.4
achudk.com. IN A 1.1.1.4
(10)对PTR记录而言:
正解与反解是两个不同的解析库文件,所以二者没有任何关系,这里将正解的一级域设置为.io. ,反解的一级域设置为.com. ,以示区分。网络地址和后缀可省略,但主机地址不可省且需要反过来写。
权限及属组修改:
chgrp named /var/named/cjl.io.zone
chmod o= /var/named/cjl.io.zone
7.检查语法错误:
named-checkzone ZONE_NAME ZONE_FILE
named-checkconf
8.让服务器重载配置文件和区域数据文件
rndc reload
#或
systemctl reload named.service
9.测试A号DNS服务器的解析功能是否实现:
测试正解
dig www.cjl.io
#查看解析结果,以下为成功示例
;; ANSWER SECTION:
www.cjl.io. 86400 IN A 172.16.254.1
dig bbs.cjl.io
#查看解析结果,以下为成功示例
;; ANSWER SECTION:
bbs.cjl.io. 86400 IN A 172.16.254.1
测试反解
dig -x 172.16.254.1
#查看解析结果,以下为成功示例
;; ANSWER SECTION:
1.254.16.172.in-addr.arpa. 86400 IN PTR www.cjl.com.
dig -x 172.16.254.2
#查看解析结果,以下为成功示例
;; ANSWER SECTION:
1.254.16.172.in-addr.arpa. 86400 IN PTR bbs.cjl.com.