前言、本章学习目标
- 了解dns服务用途
- 掌握dns服务器的配置
- 掌握dns服务的使用
一、DNS服务概述
DNS是域名系统(Domain Name System)的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
它是由解析器以及域名服务器组成的,域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域转换为IP地址功能的服务器。DNS使用TCP与UDP端口号都53,主要使用UDP,服务器之间备份使用TCP。
二、DNS基础知识
以百度(www.baidu.com)和百度贴吧(tieba.baidu.com)来举例。
域名: 不论是 www.baidu.com 还是 tieba.baidu.com,它们的域名都是 baidu.com,严格地说是 “baidu.com.”。这是百度所购买的com域下的一个子域名。
主机名: 对于 www.baidu.com 来说,主机名是 www,对于 tieba.baidu.com 来说,主机名是 tieba。其实严格来说,www.baidu.com 和 tieba.baidu.com 才是主机名,它们都是 baidu.com 域下的主机。一个域下可以定义很多主机,只需配置好它的主机名和对应主机的IP地址即可。
FQDN: FQDN(Fully Qualified Domain Name),称为完整主机名,是指包含了所有域的主机名,其中包括根域。FQDN 可以说是主机名的一种完全表示形式,它从逻辑上准确地表示出主机在什么地方。例如 www.baidu.com 的 FQDN 是 “www.baidu.com.”,com 后面还有个点,这是根域;tieba.baidu.com 的 FQDN 是 “tieba.baidu.com.”。
DNS解析类型:
正向解析:FQDN-->IP
反向解析: IP --> FQDN
DNS的名称解析库:
在Linux系统中,DNS的名称解析库通常是一个文本文件(只能包含资源记录和宏定义),通常保存在/var/named/目录下。其中文本文件的每一行称作一个资源记录。每一个名称解析库称作”区域(zone)。说明:
区域(zone)与域之间的差异
区域zone是一个物理概念,一个区域就是一个DNS解析库;域是一个逻辑概念,一个域对应一个DNS域名称空间。正向解析与反向解析采用的是不同的解析库,一个配置了正向解析库和反向解析库的DNS意味着其包含了两个区域(正向zone和反向zone)
三、DNS解析流程
正向解析流程:
完整的查询请求经过的流程:
Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
注:
1.本机查找完缓存后如果没有结果,会先查找hosts文件,如果没有找到再把查询发送给DNS服务器,但这仅仅是默认情况,这个默认顺序是可以改变的。在/etc/nsswitch.conf中有一行" hosts: files dns"就是定义先查找hosts文件还是先提交给DNS服务器的,如果修改该行为"hosts: dns files"则先提交给DNS服务器,这种情况下hosts文件几乎就不怎么用的上了。
2.由于缓存是多层次缓存的,所以真正的查询可能并没有那么多步骤,上图的步骤是完全没有所需缓存的查询情况。假如某主机曾经向DNS服务器提交了www.baidu.com的查询,那么在DNS服务器上除了缓存了www.baidu.com的记录,还缓存了 ".com" 和 "baidu.com" 的记录,如果再有主机向该DNS服务器提交ftp.baidu.com的查询,那么将跳过".“和”.com"的查询过程直接向baidu.com发出查询请求。
3.DNS解析过程中存在两种查询类型:递归查询(从客户机到指定DNS服务器)、迭代查询(从DNS服务器至各个域),一般情况下,DNS服务器之间的查询方式都是迭代查询。如果要查询www.microsoft.com(microsoft.com域不是本地DNS负责的区域),那么本地DNS就需要向外迭代查询(迭代查询从根域开始,如此,本地DNS就必须知道根域的IP地址)。根提示的功能可以让本地DNS服务器查询根域DNS服务器。
反向解析流程:
DNS查询中,客户端一般执行正向查询,正向查询是基于存储在地址(A)资源记录中的另一台计算机的DNS名称来搜索IP地址等信息。DNS也提供反向查询过程,允许客户端在名称查询期间使用已知的IP地址查询计算机名。反向查询采取问答形式进行,例如”您能告诉我使用IP地址192.168.1.20的计算机的DNS名称吗?在DNS标准中采用了一种叫”线索追踪的机制“,即定义了特殊域”in-addr.arpa“,并保留在Internet DNS名称空间中。为了创建名称空间,in-addr.arpa域中的子域是按照带句点十进制编号的IP地址的相反顺序构造的,且采用与正向解析完全不同的解析库。因此,创建in-addr.arpa域树的时候,IP地址八位字节的顺序必须倒置,并且定义一种新的资源记录类型”PTR“。
四、DNS分类
主DNS服务器:管理和维护所负责解析的域内解析库的服务器。
从DNS服务器: 使用自动更新方式从主DNS服务器同步数据的DNS服务器。也成辅助DNS服务器。缓存DNS服务器(转发器): 不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。
转发器: 这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。
五、Zone文件资源记录
1、zone关键字后面接的是域和类:
zone "test.com" IN{
type master;
file "cs.test.com"
};
file定义该域的区域数据文件Resource Record (RR)
2、区域文件的格式:
[name] [ttl] [class] type data
如:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
; 注释
@ 表示当前域
()允许数据夸行,通常用于 SOA 记录
* 仅用于 name 字符的通配符
name :字段说明资源记录引用的对象名,可以是一台单独的主机也可以是个域名。
对象名可以是相对域名或全域名,全域名应该以“.”结束
若几条连续的 RR 记录涉及同一个对象名,则第一条 RR 记录后的 RR 记录可以 省略对象名
若出现字段名字段,则必须出现在第一个字段
ttl:它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。通常省略该 字段,而使用位于文件开始处的 $TTL 语句所指定值。
class:字段用于指定网络类型,可选的值有:IN、CH 和 HS,其中 IN (Internet)是广泛使用的一种。虽然 IN 是该字段的默认值,但通常我们会显示 地指出。
type:字段用于说明 RR 的类型。常用的 RR 类型如下:
基本记录:
A (Address) 用于将主机名转换为 IP 地址,任何一个主机都只能有一个 A记录
PTR (PoinTeR) 将地址转换为主机名
MX (Mail eXchanger) 邮件交换记录。控制邮件的路由
安全记录:
KEY (Public Key) 储存一个关于DNS 名称的公钥
NXT (Next) 与 DNSSEC 一起使用,用于指出一个特定名称不在域中
SIG (Signatrue) 指出带签名和身份认证的区信息,细节见 RFC 2535
可选记录:
CNAME (Canonical NAME) 给定主机的别名,主机的规范名在A记录中给出
SRV (Services) 指出知名网络服务的信息
TXT (Text) 注释或非关键的信息
RR的顺序:
SOA RR 应该放在最前面
通常 NS RR 紧跟在 SOA RR 之后
其他记录的顺序无关紧要
data:取决于RR的类型
3、区域资料记录详解:
(1)SOA 开始一个区,基本格式:
zone IN SOA Hostname Contact (
SerialNumber
Refresh
Retry
Expire
Minimum )
Hostname:存放本 Zone 的域名服务器的主机名
Contact:管理域的管理员的邮件地址
SerialNumber:本区配置数据的序列号,用于从服务器判断何时获取最新的区数据
Refresh:辅助域名服务器多长时间更新数据库
Retry:若辅助域名服务器更新数据失败,多长时间再试
Expire:若辅助域名服务器无法从主服务器上更新数据,原有的数据何时失效
Minimum:设置被缓存的否定回答的存活时间
例如:
test.net. IN SOA test.test.net. root.test.test.net. (
2006012000 ;序列号
3H ;3小时后刷新
15M ;15分钟后重试
1W ;1星期后过期
1D ) ;否定缓存TTL为1天
对 Contact 来说,因为“@”在文件中有特殊含义,所以邮件地址 root@test.test.net 写为 root.test.test.net.
对 SerialNumber 来说,它可以是 32 位的任何整数,每当更新区文件时都应该 增加此序列号的值,否则 named 将不会把区的更新数据传送到从服务器
缓存时间字段 Refresh、Retry、Expire、Minimum 可以使用时间单位字符 m、 h、d、w 分别表示分钟、小时、天、星期。
各个缓存时间字段的经验值为
Refresh — 1 到 6 小时
Retry — 20 到 60 分钟
Expire — 1 周 到 1 月
Minimum — 1 到 3 小时
Minimum 设置被缓存的否定回答的存活时间,而肯定回答(即真实记录)的默认 值是在区文件开始处用 $TTL 语句设置的。
(2)NS表示一个区的权威服务器:
存储的是该域内的 DNS 服务器相关信息。即 NS 记录标识了哪台服务器是 DNS 服务器。
例如:
name:当前域的名称。
value:当前域的某 DNS 服务器的名称,如 "ns.test.com."。
例如
test.com IN NS ns1.test.com
test.com IN NS ns2.test.com
注:一个域内可以有多个 ns 记录,即可以存在多台 DNS 服务器
(3)A -- DNS数据库的核心,提供主机名到IP地址的映射
例如:
name:某 FQDN,如 "www.test.com."。
value:某 IPv4 地址。
例如:
www.test.com. IN A 192.168.100.200
注:AAAA记录格式和A记录格式相似,但 value 是某 IPv6 地址。
(4)PTR 提供了ip到主机的映射
name: IP 地址,有特定格式,且加上特定后缀,如:"1.2.3.4" 的记录应该写为 "4.3.2.in-addr.arpa"。
value:某 FQDN
例如:
4.3.2.in-addr.arpa IN PTR www.test.com.
(5) MX 用于邮件系统实现邮件路由
name:当前的域名
value:当前域内某邮件交换器的主机名
test.com. IN MX 10 mx1.test.com.
test.com. IN MX 20 mx2.test.com.
注:MX记录可以有多个,但每一个记录的value之前应该有一个数字表示优先级 。优先级:0-99,数字越小优先级越高。
(6) CNAME:用于设置主机的别名
name: FQDN 格式的别名
value: FQDN 格式的初始名
例如:
web.test.com. IN CNAME www.test.com
六、dns服务侧写
·类型: 系统V (System V) 管理的服务
·软件包: bind、bind-utils、bind-chroot
·守护进程: /usr/sbin/named,/usr/sbin/rndc
·脚本: /etc/init.d/named
·端口:53(domain)
·配置文件:(Under /var/named/chroot/) /etc/named.conf,/var/named/*,/etc/rndc.key
·相关软件包: caching-nameserver,openssl,nscd
dns服务主要配置文件
/etc/named.conf :
options { 段全部配置
listen-on port 53 { 127.0.0.1; };//表示BIND将在53端口监听,若需要对所有IP进行监听,则修改为// listen-on port 53 { any; };
directory "/var/named";//工作目录。
dump-file "/var/named/data/cache_dump.db";//缓存转储位置,需要配合rndc命令。
statistics-file "/var/named/data/named_stats.txt";//记录统计信息的文件,需要配合rndc命令。
emstatistics-file "/var/named/data/named_mem_stats.txt";//记录内存使用的统计信息。
allow-query { localhost; };//允许查询的主机,默认只允许本机查询若需要允许所有客户机查询,则修改为// allow-query { any; };
recursion yes;//允许递归查询。
notify yes;//区域数据文件更新发送通知。
querylog //启用日志
forwarders { 168.95.1.1; 139.175.10.20; }; // 如果域名服务器无法解析时,将请求交由168.95.1.1; 139.175.10.20来解析
allow-transfer { none; }; //指定允许接受区域传送请求的主机,比如辅dns的ip是192.168.139.5,那么可以这样定义{ 192.168.139.5; },要不然主辅dns不能同步,当然,{}里的也可以用下面提到的acl。
logging {//Loging段channel default_debug {file "data/named.run";//记录了一些named的信息,如监听/解析记录等。它的位置在/var/named /var/named/data下。
severity dynamic;//输出日志级别};};
zone "." IN {type hint;//type只有3种参数:hint/master/slave.只有"."对应的type为hint,其它zone的类型只能为master或slave,即DNS主机和DNS从机。
file "named.ca";//指定了root解析文件的位置,解析文件中记录着域名与IP的对应关系。它的位置在/var/named /var/named/data下。};
include "/etc/named.rfc1912.zones";//解析文件列表的位置
include "/etc/named.root.key"; //根区域的key文件,与事务签名相关。// 这里定义一个acl列表
acl "acl1" { 192.168.139.0/200; 192.168.1.0/200 };view localhost_resolver { //定义一个视图 match-clients { any; }; //查询者的源地址,any表示localhost_resolver视图对任何主机开放,如果写成{ acl1; },那么就只有acl1表里的ip可以递归查询了
match-destinations { any; }; //查询者的目标地址,这里也可以写成{ localhost; acl1; }}
七、dns服务的安装配置
服务端主要配置步骤:
1.下载dns服务器 yum -y install bind
2.配置主配置文件 /etc/named.conf
3.配置正向解析文件
4.开启dns服务器 systemctl start named
5.关闭防火墙 systemctl stop firewalld.service
6.使用nslookup命令测试
客户端主要配置步骤:
1、添加域名服务器地址至/etc/resolv.conf
nameserver 192.168.129.100
八、DNS常用工具
1、dig 命令
说明:
(1)dig只用于测试dns系统,不会查询hosts文件进行解析。
(2)加"@server-ip":根据指定的DNS服务器来解析,绕过了本地解析库中设置的DNS服务器。
(2)dig命令不会查缓存,而是直接查服务器。
dig [-t type] name [@SERVER] [query options]
query options:
+[no]trace:跟踪解析过程 : dig +trace baidu.com
+[no]recurse:进行递归解析
#测试反向解析
dig -x IP = dig –t ptr reverseip.in-addr.arpa
#模拟区域传送
dig -t axfr ZONE_NAME @SERVER
dig -t axfr baidu.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
#查询主机NS记录
dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net
2、host命令
host [-t type] name [SERVER]
host -t NS baidu.com 172.16.0.1
host -t soa baidu.com
host -t mx baidu.com
host -t axfr baidu.com
host 1.2.3.4
3、nslookup命令
nslookup用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题。
1)直接查询
nslookup domain [dns-server]
//如果没有指定dns服务器,就采用系统默认的dns服务器。
2)查询其他记录
nslookup -qt=type domain [dns-server]type:
A -->地址记录
AAAA -->地址记录
AFSDB Andrew -->文件系统数据库服务器记录
ATMA -->ATM地址记录
CNAME -->别名记录
HINHO -->硬件配置记录,包括CPU、操作系统信息
ISDN -->域名对应的ISDN号码
MB -->存放指定邮箱的服务器
MG -->邮件组记录
MINFO -->邮件组和邮箱的信息记录
MR -->改名的邮箱记录
MX -->邮件服务器记录
NS --> 名字服务器记录
PTR ->反向记录
RP -->负责人记录
RT -->路由穿透记录
SRV -->TCP服务器信息记录
TXT -->域名对应的文本信息
3) 查询更具体的信息
nslookup -d [其他参数] domain [dns-server]
//只要在查询的时候,加上-d参数,即可查询域名的缓存 。
4、rndc 命令
利用rndc工具可以实现管理DNS功能:
rndc 通过一个 TCP 连接与名字服务器通信,发送经过数字签名认证的命令。在当前版本的rndc 和 named 中,唯一支持的认证算法是 HMAC-MD5,在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供 TSIG类型的认证。所有经由通道发送的命令都必须被一个服务器所知道的 key_id 签名,监听端口:953/tcp。
安装后不能使用:
解决办法:
1)创建key
rndc-confgen -r /dev/urandom –a
2)更改权限
chown root:named /etc/rndc.key
chmod 644 /etc/rndc.key
3) 重启named服务。
rndc支持的COMMAND有:
status: 查看状态
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件。
querylog: 开启或关闭日志功能。
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
九、本章实验
1、配置一个dns服务器并添加一条域名解析记录。