DNS服务介绍
1》DNS(Domain Name System),其主要作用就是将主机名解析成ip地址的过程,完成了从域名(FQDN)到主机识别ip地址之间的转换。
2》DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。
3》DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器当中,经过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载,同时也方便记录的更新同步。
4》DNS是一个网络服务,因此就有对应的端口,其端口号为53号。DNS查询的时候,是以udp这个较快速的数据传输协议来查询的,但万一没有方法查询到完整的信息时,就会再次以tcp这个协定来重新查询,DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。
5》DNS在进行区域传输的时候使用TCP协议,其他时候则使用UDP协议。
6》FQDN(Full Qualified Domain Name):完整主机名,是有主机名和域名构成。例如www.baidu.com当中,www就是web网站服务器的主机名,baidu.com就是域名,主机名和域名之间用实心点号来表示。
7》DNS是基于c/s架构(多数基于套接字架构的C/S架构),对于每一级域名长度的限制是63个字符,域名总长度则不超过253个字符。
8》DNS系统记录的信息非常多,不过重点就两个:一个是记录服务器所在的NS(name server)标志,另一个是记录主机名对应的A(address)标志。
DNS的域名结构系统
1》DNS的域名是倒状的树状结构,在最顶层的是一个根服务器,它主要负责顶级域名的管理,所谓的顶级域名如下所示:
.com:用于公司、行号、企业、.gov:用于政府机构、.edu:用于教育机构、.mil:用于军事机构、.net:用于网络和通信机构
.org:用于组织和机构、.cn:中国
顶级域则负责其所对应的二级域名,接下来二级域名负责对应的主机名名称解析或者三级域名解析,以此类推。
2》一级域名共分为三类,组织域、国家域和反响域,最多可以有127级域名。
3》每一级的域名服务器只负责对应下级的域的管理,其中根节点是分布在世界各地的13台服务器组成,其中10台位于美国地区,另外3台设置于英国、瑞典和日本,在这13台根服务器当中有1台为根服务器放置在美国,其余12台均为辅根服务器,所有的根服务器均有美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球互联网域名根服务器、域名体系和ip地址等的管理。
4》基于udp的dns报文的最大限制为512byte,在这个报文中包含13台DNS服务器信息,占用了511byte,没有地方再放置第14台记录了,所以只有13台根,根本原因是因为协议限制。
DNS域名解析工作原理
1》客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
2》当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
3》根域名服务器接收到请求后,再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
4》本地服务器接收到顶级域名服务器地址后,再向返回的域名服务器发送请求。
5》 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知给客户机下级的域名服务器的地址。
6》本地域名服务器将查询请求发送给返回的DNS服务器。
7》域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
8》 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
9》正向解析与反向解析
1。正向解析
正向解析是指域名到IP地址的解析过程。
2。反向解析
反向解析是从IP地址到域名的解析过程。反向解析的作用为服务器的身份验证
3。正反向解析是两个不同名称空间,是两颗不同的解析树。
10》DNS解析过程中的两种查询方式:
1。递归查询:
一般是客户机和服务器之间的查询,即只发送一起请求,其他的工作交由上层服务器去解决,然后最后一层一层的反馈到客户端。
2。迭代查询:
一般是DNS服务器与DNS服务器之间的方式,即最起初的DNS服务器负责发起请求,而其他涉及到的DNS服务器只负责响应即可,然后一直查找到目标DNS服务器,并将结果返回给客户端。
3。DNS查询过程:
DNS在查询的时候是以udp这个快速的数据传输协议来查询的,但是一旦没有办法查询到完整的信息时,就会再次以tcp协议来进行重新查询。
因此DNS服务在启动的时候会同时开启udp和tcp的53号端口。
11》一次完整的查询请求经过的流程:
Client -->hosts文件 -->DNS Service Local Cache--> DNS Server (recursion,递归) --> Server Cache -->iteration( 迭代) --> 根--> 顶级域名DNS--> 二级域名DNS…
12》解析答案:
肯定答案:
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:
非权威答案:
DNS服务器
1》DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。
2》DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。
3》域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
4》域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。
5》DNS 服务器的类型:
1。主DNS 服务器:
管理和维护所负责解析的域内解析库的服务器。
2。从DNS 服务器:
从主DNS服务器或其他的从DNS服务器哪里“复制”(区域传输)解析库副本。
3。缓存DNS 服务器:
提高DNS的访问速度,实现快速解析,在安装完成DNS软件后,就已经实现了简单的缓存服务器,通常是在/etc/named.conf当中的forward only哪设定。
4。转发器:
通过区域传送,将所需要的域名解析传送给其他DNS服务器进行解析
6》“通知”机制:
主服务器解析库发生变化时,会主动通知从服务器
7》子域授权:
每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权。
8》类似根域授权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
9》DNS服务器地址文件
/etc/resolv.conf
此文件内容就是dns服务器地址文件,只有在客户端中的此文件中添加DNS服务器地址,DNS服务器才能对启客户端起作用。
DNS服务程序
DNS服务程序包有:bind和unbound
以bind为例进行学习
1》程序包:yum list all bind*
bind: 服务器
bind-libs: 与bind相关的库文件
bind-utils: 客户端相关命令文件
bind-chroot: bind主目录禁锢程序,centos6之后的系统已默认禁锢在/var/named/目录下
2》配置文件
rpm -ql bind :
提供dns server程序、以及几个常用的测试程序。
/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/usr/lib64/bind
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc
/usr/sbin/rndc-confgen
/var/log/named.log
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca:存放根服务器地址
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves
/var/run/named
rpm -ql bind-libs :
被bind(服务器包)和bind-utils包中的程序共同用到的库文件。
/usr/lib64/libbind9.so.80
/usr/lib64/libbind9.so.80.0.4
/usr/lib64/libdns.so.81
/usr/lib64/libdns.so.81.4.1
/usr/lib64/libisc.so.83
/usr/lib64/libisc.so.83.0.3
/usr/lib64/libisccc.so.80
/usr/lib64/libisccc.so.80.0.0
/usr/lib64/libisccfg.so.82
/usr/lib64/libisccfg.so.82.0.1
/usr/lib64/liblwres.so.80
/usr/lib64/liblwres.so.80.0.2
rpm -ql bind-utils :
bind客户端程序集,例如dig,host,nslookup等
/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
rpm -ql bind-chroot :
让named运行于jail(容器沙箱)模式下。
/var/named/chroot
/var/named/chroot/dev
/var/named/chroot/dev/null
/var/named/chroot/dev/random
/var/named/chroot/dev/zero
/var/named/chroot/etc
/var/named/chroot/etc/localtime
/var/named/chroot/etc/named
/var/named/chroot/etc/named.conf
/var/named/chroot/etc/pki
/var/named/chroot/etc/pki/dnssec-keys
/var/named/chroot/lib64
/var/named/chroot/usr
/var/named/chroot/usr/lib64
/var/named/chroot/usr/lib64/bind
/var/named/chroot/var
/var/named/chroot/var/log
/var/named/chroot/var/named
/var/named/chroot/var/run
/var/named/chroot/var/run/named
/var/named/chroot/var/tmp
rpm -q --script bind
3》架设好dns服务器,需要进行两方面的配置
bind本身的配置文件的配置:
主要规范主机的设定、zone file的所在、权限的设定等。
正反解数据库(zone file):
记录主机名与ip对应。
4》配置相关配置文件
1。服务脚本:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
2。主配置文件:/etc/named.conf, /etc/named.rfc1912.zones,/etc/rndc.key
3。解析库文件目录:/var/named/
注意:
1>一台物理服务器可同时为多个区域提供解析
2>必须要有根区域文件;named.ca
3>应该有两个(如果包括ipv6 的,应该更多)实现localhost和本地回环地址的解析库
4。/var/run/named:named这支程序执行时默认放置pid-file在此目录中
5。主配置文件/etc/named.conf里的内容
帮助:man named.conf
1>全局配置:options {};
options {
listen-on port 53 { any; }; #监听的端口,即哪些主机可以进行访问解析,any表示所有。
// listen-on-v6 port 53 { ::1; };
directory "/var/named"; #对应数据库文件的目录位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; #运行哪些主机请求查询,any表示所有。
recursion yes; #将自己视为客户端的一种查询方式,实现的是递归查询
forward only ; #只转发请求,不做解析,此时DNS服务器是一个缓冲服务器
forwarders {
} ; #针对forward only 设置的转交给那个上层DNS进行解析,这里可以列出多个,每行一个并以分号结尾
dnssec-enable yes; #缓存名称服务器的配置,监听外部地址即可,建议关闭dnssec设为no
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
2>日志子系统配置:logging {};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
3>区域定义:
本机能够为哪些zone进行解析,就要定义哪些zone,也就是定义由本机负责解析的区域,或转发的区域。
zone "ZONE_NAME" IN {
type {master|slave|hint|forward} ;
file "ZONE_NAME.zone";
};
zone "IP网段的反向.in-addr.arpa" IN {
type {master|slave|hint|forward} ;
file "IP网段.zone";
};
type:表示该zone类型,master是针对主DNS;slave是针对从DNS;hint是针对根;forward是针对转发域;除了根以为默认伟master
file:表示该zone的文件名称
ZONE_NAME:表示要解析的域名,正解时就为域名本身;反解时有固定的格式,格式为IP网段的反向.in-addr.arpa,如0.0.127.in-addr.arpa
4>注意:
1..任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上。
2..大括号前后要有空格,每个地址之后必须以;结束,否则会语法错误。
3..测试时建议关闭dnssec,需要时开启
4..关闭仅允许本地查询:// allow-query { localhost ; };
5>主配置文件检查和生效命令
主配置文件语法检查:
named-checkconf
主配置文件修改后的生效
rndc status|reload ;service named reload
service named restart ;systemctl restart named
6。域名的解析库文件/var/named/ZNOE_NAME.zone,反向解析库文件/var/named/ip.zone。
1。。一台DNS服务器可同时为多个区域提供解析
2。。必须要有根区域解析库文件:centos上是named.ca文件
3。。还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库。
正向示例:/var/named/named.localhost
反向示例:/var/named/named.loopback
有关域名解析库文件的资源记录格式说明在前面有解释
1>正向解析例子
cat adc.com.zone
$TTL 1D
@ IN SOA dns1 admin.adc.com. (
2017091901 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 2D A 192.168.213.130
websrv A 192.168.213.130
www CNAME websrv
2>反向解析例子
cat 192.168.213.zone
$TTL 1D
@ IN SOA dns1.adc.com. admin.adc.com. ( 1 10m 2m 1h 3h )
NS dns1
107 PTR dns1.adc.com.
106 PTR websrv.adc.com.
注意:
这里的左侧只用添加ip地址的最后一段,因为前面我们已经定义好了它的域213.168.192.in-addr.arpa,因此107就已经能够代表107.213.168.192,也就是代表了192.168.213.107了。
不需要MX, 以PTR 记录为主。
3>解析库文件语法检查:
named-checkzone "adc.com" /var/named/adc.com.zone
5》其他相关配文件
/etc/hosts:最早的hostname 对应ip的档案。
/etc/resolv.conf:这个很重要,就是isp的dns服务器ip记录处,记录的dns的ip最好不要超过2个。
/etc/nsswitch.conf:这个是决定先要使用/etc/hosts还是使用/etc/resolv.conf的决定。