一、介绍DNS基础
DNS(Domain Name System)域名系统,是一种用于TCP/IP应用程序的分布式数据库,他提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。DNS最常用的版本是BIND(Berkeley Internet Name Domain)——伯克利Internet域名服务器。
1、服务器类型
缓存DNS服务器:不需要注册,内部客户端使用,数据由客户端请求后将结果缓存到服务器上
主DNS服务器(master):保存本域的NS记录、主机A记录、MX记录、子域服务器记录等数据库更新由管理员手动完成
辅助DNS服务器(slave):也叫从服务器,数据库跟新从主服务器或其他辅助DNS服务器那里同步获取
子域服务器:需要在父域服务器授权
2、域名分级结构
顶级域:“.”也称之为根域,全球总共有13台根服务器,装完bind后在/var/named/named.ca 中保存的就是全球的13台根DNS信息
一级域:
国家域:.cn, .hk, .iq, .us, .jp, .uk
组织域:.com, .net, .edu, .org, .gov, .mil, .cc, .mobi
反向域:arpa FQDN <--IP
3、解析过程
(1)客户端client发起查询请求www.baidu.com,客户机首先查询自己的缓存了有没有,然后在查看自己的hosts文件,如果没有,把请求提交给local DNS
(2)local DNS接受到请求后,首先检查本地缓存中,有没有客户请求的地址,如果有就直接将缓存中的结果相应给客户,否则就开始迭代查询,去找根服务器root DNS
(3)根服务器root DNS接收到local DNS的请求并查找自己的区域文件记录,发现没有www.baidu.com的记录,但是我这里有.com的记录,我把.com以下的解析都授权给.com了, 然后将.com的地址回应给local DNS
(4)local DNS收到根root DNS的返回结果后,就知道了.com的地址,并且这不是client所需要的结果,所以local DNS再去找.com
(5).com接收到local DNS的请求后查询自己的区域文件记录。发现他这里也没有www.baidu.com的记录,但是有baidu.com的记录,并且已经将解析权限授权给了baidu.com,然后将baidu.com的地址回应给local DNS
(6)local DNS收到.com的回应,发现依然不是最终clent需求的的结果,于是乎local DNS再去找baidu.com
(7)baidu.com接收到local DNS的请求后,查询自己的区域文件记录,自己这里就有local DNS所要的答案,于是就将结果回应给localDNS
(8)local DNS收到baidu.com的结果后,发现这就是clent请求的地址,于是local DNS现将结果缓存一份然后就将最终结果通知clent
(9)client收到最终结果后就可以顺利的访问到www.baidu.com了
4、资源记录:
记录的类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start of Authority,起始授权记录;
在任何一个数据库中有且只能有一条SOA记录,必须是数据库的第一条记录
A:Address,主机记录;
标识从完全合格域名到IP地址的映射关系,FQDN --> IPv4;
AAAA: Address,FQDN --> IPv6;
PTR:PoinTeR,指针记录;
标识从IP地址到完全合格域名的映射关系,IP --> FQDN
NS:Name Server,名称服务器记录;
用户标明当前域中所有的DNS服务器;
CNAME:Conanical Name,别名记录;
标识从完全合格域名到完全合格域名的映射关系,FQDN --> FQDN
MX:Mail eXchanger,邮件交换器记录;
标识域中邮件服务器的主机名,从域名映射到完全合格域名,Domain name --> FQDN
优先级:0-65536,数字越小优先级越高;
区域数据库中资源记录的定义格式:
语法:name|FQDN [TTL] IN RR_TYPE VALUE
注意:
1.名称部分可以写FQDN,也可以除去域名部分的主机名,其域名会从配置文件中继承,也可以使用宏$Origin来定义;
2.TTL是以每秒为单位的时间概念,如果省略,则从全局定义的宏$TTL继承
3."@"符号可以用于引用当前区域的域名;
4.同一个name可以通过多条记录定义多个不同的VALUE;DNS在查询此类记录的时候,会以轮询的方式一次调取每个记录的内容;
5.多个name通过多条记录对应一个VALUE,通常用于多个名称对应同一IP地址,可以使用CNAME记录来进行标识;
5、七种资源记录在区域数据库中的具体格式:
SOA资源记录:
name:当前域的域名,如:qhdlink.com.;或者可以使用"@"代替域名;
value:
1.当前区域的主DNS服务器的FQDN;
2.当前区域数据库的管理员的邮件地址;但是使用"."来代替"@";
mailmaster.qhdlink.com.
3.主从服务器进行区域传送的相关时间定义及否定答案的统一TTL;
(Serial 1H 15M 1W 1D)
(
Serial;
1H;refresh
15M;retry
1W;expire
1D;minimal ttl)
例如:
$TTL 86400
qhdlink.com. 86400 IN SOA ns1.qhdlink.com. master.qhdlink.com.(
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D;ttl)
NS记录:
name:当前域的域名
value:当前区域内某DNS服务器的完全合格域名,如:ns.qhdlink.com.
注意:
1.一个域中可以有多个NS资源记录;
2.每个NS资源记录都必须要有一个A记录与之对应;
例如:
1.正常写法
qhdlink.com. 86400 IN NS ns1.qhdlink.com.
qhdlink.com. 86400 IN NS ns2.qhdlink.com.
2.使用宏继承的写法:
$Origin qhdlink.com.
$TTL 86400
IN NS ns1
IN NS ns2
MX记录:
name:当前域的域名;
value:当前域中某有效的邮件服务器的主机名;
注意:
1.一个域中,可以有多条MX资源记录;
2.每个MX资源记录都必须要有一条A记录与之对应;
例如:
qhdlink.com. 86400 IN MX 10 mail1.qhdlink.com.
@ IN MX 20 mail2
A记录:
name:域中某主机的FQDN或主机名称;
value:与主机名对应的IPv4地址;
例如:
www.qhdlink.com. 86400 IN A 192.168.1.1
www.qhdlink.com. 86400 IN A 192.168.1.2
www.qhdlink.com. 86400 IN A 192.168.1.3
www.qhdlink.com. 86400 IN A 192.168.1.4
www IN A 192.168.1.1
泛域名:*.qhdlink.com. IN A 1.2.3.4
直接域名:qhdlink.com. IN A 2.3.4.5
泛域名和直接域名都是防止用户写错名称而导致无法给出正确的解析结果;
CNAME记录:
name:别名的FQDN或简单的名称;
value:真正的名称的FQDN或其简单名称;
例如:
web.qhdlink.com. 86400 IN CNAME www.qhdlink.com.
web IN CNAME www
AAAA记录:规则与A记录一致;
ftp.qhdlink.com. 86400 IN AAAA ::1
PTR记录:
name:将IP地址反过来写,并在其后缀加反向域的标准后缀;所以其完整写法应该是:1.72.16.172.in-addr.arpa.
value:FQDN
例如:
1.72.16.172.in-addr.arpa. 86400 IN PTR www.qhdlink.com.
如果有全局宏定义的话:
1.72 IN PTR www www.qhdlink.com.
注意:
1.网络部分的地址和标准后缀可以省略;
2.PTR记录的value部分,必须写FQDN;
3.如果剩余的IP地址中的主机部分仍然是多段,主机部分依然需要反着写;
二、BIND软件
BIND——Berkeley Internet Name Domain,ISC(isc.org)
bind:
主配置文件:/etc/named.conf
可以在此配置文件中使用include命令包含其他的配置文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
声明区域;
/etc/named.root.key
主配置文件的格式:
1.注释方式:
//:单行注释;
/* ... */:任意内容注释;
2.分段配置的特点:
a.访问控制列表定义段:
acl ACL_NAME {...};
b.全局选项段:
options {...};
c.日志配置段:
logging {...};
d.区域配置段:
zone "ZONE_NAME" IN {...};
e.视图配置段:
view VIEW_NAME {...};
f.include包含段:
include /PATH/TO/SOME_CONFIG_FILE
全局配置段:
options {
listen-on port 53 { 127.0.0.1; 172.16.72.1; };
在启动DNS服务之后,named进程监听的IP地址;
directory "/var/named";
规定的解析库(区域数据库)的根目录;
allow-query { localhost; };
访问控制语句,允许哪些主机将查询请求发送至本服务器;默认为localhost,即只为服务器自身提供查询请求处理;
recursion yes;
全局开启递归查询;默认为所有客户端开启递归查询;
初学时,建议关闭dnssec功能;
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
};
三、测试工具
1、dig
基本语法:dig -t 资源记录类型 名称 @server(使用那台DNS服务器去查询,也可以不跟)
dig -t A #主机A记录
NS #NS服务器记录
MX #邮件记录
x #反向解析
axfr #查询所有记录,也叫区域传输
实例:
使用DNS服务器172.16.0.1查询NS记录root-server.net
# dig -t NS root-server.net @172.16.0.1
使用DNS服务器172.16.0.1查询全球13台根DNS的NS记录
# dig -t NS . @172.16.0.1
使用DNS服务器172.16.0.1查询www.sohu.com
# dig -t A www.sohu.com @172.16.0.1
2、host命令:
host [-t RR_TYPE] DOMAIN_NAME SERVER
3、nslookup命令:
命令行工具+交互式命令:
命令行工具:nslookup DOMAIN_NAME
交互式命令:nslookup
> server IP_ADDR
指定此次查询使用的DNS服务器IP地址;
> set q=RR_TYPE
要查询的资源记录的类型;
> QUERY_NAME
压迫查询解析的主机名;
> set type=RR_TYPE
同set q=RR_TYPE
4、rndc
这个命令功能可以查看DNS服务的运行状态,可以重新加载配置文件和清空缓存
rndc status #查看服务器状态
rndc reload #重新装载配置文件及区域解析库文件
rndc reconfig #仅重读配置文件
rndc flash #清空缓存
rndc trace #提升调试级别,级别越高信息越详细
rndc trace LEVEL
rndc trace 3 #指定调试级别为3
rndc notrace #关闭调试
rndc querylog #打开查询日志功能
5、named-checkconf
检查配置文件有没有错误,直接输入named-checkconf命令就可以测试,没返回任何信息就是没有错误。
6、named-checkzone
检查区域库文件有没有错误
基本语法:named-checkzone "区域名" 区域库文件路径
例如:
[root@localhost named]# named-checkzone "lyd.com" /var/named/lyd.com.zone
zone lyd.com/IN: loaded serial 20130826
OK
四、基本的正向和反向区域的配置和解析
1.配置一个正向的区域:
1) 定义区域:/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type {master|slave|forward|hint};
file "ZONE_NAME.zone";
};
zone "qhdlink.com" IN {
type master;
file "qhdlink.com.zone";
};
2) 创建区域数据文件
/var/named/qhdlink.com.zone
注意修改权限:
# chown :named qhdlink.com.zone
# chmod o-r qhdlink.com.zone
$ORIGIN qhdlink.com.
$TTL 86400
@ IN SOA ns1.qhdlink.com. admin.qhdlink.com. (
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1.qhdlink.com.
MX 10 mx1.qhdlink.com.
ns1.qhdlink.com. IN A 172.16.72.1
www IN A 172.16.100.1
www IN A 172.16.100.2
www IN A 172.16.100.3
web IN CNAME www
mx1 IN A 172.16.100.4
3) 重载配置文件和区域文件,使配置生效;
a.检测语法是否正确:
named-checkconf
检测named.conf及其辅助配置文件的语法正确与否;
named-checkzone "ZONE_NAME" FILE_NAME
检测域名和区域数据库文件是否对应和是否存在语法错误;
b.重载配置文件:
# rndc reload
# systemctl reload named.service
# service named reload(CentOS 6-)
2.配置一个反向的区域:
1) 定义区域:/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type {master主|slave从|forward转发|hint根};
file "ZONE_NAME.zone";
};
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.zone";
};
2) 创建区域数据文件
/var/named/172.16.zone
注意修改权限:
# chown :named 172.16.zone
# chmod o-r 172.16.zone
$ORIGIN 16.172.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.qhdlink.com. admin.qhdlink.com. (
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1.qhdlink.com.
1.72 IN PTR ns1.qhdlink.com.
1.100 IN PTR www.qhdlink.com.
2.100 IN PTR www.qhdlink.com.
3.100 IN PTR www.qhdlink.com.
4.100 IN PTR mx1.qhdlink.com.
3) 重载配置文件和区域文件,使配置生效;
a.检测语法是否正确:
named-checkconf
检测named.conf及其辅助配置文件的语法正确与否;
named-checkzone "ZONE_NAME" FILE_NAME
检测域名和区域数据库文件是否对应和是否存在语法错误;
b.重载配置文件:
# rndc reload
# systemctl reload named.service
# service named reload(CentOS 6-)
3.主从服务器:
注意:主从服务器都是区域级别的概念;
配置一个从区域:
ON slave:
1) 定义区域
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
示例:
zone "qhdlink.com" IN {
type slave;
file "slaves/qhdlink.com.zone";
masters { 172.16.72.1; };
};
2) 检测并重载配置文件;
named-checkconf
rndc reload
五、子域委派授权
在父域的区域文件中直接授权即可;
qhdlink.com区域的文件/var/named/qhdlink.com.zone
tech.qhdlink.com. IN NS ns.tech.qhdlink.com.
ns.tech.qhdlink.com. IN A 172.16.69.1
在子域的NS服务器上,直接创建子域的区域文件,管理资源记录即可;
/etc/named.rfc1912.zones
zone "tech.qhdlink.com" IN {
type master;
file "tech.qhdlink.com.zone";
};
touch /var/named/tech.qhdlink.com.zone
chown :named /var/named/tech.qhdlink.com.zone
chmod 640 /var/named/tech.qhdlink.com.zone
如果想要从子域的NS服务器解析父域的资源记录,则需要转发器的定义;
定义区域转发:
在子域的NS服务器上的/etc/named.rfc1912.zones中定义父域转发器;
zone "qhdlink.com" IN {
type forward;
forward first;
forwarders { 172.16.72.1; };
};
定义全局转发:
在子域的NS服务器的主配置文件/etc/named.conf文件中定义:
options {
...
forward first;
forwarders { 172.16.72.1; };
...
};
六、视图:view
定义视图:
view VIEW_NAME {
match_clients { acl; };
zone
zone
zone
...
};
注意:一旦在bind中启用的视图,则所有的zone都必须定义在视图中;
视图配置示例:
view intranet {
match-clients { mynet; };
zone "." IN {
type hint;
file "named.ca";
};
zone "qhdlink.com" IN {
type master;
file "qhdlink.com.intra.zone";
allow-query { mynet; };
allow-update { none; };
allow-transfer { none; };
};
};
view internet {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
zone "qhdlink.com" IN {
type master;
file "qhdlink.com.inter.zone";
allow-update { none; };
allow-transfer { none; };
};
};