一、DNS介绍
DNS是计算机域名系统(Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,一个IP地址可以有多个域名,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器通常为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。
DNS所监听的端口: 53/UDP,53/TCP(默认)。 一般情况下仅使用UDP协议进行讯通,若网络出现连接问题会自动转为TCP协议通讯
传输层协议: TCP, UDP, SCTP
TCP: Transmission Control Protocol
面向连接的协议:双方通信之前需要事先建立虚连接;
UDP:User Datagram Protocol
无连接的协议:双方无须通信之前需要事先建立虚连接;
二、DNS域的组成
根域:为DNS根节点服务器,用"."表示
全球有13组DNS根服务器
顶级域:top level domain
分类:
组织域:.com, .org, gov, .edu, mil
国家域:.tw, .hk, .cn
反向域:.in-addr.arpa
顶级域是由根域划分,由各种组织或商业公司代理
二级域:
二级域就是我们常见的网站名,例如taobao.com就是一个二级域的域名,www.taobao.com是taobao.com这个域中的某个主机
三、FQDN
FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径,全路径中列出了序列中所有域成员。全域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。从全域名中包含的信息可以看出主机在域名树中的位置。DNS解析流程:首先查找本机HOSTS表,有的直接使用表中定义,没有查找网络连接中设置的DNS 服务器由他来解析。
例如,acmecompany公司的Web服务器的全域名可以是 acmecompany.,而若sales主机是在销售部子域,则它的全域名可以是sales.acmecompany。当给出的名字像acmecompany而不是acmecompany.时,他们通常是指主机名,而名字后边带有点号(“.”是指根域名服务器)的则认为是全域名。这种区别在理解和控制解析过程时是非常重要的。点号实际上指出了域名树的根
四、DNS查询
DNS查询分为:递归查询和迭代查询
(1)递归查询: recursion
递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询: iteration
DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果
为止。
两种过程的示意图:
个人总结:
DNS递归:内网区域(客户端---->服务器,服务器找到符合条件的内容---->客户端)
DNS迭代:外网区域(客户端---->服务器,服务器找不到,让客户端找根)
五、DNS名称解析方式:
名称 --> IP:正向解析
IP --> 名称:反向解析
注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库;
六、DNS一次完整的查询请求经过的流程:
Client --> hosts文件 --> DNS Local Cache --> DNS Server (recursion) -->
自己负责解析的域:直接查询数据库并返回答案;
不是自己负责解析域:Server Cache --> iteration(迭代)
1、当客户端要解析一个域名时,客户端首先分析本地hosts文件,若无对应的主机条目,就去分析
本地缓存,若没有答案,则向本地DNS服务器发起请求 。
2、DNS服务器接收到请求,首先分析服务器本地的缓存,看是否存在要解析的答案,有则直接返回,没有则向根发起请求
3、根接收到请求,但根并不负责任何递归性的回答,所以,根会返回www.taobao.com的顶级域.com所在的主机地址给本地DNS服务器
4、本地DNS服务收到根的指向性答复,然后去找负责.com的DNS服务器
5、负责.com的DNS服务器发现taobao.com是自己的管理的区域,但自己并不负责做递归性的答复
所以返回负责解析taobao.com的DNS服务器地址给本地DNS服务器
6、本地DNS服务器向负责解析taobao.com这个域的DNS服务器发起请求
7、负责解析johnson.com这个二级域的DNS服务器接收到解析www.johnson.com请求后,分析自己的区域数据库文件,发现存在www主机,给本地DNS服务器返回答案
8、本地DNS服务器收到答复,将答案返回给客户端,域名解析过程完成
七、DNS服务器类型和配置
主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作;
“复制”操作的实施方式:
序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
否定答案的缓存时长:
主服务器“通知”从服务器随时更新数据;
区域传送:
全量传送:axfr, 传送整个数据库;
增量传送:ixfr, 仅传送变量的数据;
主从服务器配置:
注意:从服务器是区域级别的概念;
配置一个从区域:
(1) 定义区域
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
配置文件语法检查:named-checkconf
(2) 重载配置
CentOS 6 ~]# rndc reload
CentOS 7 ~]# systemctl reload named.service
配置一个主区域:
(1) 确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
注意:时间要同步;
ntpdate命令
八、区域数据库文件
8.1 区域(zone)和域(domain)
magedu.com域:
FQDN --> IP
正向解析库;区域
IP --> FQDN
反向解析库;区域
8.2 资源记录: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,数字越小优先级越高;
8.3 资源记录的定义格式:
语法:name [TTL] IN RR_TYPE value
name:资源名称,不同资源类型名称不同
[ttl]: 缓存有效期,可省略,可以在宏中定义
IN: Internet,固定格式
RRtype: 资源类型
value:资源对应的值
8.4 记录类型
SOA:只能有一个
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)
例如:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. (
2017010801 ; serial(为数据库的版本号,十进制格式,不能超过10位)
2H ; refresh(从服务器到主服务器的更新间隔)
10M ; retry(更新失败重试时间,应该小于refresh time)
1W ; expire(重试多久后,依然没有联系到主DNS,自己拒绝提供服务的时间)
1D ; negative answer ttl(否定答案缓存时间)
)
NS:可以有多条
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.magedu.com.;
例如:
magedu.com. 86400 IN NS ns1.magedu.com.
magedu.com. 86400 IN NS ns2.magedu.com.
MX:记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
优先级:0-99,数字越小,优先级越高
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 1.1.1.2
bbs.magedu.com. IN A 1.1.1.1
AAAA:
name:FQDN
value: IPv6
PTR:
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
value:FQND
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;
例如:
web.magedu.com. IN CNAME www.magedu.com.
注意:
(1) TTL可以从全局继承;
(2) @表示当前区域的名称;
(3) 相邻的两条记录其name相同时,后面的可省略;
(4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;
九、Bind配置及安装
BIND: Berkeley Internet Name Domain, ISC.org
dns: 协议
bind: dns协议的一种实现
named:bind程序的运行的进程名
程序包:
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及几个常用的测试程序;
bind-chroot:选装,让named运行于jail模式
创建新的DNS主配置文件:
主配置文件:/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
rndc:remote name domain contoller
953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用;
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
CentOS 6: service named start
CentOS 7: systemctl start named.service
主配置文件格式:
全局配置段:
options { ... }
日志配置段:
logging { ... }
区域配置段:
zone { ... }
那些由本机负责解析的区域,或转发的区域;
注意:每个配置语句必须以分号结尾;
缓存名称服务器的配置:
监听能与外部主机通信的地址;
listen-on port 53;
listen-on port 53 { 172.16.100.67; };
学习时,建议关闭dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询:
//allow-query { localhost; };
检查配置文件语法错误:
named-checkconf [/etc/named.conf]
测试工具:
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
bind view:
视图:
view VIEW_NAME {
zone
zone
zone
}
view internal {
match-clients { 172.16.0.0/8; };
zone "magedu.com" IN {
type master;
file "magedu.com/internal";
};
};
view external {
match-clients { any; };
zone "magecdu.com" IN {
type master;
file magedu.com/external";
};
};
十一、正向和反向区域配置
配置解析一个正向区域:
以taobao.com域为例:
(1) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
注意:区域名字即为域名;
(2) 建立区域数据文件(主要记录为A或AAAA记录)
在/var/named目录下建立区域数据文件;
文件为:/var/named/taobao.com.zone
$TTL 3600
$ORIGIN magedu.com.
@ IN SOA ns1.taobao.com. dnsadmin.taobao.com. 2017041201
1H
8M
4D
2D )
IN NS ns1
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 172.16.100.67
mx1 IN A 172.16.100.68
mx2 IN A 172.16.100.69
www IN A 172.16.100.67
web IN CNAME www
bbs IN A 172.16.100.70
bbs IN A 172.16.100.71
权限及属组修改:
~]# chgrp named /var/named/taobao.com.zone
~]# chmod o= /var/named/taobao.com.zone
检查语法错误:
~]# named-checkzone ZONE_NAME ZONE_FILE
~]# named-checkconf
(3) 让服务器重载配置文件和区域数据文件
~]# rndc reload 或
~]# systemctl reload named.service
配置解析一个反向区域
(1) 定义区域
在主配置文件中或主配置文件辅助配置文件中实现;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
注意:反向区域的名字
反写的网段地址.in-addr.arpa
100.16.172.in-addr.arpa
(2) 定义区域解析库文件(主要记录为PTR)
示例,区域名称为100.16.172.in-addr.arpa;
$TTL 3600
$ORIGIN 100.16.172.in-addr.arpa.
@ IN SOA ns1.magedu.com. nsadmin.magedu.com. (
2017041201
1H
8M
4D
2H )
IN NS ns1.magedu.com.
67 IN PTR ns1.magedu.com.
68 IN PTR mx1.magedu.com.
69 IN PTR mx2.magedu.com.
70 IN PTR bbs.magedu.com.
71 IN PTR bbs.magedu.com.
67 IN PTR www.magedu.com.
权限及属组修改:
~]# chgrp named /var/named/172.16.100.zone
~]# chmod o= /var/named/172.16.100.zone
检查语法错误:
~]# named-checkzone ZONE_NAME ZONE_FILE
~]# named-checkconf
(3) 让服务器重载配置文件和区域数据文件
~]# rndc reload 或
~]# systemctl reload named.service
十二、主从服务器配置:
注意:从服务器是区域级别的概念;
配置一个从区域:
(1) 定义区域
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
配置文件语法检查:named-checkconf
(2) 重载配置
CentOS 6 ~]# rndc reload
CentOS 7 ~]# systemctl reload named.service
配置一个主区域:
(1) 确保区域数据文件中为每个从服务配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A后面的地址为真正的从服务器的IP地址;
注意:时间要同步;
ntpdate命令;
十二、子域授权:
正向解析区域授权子域的方法:
ops.magedu.com. IN NS ns1.ops.magedu.com.
ops.magedu.com. IN NS ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A IP.AD.DR.ESS
ns2.ops.magedu.com. IN A IP.AD.DR.ESS
定义转发:
注意:被转发的服务器必须允许为当前服务做递归;
(1) 区域转发:仅转发对某特定区域的解析请求;
zone "ZONE_NAME" IN {
type forward;
forward {first|only};
forwarders { SERVER_IP; };
};
first:首先转发;转发器不响应时,自行去迭代查询;
only:只转发;
(2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
options {
... ...
forward {only|first};
forwarders { SERVER_IP; };
.. ...
};
原文地址:http://1832924799.blog.51cto.com/11226449/1763089