DNS服务概念
DNS : Domain Name Server ,协议(C/S,53/udp,53/tcp)应用层协议,其中主从同步数据是tcp的53号端口,而响应用户请求等是upd的53端口,速度快。其本身也是C/S架构
BIND : Bekerley Internet Nmae Domai,ISC(www.isc.org)
本地名称解析配置文件 : hosts
linux /etc/hosts
windows %WINDIR%/system32/drivers/etc/hosts
传输层协议:TCP,UDP,SCTP
TCP:transmission Control Protocol
面向连接的协议:双方通信之前需要建立虚连接;
UDP: User Datagram Protocol
无连接的协议:双方无须通信之前事先建立虚连接;
同一个主机上可能有多种服务同时进行大量的通信,网卡的调制能力有限,为了
不让应用程序等待,所以会有发送缓冲区,同样在服务器上接受到的各种协议的报文
也很多,所以会事先提供一段内存空间,把接受到的报文缓存起来,然后再处理,、
称为接受缓冲区。
DNS域名 :
根域
一级域名:com,edu,gov,net,org,int,mil
三类:组织域,国家域(.cn,.ca,.hk,.tw),反向域
二级域名
三级域名
最多有127级域名
ICANN (The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名系统的管理,以及根服务器系统的管理
机构图如下:
3、域名服务器
上面已经介绍,域名解析的过程其实就是FQDN和IP之间的转换,而这些转换关系就是一个数据库,由于互联网的蓬勃发展,需要使用一些专门的服务器来存储这些数据,当用户来访问请求解析时,可以查找自身的数据库,并把相关的信息反馈。
一个服务器所负责管辖(或有权限)的范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机到域名IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围。区 <= 域。
根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
权限域名服务器:负责一个“区”的域名服务器。
本地域名服务器:本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
4、域名解析过程
前面已经介绍,域名解析其实就是FQDN和IP之间的转换
几个名词:
递归查询:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。
迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。
因此,一个主机查询的过程分为两个部分,主机到本地DNS服务器之间是递归查询,本地服务器向根和相关服务器查询是迭代查询
DNS服务器类型 :
DNS服务器类型:
主DNS服务器:维护所负责解析的域内解析库服务器,解析库由管理维护
从DNS服务器:从主DNS服务器或其他的DNS服务器那里“复制”(区域传递)一份解析库
缓存DNS服务器:提高DNS的访问速度,实现快速解析,在安装完成DNS软件后就已经实现了简单的缓存服务器,通常在/etc/named.conf当中的forward only设定;
转发器:通过区域传送,将所需要的域名解析传送给同其他DNS服务器进行解析
DNS是一个类似倒状树形结构的形态来进行主机名的管理的,并且每一层级的服务器只负责对应下级的域名解析工作,也就是说是一个自上而下的过程。
eg:我们去查找www.magedu.com这个FQDN所对应的主机IP地址的过程:
1.本地主机先查询本地hosts文件看是否有对应的且有效的www.magedu.com与IP的对应关系,若有,则直接采用,若没有,则进行下一步。(有种攻击就是缓存毒化,即修改缓存的文件,使得解析到错误的网站或地址)
2. 此时本机将向指定的dns server(假设为NS1),发起查询请求,NS1在收到来自客户端的请求后,会及时的去查询ns1上的缓存记录,查看是否有相关的magedu.com的请求,若有,则直接响应,没有,则进行下一步
3.此时ns1会主动向根域名服务器发起查询www.magedu.com的请求,但是由于跟服务器只记录了下一级的条目,所以会反馈给ns1其中一个com服务器的地址
4.ns1 根据根域名服务器告知的com服务器的地址进行请求,com返回magedu.com的地址
5.ns1根据com服务器返回的magedu.com的服务器地址进行查询,magedu.com查询本地的数据区域文件,将www对应的主机返回给NS1,
6.ns1将自己获得的www.magedu.com的结果存储在自己的本地DNS缓存中并且返回给客户端一份。
资源记录 :
区域解析库: 由众多RR组成
资源记录: Resource Record ,RR
记录类型: A,AAAA,PTR,SOA,NS,CNAME,MX
SOA: Start Of Authority,起始授权记录,一个区域解析库有且只能有一个SOA记录,而且必须放在第一条
NS: Name Service ,域名服务记录,一个区域解析库可以有多个NS记录,其中一个为主
A:Address,地址记录,FQDN --> IPv4
AAAA:地址记录,FQDN --> IPv6
CNAME:Canonical Name 别名记录
PTR:Pointer,IP -- > FQDN
MX : Mail eXchanger 邮件交换器
优先级:0-99,数字越小优先级越高
资源记录的定义格式:
语法: name [TTL] IN RR_TYPE value
注意:
- TTL可从全局继承
- @可用于引用当前区域的名字
- 同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应
- 同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机
SOA记录
name :当前区域的名字;例如 "nineven.com." 或者 "2.3.4.in-addr.arpa."
value : 有多部分组成
(1)当前区域的区域名称(也可以使用主DNS服务器名称)
(2)当前区域的管理员的邮箱地址,但地址中不能使用@符合,一般使用点号替代
(3)主从服务协调属性的定义以及否定答案统一的TTL
例如:
nineven.com. 86400 IN SOA nineven.com. admin.nineven.com. (
201701081; serial #数字不能超过10位, ; 是注释
2H ; 刷新时间 2小时
10M ; 尝试时间 10分钟
1W ; 过期时间 1周
1D ; 否定时间 1天
)
NS记录
NS :
name : 当前区域的名称
value : 当前区域的某DNS服务器的名字,例如: ns.nineven.com.
注意:一个区域可以有多个ns记录
例如:
nineven.com. IN NS ns1.nineven.com.
nineven.com. IN NS ns2.nineven.com.
注意:
相邻的两个资源记录的name 相同时,后续的可省略
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
MX记录
MX :
name :当前区域的名称
value : 当前区域某邮件交换器(smtp服务器)的主机名
注意: MX 的记录可以有多个,但每个记录的value之前应该有一个数值来表示其优先级
例如:
nineven.com. IN MX 10 mx1.nineven.com.
nineven.com. IN MX 15 mx2.nineven.com.
一个区域内,MX记录可以有多个,但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高
A记录
A :
name : 某FQND,例如 www.nineven.com.
value : 某IPv4地址
例如:
www.nineven.com. IN A 1.1.1.1
www.nineven.com. IN A 1.1.1.2
注意:
*.nineven.com. IN A 3.5.6.7
避免用户写错名称时给错误答案,可通过泛域名解析进行解析到某个地址
AAAA :
name : FQDN
value : IPv6
PTR :
name : IP地址,有特定格式,IP反过来写,而且加特定后缀,例如 1.2.3.4的记录应该写为 4.3.2.1.in-addr.arpa.
value : FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.nineven.com.
简写为 4 IN PTR www.nineven.com
CNAME :
name : FQDN格式的别名
value : FQDN格式的正式名字
例如:
web.nineven.com. IN CNAME www.nineven.com
注意:
(1) TTL 可以从全局继承
(2) @表示当前区域的名称
(3) 相邻的两条记录其name相同时,后面的可省略
(4) 对于正向区域来说,各MX,NS 等类型的记录的value为一个FQDN,此FQDN应该有一个A记录
ZONENAME:
表示要解析的域名:正解时就是域名本身,如magedu.com;反解是有固定的格式,ip网段反向
.in-addr.arpa (例如ip为192.168.43.0/24,43.168.192.in-addr.arpa)
区域传送:
区域(zone)和域(domain):
对于同一个域应该由两个区域组成,正向和反向,但是父区域可能大于域
完全传输 : 传送整个解析库
增量传输 : 传递解析库变化的那部分内容
Domain : Fully Qualified Domain Name
正向 : FQDN --> IP
反向 : IP --> FQDN
负责本地域名的正向和反向解析库
正向区域
反向区域
测试工具:
dig,host,nslookup等
dig命令:
dig [-t RR_TYPE] name [@SERVER] [query options]
用于测试dns系统,因此其不会查询hosts文件;
查询选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
反向解析: dig -x IP
模拟完全区域传送:dig -t axfr DOMAIN [@server]
host命令:
host [-t RR_TYPE] name SERVER_IP
nslookup命令:
nslookup [-options] [name][server]
交互式模式:
nslookup
server IP:以指定的IP为DNS服务器进行查询
set q=RR_TYPE :要查询的资源记录类型
name:要查询的名称;
rndc命令:named服务控制命令
rndc status
rndc flush
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 aa表示权威部门
DNS的安装配置:
BIND:berkeley internet name domain,
dns:协议
bind:dns协议的一种实现
named:bind程序的运行的进程名
[[email protected] ~]# yum -y install bind bind-libs bind-utils
程序包:
bind-libs:被bind和bind-utils包中的程序共同用到的库文件
bind-utils:bind客户端程序集,例如dig,host,nslookup
bind:提供的dns server程序,以及几个常用的测试程序
bind-chroot:选装,让named进程运行jall模式下。
还有一个rndc(remote name domain controller)的服务来提供辅助性的管理功能,该服务监听在主机tcp的953号端口,默认与bind安装在同一主机,且只能通过127.0.0.1来连接DNS服务的named进程
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
rndc:(remote name domain controller)
953/tcp,但默认监听与127.0.0.1地址,因此仅允许本地使用
bind程序安装完成之后,默认即可作为缓存名称服务器使用;其他主机可以通过它去互联网进行请求解析
主配置文件格式:
全局配置段:
options
日志配置段:
logging
区域配置段:
zone
那些由本级负责解析的区域,或转发的区域
注意:每一行最后都以;结尾
花括号两边和内容之间有空格
单行注释可以加//
学习过程中,建议关闭所有的dnssec相关选项
检查主配置文件的语法:
named-checkconf [也可以接文件路径]
配置解析一个正向区域:
type的类型:主要的类型有:针对根的hint,主DNS的master,从DNS的slave和专门用于转发的类型forward,除了根外默认为master
1.定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
2.建立区域数据文件
在/var/named目录下建立区域数据文件;
$TTL 86400
$ORIGIN mageedu.com.
@ IN SOA ns1.mageedu.com. admin.mageedu.com. (
2016101606
6H
3M
1D
5H)
@ IN NS ns1.mageedu.com.
@ IN MX 6 mail.mageedu.com.
ns1 IN A 10.1.252.171
mail IN A 10.1.252.172
www IN A 10.1.252.173
ftp IN A 10.1.252.173
www IN A 10.1.252.174
注意修改权限,应为
chmod o= /var/named/magedu.com.zone
chown :named /var/named/magedu.com
3.让服务器重载配置文件和区域数据文件
cname,mx记录不需要有反向记录,只要A记录有反向记录即可
修改完配置文件后,区域数据文件后,使用rndc reload来重新载入一下
配置文件/etc/named.conf文件详解:
options {
listen-on port 53 { any; }; 监听的端口,即那些主机可以进行访问解析,any表示所有,注意这里any后面一定要有分号;
directory "/var/named"; #对应数据路文件的目录位置
allow-query { localhost; }; #运行那些主机请求查询,这里选择any运行所有;
recursion yes; # 允许内部客户进行查询,应该开启
//forward only; #只转发请求,不做解析,此时dns服务器是一个缓存服务器
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "magedu.com" IN {
type master;
file "magedu.com";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
主从服务器:
从服务器是区域的从,不一定是主服务器从,也就是说从服务器可以只同步
主服务器上的某些区域,那么同步那些区域就是那个区域的从,当然如果你
同步所有的区域,那也可以理解为主服务器的从。
两个服务器可以分别作为正向和反向解析的主,互相为反正的从。
配置一个从区域:
一。在从服务器上配置:
1.定义区域
修改listen-on port 53 { 127.0.0.1; 172.16.100.8; }
allow-query { any; };
关闭dnssec相关功能
定义一个从区域:
zone "ZONE_NAME" IN {
type slave;
file "slaves/‘ZONE_NAME.zone"; 这里的slaves目录是660的,因为DNS进程用户为named,/var/named无写权限,所以建立该目录
master {MASTER_IP;}; 指明主服务器
}
配置文件语法检查:#named-checkconf
2.重载配置
#rndc reload;
#rndc status
#systemctl reload named.service
二。在主服务器上配置:
1.确保区域数据文件中为每个从服务器配置NS记录
2.主服务器应该仅仅开放给从服务器进行同步,做访问同步控制
3.时间应该同步
配置/etc/named.conf文件
zone "ZONE_NAME" IN {
type master;
file "mageedu.com";
allow-transfer { SLAVEIP; }; ; 指明从服务器的IP,这里应该是指定的主机,不能随便允许别人同步
};
配置区域文件:
添加从服务器的条目
@ IN NS slave.mageedu.com.
slave IN A 10.1.252.228 这里的IP是从服务器的IP.
重启服务即可
子域
子域授权: 每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
类似根域授权tld:
.com. IN NS ns1.com.
.com. IN NS ns2.com.
ns1.com. IN A 2.2.2.1
ns2.com. IN A 2.2.2.2
nineven.com. 在 .com的名称服务器上,解析库中添加资源记录:
nineven.com. IN NS ns1.nineven.com.
ns1.nineven.com. IN A 12.3.22.56
glue record : 粘合记录,父域授权的记录