文章目录
DNS(Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,提供域名与IP地址之间的转换服务。DNS分为正向与反向域名解析,适用C/S,端口53/udp,53/tcp,属于应用层协议。
DNS原理
域的分类
域是分层管理,共有五层。域是从上到下授权的,每一层都只负责自己的直辖下层,而不负责下下层。例如根域给顶级域授权,顶级域给普通域授权,但是根域不会给普通域授权。域的授权和管理绝对不会向下越级,因为它根本不知道下下级的域名是否存在。
- 根域
根域(root)“.”,就是一个点,全球只有13个根域服务器。
- 顶级域
顶级域一般两种划分:
-
按国家分:.cn(中国),.uk(英国)、.us(美国)
-
按组织分:.org、.net、.com、.edu、.gov、.cc等
-
反向域:arpa
- 二级域
个人或组织在internet上使用的注册名称。
- 子域
已经注册二级域名派生的域名。
- 主机
网络上特定主机,如www、mail、ftp等。
查询方式
- 递归查询
本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机。
- 迭代查询
本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
解析流程
一次完整的查询请求经过的流程:
-
client查看本机dns缓存;
-
cilent查看本机host文件;
-
client递归请求本地dns;
-
本地dns查看本地缓存;
-
本地dns迭代请求根域;
-
本地dns迭代请求顶级域;
-
本地dns迭代请求二级域;
-
……;
-
本地dns返回肯定或否认应答。
权威应答
- 权威域名服务器
Authoriative Server - 权威域名服务器。一个域由这台dns服务器管理,我们就称这台dns服务器是这个域的权威服务器。
- (非)权威应答
一个应答是由它的权威服务器给出,我们就称这个应答是权威应答,否则就是非权威应答,因为一个域中所有的主机都是在DNS服务器中的区域数据文件中记录的,对于主机来说,它们的位置只有直接上层才知道在哪里。
DNS缓存
在Client和DNS服务器这些DNS解析系统中都会使用缓存来加速解析以减少网络流量和查询压力。但是要访问的主机IP可能会改变,所有使用缓存得到的答案不一定是对的,因此缓存给的答案是非权威的,只有对方主机的上一级给的答案才是权威答案。缓存给的非权威答案应该设定缓存时间,这个缓存时间的长短由权威者指定。另外访问某个域下根本不存在的主机,这个域的DNS服务器也会给出答案,但是这是否定答案,否定答案也会缓存,并且有缓存时间。
DNS类型
主DNS服务器
主DNS服务器(primary name server)从域管理员构造的本地磁盘文件中加载域信息,该文件(区域文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威去回答对其管辖域的任何查询。
从DNS服务器
从DNS服务器(secondary name server)从主服务器中复制一整套域信息。区域文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为”区域文件复制”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区文件,因为可以从主服务器中下载该区文件。
缓存DNS服务器
缓存DNS服务器(caching-only server)从某个远程服务器取得域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。当BIND被配置为缓存服务器的时候,它只会回应已缓存的请求,并将所有其他的请求转发到上游的 DNS 服务器。缓存名称服务器只需要.这个zone file文件即可。
转发DNS服务器
转发DNS服务器(forwarding server)负责所有非本地域名的本地查询。转发域名服务器接到查询请求时,在其缓存中查找,如找不到把请求依次转发到指定的域名服务器,直到查询到结果为止,否则返回无法映射的结果。
资源记录
对于提供DNS服务的系统(DNS服务器),域名相关的数据都需要存储在文件(区域数据文件)中。这些数据分为多种类别,每种类别存储在对应的资源记录(resource record,RR)中。也就是说,资源记录既用来区分域数据的类型,也用来存储对应的域数据。
DNS域名数据库由资源记录和区文件指令组成:
- SOA RR
Start Of Authority,起始授权记录,一个区域解析库有且仅有一个SOA开始。SOA 记录说明了在众多NS记录里那一台才是主名称服务器。
- NS RR
Name Server,专用于标明当前区域的DNS服务器。
- A RR
FQDN --> IP。
- AAAA RR
FQDN --> IPv6。
- PTR RR
IP --> FQDN。
- CNAME RR
Canonical Name,别名记录。
- MX RR
Mail eXchanger,邮件交换器。
DNS配置
主要文件
/etc/named.conf #主配置文件
/etc/named.rfc1912.zones #区域配置文件
/etc/rndc.conf #rndc配置文件
/etc/sysconfig/named #服务脚本配置文件
/usr/lib/systemd/system/named-setup-rndc.service #rndc服务
/usr/lib/systemd/system/named.service #bind服务
/usr/sbin/named #bind应用
/usr/sbin/named-checkconf #检查配置文件工具
/usr/sbin/rndc #远程管理dns服务器
/usr/sbin/rndc-confgen #rndc配置文件生成工具
/var/named #解析库文件目录
/var/named/named.ca #根域的解析文件
/var/named/named.localhost #localhost→127.0.0.1,FQDN→IP解析文件
/var/named/named.loopback #127.0.0.1→localhost,IP→FQDN解析文件
/var/named/slaves #从dns服务器解析库文件目录
/var/log/named.log #日志文件
配置详解
访问控制
- ACL
定义格式:
acl acl_name { ip; ip; net/prefix; };
注意:只能先定义,后使用;因此,一般定义在配置文件中options的前面。
四个内置的acl:
none:没有一个主机
any:任意主机
local:本机
localnet:本机所在网络
- 访问控制的指令
allow-query {}: 允许查询的主机;白名单
allow-transfer {}:主备时,允许区域传送的主机;白名单
allow-recursion {}: 允许递归的主机
allow-update {}: 允许其他主机更新区域数据库中的内容,最好用none,详见nsupdate命令
智能DNS
使用view可以实现根据客户端来源为不同来源的客户端展现同一个区域的不同配置,不同来源的客户端解析同一个区域也可能得到不同的结果。
定义格式:
view VIEW_NAME {
match-clients { acl_name; };
zone ZONE_NAME IN {
type master;
file “”;
}
}
注意:
-
一旦启用了view,所有的zone都只能定义在view中;
-
仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
-
客户端请求到达时,自上而下检查每个view服务的客户端列表。
全局配置
options {
listen-on port “PORT” { “IP”; }; #指明监听端口和地址
PORT:53
IP:本机IP、内置ACL
directory "/var/named"; #区域数据目录
allow-query { “IP”; }; #服务器允许查询的客户端
IP:指定IP、内置ACL
recursion yes; #服务器允许客户端递归查询
#DNS安全
dnssec-enable yes; #是否支持DNSSEC开关,建议关闭
dnssec-validation yes; #是否进行DNSSEC确认开关,建议关闭
#转发服务器配置
forward {first|only}; #转发方式
first:首先转发。当转发器不回应时,再自行去迭代查询
only:只转发给指定的转发器
forwarders { SERVER_IP; }; #转发到指定dns服务器
#调用区域文件
include "/etc/named.rfc1912.zones"; #调用rfc1912区域配置文件
}
日志配置
logging { …… }
区域配置
zone "ZONE_NAME" IN {
type (master|slave|hint|forward);
file "ZONE_NAME.zone";
};
type:
master:主区域
slave:从区域
hint:根区域
forward:转发区域,在区域配置中添加forward
forward {first|only};
forwarders {SERVER_IP};
file:DNS区域解析文件相对路径/var/named
解析文件
解析文件位于/var/named/目录下。
/var/named/named.ca:根区域解析文件
/var/named/named.localhost:localhost正向解析
/var/named/named.loopback:localhost反向解析
- 定义格式
name [TTL] IN type value
name:可使用@引用当前区域名字。
TTL:有效区域数据生命周期,单位:[M|W|D|H]。
type:SOA、NS、A、MX、PTR、CNAME。
value:FQDN、域名、IP、主机名
- 缩写规则
- "$"符号
$TTL:有效区域数据缓存时间。如:$TTL 1D
、$TTL 86400
$ORIGIN:默认值为区域配置文件中定义zone “chenran.com” IN时后面的域名。如:$ORIGIN chenran.com.
- fqdn自动补齐
在定义zone “chenran.com” IN时指明的解析文件,资源条目可自动补齐域名chenran.com.。如:www IN A 10.10.10.11
- "@"符号
使用“@”符号缩写$ORIGIN。如:@ IN SOA @ mail (20191225 1D 1H 1W 3H)
- 留空
第n行的name字段可省略,表示同n-1行name字段相同。
- SOA
$TTL 1D #有效地址解析记录的默认缓存时间
chenran.com. 86400 IN SOA ns.chenran.com. mail.chenran.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum #无效地址解析记录的默认缓存时间
简写:
$TTL 1D
@ IN SOA @ mail.chenran.com. ( 0 1D 1H 1W 3H )
chenran.com. IN SOA ns.chenran.com.
该SOA记录表示chenran.com.这个域的起始授权机构是ns.chenran.com.这台主机。
ns.chenran.com可写成主DNS服务器的FQDN,也可写成当前区域名chenran.com.。
mail.chenran.com.表示管理员邮箱,“@”由“.”代替。
(……)
serial:序列号,区域数据库文件更新,以便slave dns同步数据文件。
refresh:刷新时间,slave dns向master dns更新区域文件时间间隔。
retry:重试时间,slave dns联系mater dns超时时间。
expire:过期时间,若slave dns同步一直失败,达到过期时间后停止服务。
minimum:negative ttl,slave和master dns否定应答缓存周期。
- NS
chenran.com. 86400 IN NS ns1.chenran.com.
chenran.com. 86400 IN NS ns2.chenran.com.
简写:
IN NS ns1.chenran.com.
IN NS ns2.chenran.com.
- MX
chenran.com. 86400 IN MX 10 mx1.chenran.com.
chenran.com. 86400 IN MX 20 mx2.chenran.com.
简写:
IN MX 10 mx1.chenran.com. #优先级10
IN MX 20 mx2.chenran.com. #优先级20
- A
ns1.chenran.com. IN A 10.10.10.10
ns2.chenran.com. IN A 10.10.10.11
mx1.chenran.com. IN A 10.10.10.11
mx2.chenran.com. IN A 10.10.10.11
www.chenran.com. IN A 10.10.10.11
*.chenran.com. IN A 10.10.10.11 #泛域名解析
- PTR
11.10.10.10.in-addr.arpa IN PRT www.chenran.com.
也可写成:
11 IN PRT www.chenran.com. #zone:10.10.10.in-addr.apra
- CNAME
web.chenran.com. IN PRT www.chenran.com.
测试命令
- dig
dig [-t type] name [@SERVER][query options]
type:SOA、NS、MX、A、PTR、CNAME、axfr、ixfr
跟踪解析过程:dig +trace magedu.com
进行递归解析:dig +recurse magedu.com
测试反向解析:dig -x IP
模拟区域传送:dig -t axfr|ixfr ZONE_NAME @SERVER
axfr完全传送:dig -t axfr chenran.com @10.10.10.10
ixfr增量传送:dig -t ixfr chenran.com @10.10.10.10
- host
host [-t type] name [SERVER]
type:SOA、NS、MX、A、PTR、CNAME
正向解析:host www.chenran.com
反向解析:host 10.10.10.10
- nslookup
nslookup [-type=type] name [SERVER]
type:SOA、NS、MX、A、PTR、CNAME
正向解析:nslookup www.chenran.com
反向解析:nslookup 10.10.10.10
- rndc
remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp。
rndc {command}
command:
reload:重载主配置文件和区域解析库文件
reload zonename:重载区域解析库文件
retransfer zonename:手动启动区域传送,不管序列号是否增加
notify zonename:重新对区域传送发通知
reconfig:重载主配置文件
querylog:开启或关闭查询日志文件/var/log/message
trace:递增debug一个级别,可在日志文件中查看
trace LEVEL:指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
status:显示服务器的状态
- named-checkconf和named-checkzone
named-checkconf [filename]:默认检查/etc/named.conf配置文件语法
named-checkzone zonename filename:检查指定zone的解析文件语法
检查配置文件语法:named-checkconf
检查chenran.com.区域解析文件语法:named-checkzone chenran.com. /var/named/chenran.com.zone
配置实例
chenran.com.域名服务器
chenran.com.域名服务器地址为10.10.10.10。
1、编辑配置文件/etc/named.conf:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 10.10.10.10; };
directory "/var/named";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
……省略……
}
logging { ……省略…… };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named/chenran.com.zone"; #正向解析
include "/etc/named/10.10.10.zone"; #反向解析
2、添加区域配置文件:
[root@localhost ~]# cat /etc/named/chenran.com.zone
zone “chenran.com.” IN { #正向解析
type master;
file “chenran.com.zone”;
};
[root@localhost ~]# cat /etc/named/10.10.10.zone
zone “10.10.10.in-addr.arpa” IN { #反向解析
type master;
file “10.10.10.zone”;
};
3、添加区域解析文件:
[root@localhost ~]# cat /var/named/chenran.com.zone #正向解析
$TTL 86400
@ IN SOA @ mail ( 20191222 1D 1H 1W 3H )
IN NS ns1
ns1 IN A 10.10.10.10
www IN A 10.10.10.100
[root@localhost ~]# cat /var/named/10.10.10.zone #反向解析
$TTL 1D
@ IN SOA chenran.com. mail ( 20191222 1D 1H 1W 3H )
IN NS ns1.chenran.com.
10 IN PTR ns1.chenran.com.
100 IN PTR www.chenran.com.
缓存和转发域名服务器
客户端请求dns转发服务器时,dns转发服务器时不会解析请求的地址,而是转发到指定的dns服务器帮忙解析,此时dns转发服务器和客户端一样。所有的解析请求都会缓存到本地dns服务器。任何一个完备的dns服务器都是缓存服务器。
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 10.10.10.10; };
directory "/var/named";
allow-query { any; };
forward only;
forwarders { 8.8.8.8; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
……省略……
}
logging { ……省略…… };
子域授权
在父域chenran.com.的基础上完成video.chenran.com.子域授权。父域DNS的IP:10.10.10.10;子域DNS的IP:10.10.10.100。
- 父域DNS配置
1、编辑配置文件/etc/named.conf:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 10.10.10.10; };
directory "/var/named";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
……省略……
}
logging { ……省略…… };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named/chenran.com.zone"; #正向解析
include "/etc/named/10.10.10.zone"; #反向解析
2、添加区域配置文件:
[root@localhost ~]# cat /etc/named/chenran.com.zone
zone “chenran.com.” IN { #正向解析
type master;
file “chenran.com.zone”;
};
[root@localhost ~]# cat /etc/named/10.10.10.zone
zone “10.10.10.in-addr.arpa” IN { #反向解析
type master;
file “10.10.10.zone”;
};
3、添加区域解析文件:
[root@localhost ~]# cat /var/named/chenran.com.zone #正向解析
$TTL 86400
@ IN SOA @ mail ( 20191222 1D 1H 1W 3H )
IN NS ns1
video IN NS ns1.video
ns1 IN A 10.10.10.10
ns1.video IN A 10.10.10.100 #指向子域DNS服务器
www IN A 10.10.10.100
[root@localhost ~]# cat /var/named/10.10.10.zone #反向解析
$TTL 1D
@ IN SOA chenran.com. mail ( 20191222 1D 1H 1W 3H )
IN NS ns1.chenran.com.
IN NS ns1.video.chenran.com.
10 IN PTR ns1.chenran.com.
100 IN PTR ns1.video.chenran.com. #指向子域DNS服务器
100 IN PTR www.chenran.com.
- 子域DNS配置
1、编辑配置文件/etc/named.conf:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 10.10.10.100; };
directory "/var/named";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
……省略……
}
logging { ……省略…… };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named/video.chenran.com.zone";
include "/etc/named/10.10.10.zone";
2、添加区域配置文件:
[root@localhost ~]# cat /etc/named/video.chenran.com.zone
zone “chenran.com.” IN { #正向解析
type master;
file “video.chenran.com.zone”;
};
[root@localhost ~]# cat /etc/named/10.10.10.zone
zone “10.10.10.in-addr.arpa” IN { #反向解析
type master;
file “10.10.10.zone”;
};
3、添加区域解析文件:
[root@localhost ~]# cat /var/named/video.chenran.com.zone #正向解析
$TTL 86400
@ IN SOA @ mail ( 20191222 1D 1H 1W 3H )
IN NS ns1
ns1 IN A 10.10.10.100
www IN A 10.10.10.100
[root@localhost ~]# cat /var/named/10.10.10.zone #反向解析
$TTL 1D
@ IN SOA chenran.com. mail ( 20191222 1D 1H 1W 3H )
IN NS ns1.chenran.com.
IN NS ns1.video.chenran.com.
10 IN PTR ns1.chenran.com. #指向父域DNS
100 IN PTR ns1.video.chenran.com. #指向子域DNS
100 IN PTR www.chenran.com.
主从DNS
-
从DNS也是一台独立的域名服务器;
-
主DNS必须有一条NS RR指向从DNS,这样当主DNS更改RR后才能通过该条NS立即通知从DNS更新;
-
从DNS只需定于区域文件,无需提供解析文件,解析文件应放于/var/named/slaves目录;
-
主DNS应允许从DNS进行区域传送,allow-transfer {};
-
主从DNS时间应同步,ntp;
-
bind程序版本应保持一直。
从区域定义格式:
zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};
主DNS的IP:10.10.10.10;从DNS的IP:10.10.10.100。
- 主DNS配置
1、编辑配置文件/etc/named.conf:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 10.10.10.10; };
directory "/var/named";
allow-query { any; };
allow-transfer { 10.10.10.100; }; #允许从dns区域传送
recursion yes;
dnssec-enable no;
dnssec-validation no;
……省略……
}
logging { ……省略…… };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named/chenran.com.zone"; #正向解析
include "/etc/named/10.10.10.zone"; #反向解析
2、添加区域配置文件:
[root@localhost ~]# cat /etc/named/chenran.com.zone
zone “chenran.com.” IN { #正向解析
type master;
file “chenran.com.zone”;
};
[root@localhost ~]# cat /etc/named/10.10.10.zone
zone “10.10.10.in-addr.arpa” IN { #反向解析
type master;
file “10.10.10.zone”;
};
3、添加区域解析文件:
[root@localhost ~]# cat /var/named/chenran.com.zone #正向解析
$TTL 86400
@ IN SOA @ mail ( 20191222 1D 1H 1W 3H )
IN NS ns1
IN NS ns2 #指向从dns
ns1 IN A 10.10.10.10
ns2 IN A 10.10.10.100 #指向从dns
www IN A 10.10.10.100
[root@localhost ~]# cat /var/named/10.10.10.zone #反向解析
$TTL 1D
@ IN SOA chenran.com. mail ( 20191222 1D 1H 1W 3H )
IN NS ns1.chenran.com.
IN NS ns2.chenran.com. #指向从dns
10 IN PTR ns1.chenran.com.
100 IN PTR ns2.chenran.com. #指向从dns
100 IN PTR www.chenran.com.
- 从DNS配置:
1、编辑配置文件/etc/named.conf:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 10.10.10.100; };
directory "/var/named";
allow-query { any; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
……省略……
}
logging { ……省略…… };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named/chenran.com.zone"; #正向解析
include "/etc/named/10.10.10.zone"; #反向解析
2、添加区域配置文件:
[root@localhost ~]# cat /etc/named/chenran.com.zone
zone “chenran.com.” IN { #正向解析
type slave;
masters { 10.10.10.10; };
file “slaves/chenran.com.zone”;
};
[root@localhost ~]# cat /etc/named/chenran.com.zone
zone “10.10.10.in-addr.arpa” IN { #反向解析
type slave;
masters { 10.10.10.10; };
file “slaves/10.10.10.zone”;
}
智能DNS
DNS的IP:10.10.10.10,控制当重庆的主机10.10.10.10请求www.chenran.com该DNS时返回10.10.10.10;当其他地区的主机请求www.chenran.com该DNS时返回10.10.10.100。
1、编辑配置文件/etc/named.conf:
[root@localhost ~]# cat /etc/named.conf
#修改如下配置:
acl cq { 10.10.10.10; };
acl other { any; };
options {……}
logging {……}
view cqView {
match-clients { cq; };
zone chenran.com. IN {
type master;
file "cq.chenran.com.zone";
};
};
view otherView {
match-clients { other; };
zone chenran.com. IN {
type master;
file "other.chenran.com.zone";
};
};
2、添加区域解析文件:
[root@localhost ~]# cat /var/named/cq.chenran.com.zone
#10.10.10.10解析www.chenrna.com的地址为10.10.10.10
$TTL 1D
@ IN SOA @ mail ( 20191223 1D 1H 1W 3H )
IN NS ns1
ns1 IN A 10.10.10.10
www IN A 10.10.10.10
[root@localhost ~]# cat /var/named/other.chenran.com.zone
#其他地址解析www.chenrna.com的地址为10.10.10.10
$TTL 1D
@ IN SOA @ mail ( 20191223 1D 1H 1W 3H )
IN NS ns1
ns1 IN A 10.10.10.10
www IN A 10.10.10.100