DNS简介
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。
DNS工作过程
DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址;
具体过程如下:
1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS服务的体系架构
DNS使用分布式的层次数据库模式以及缓存方法来解决单点集中式的问题;
DNS服务器一般分三种,根DNS服务器,顶级DNS服务器,权威DNS服务器;
DNS与的名称
完全限定的域名 (FQDN) 唯一地标识在 DNS 分层树中的主机的位置,包含主机名及域名;
如im.qq.com中im即为主机名,qq.com即为域名,则完成的FQDN为im.qq.com;
DNS域名称空间的组织方式
DNS工作之迭代与递归查询
PC->Server间的查询为递归查询,一次即有结果,Server使用根查询方式,迭代查询,需要查询多次才有结果;
dig +trace www.163.com
从根获取到顶级服务器
从顶级服务器获取权威服务器
从权威服务器获取到具体的解析
DNS的记录
NS | NS记录及SOA记录是任何一个DNS区域都不可或缺的两条记录,NS记录即名称服务器记录,用于说明这个区域由哪些DNS服务器负责解析;NS记录,说明这个区域里,有多少个服务器来承载解析的任务; 格式:区域名 IN NS 完整主机名(FQDN) |
SOA | 即起始授权机构记录,说明了在众多的NS记录里哪一台才是主要的服务器; |
A |
即主机记录,使用最广泛的DNS记录,A记录的基本作用就是说明一个一个FQDN对应的IP地址是多少; 可以针对一个域名创建多个A记录,指向不同的物理服务器的IP,实现基本的流量均衡;<因,dns解析时会随机排序> 格式:完整主机名(FQDN) IN A IP地址 |
MX |
邮件交换记录,使用邮件服务器时不可或缺的,比如A用户向B用户发送一封邮件,那么他需要向DNS查询B的MX记录,DNS在定位到了B的MX记录后反馈给A用户,然后A用户把邮件投递到B用户的MX记录服务器里! 格式:区域名 IN MX 优先级(数字) 邮件服务器名称(FQDN) |
Cname |
别名记录 格式:别名 IN CNAME 主机名 |
SRV |
服务器资源记录,RFC2052中才对SRV记录进行了定义;说明了一个服务器能够提供什么样的服务; SRV在Active Directory中有着重要的地位,client通过DNS得到SRV记录来定位域控制器; —ldap._tcp.contoso.com 600 IN SRV 0 100 389 NS.contoso.com ladp: 是一个服务,该标识说明把这台服务器当做响应LDAP请求的服务器 |
PTR |
指针记录,PTR记录是A记录的你想记录,作用是把IP地址解析为域名;PTR记录只能在反向解析zone中创建; 格式:IP地址 IN PTR 主机名(FQDN) |
DNS的通信
DNS只要使用TCP/UDP的53端口;
DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议;
区域传送使用TCP的原因:
①辅助DNS服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的书量比一个请求和应答的数据量要多得多。
②TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用的是UDP协议:
客户端向DNS服务器查询域名,一般返回内容都不超过512个字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包;
DNS的简单搭建
Centos7下的bind搭建
安装必要的包,其中安装bind-chroot后,可以启动named-chroot的服务,代替named,更加安全哦;
yum install bind bind-chroot bind-utils
补充解释
$ORIGIN schroder.net. # 补充一条,这个是说明这里面你不在域名后面加.就默认有这个后缀;
主DNS服务器
###### 配置/etc/name.conf options { listen-on port 53 { 10.5.202.245; }; #这个是监听哪个端口; directory "/var/named"; # 这个是配置zone的file在哪个文件夹; allow-transfer {10.5.202.246;}; # 这个是配置区域传送的,也就是备服务器; listen-on { 127.0.0.1; 10.11.12.0/24; }; # 这个配置只收哪些设备的dns请求,其他忽略的; }; # 建一个名字叫baidu.com的域 zone "baidu.com" IN { type master; file "named.baidu.com"; }; # 反向区域按照这种格式建 zone "202.5.10.in-addr.arpa" IN { type master; file "named.0.202.5.10"; }; ###### 配置named.baidu.com的文件## $TTL 1D # 这个是设置全局的缓存超时时间,其他的一些设置不多说 # SOA的设置中,第一个是主域名服务器,第二个是域名联系人邮箱; @ IN SOA ns1.baidu.com. admin.admin.com ( 3 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns2.baidu.com. # 主nameserver IN NS ns1.baidu.com. # 备nameserver ns1 IN A 10.5.202.245 # A记录几条 ns2 IN A 10.5.202.246 ns3 IN A 10.5.202.247 www IN A 10.5.202.246 $GENERATE 1-3 1h$ 3600 IN CNAME www.baidu.com. # 这个是批量生成,$通配前面的1-3,也就是1h1,1h2,1h3等; smc IN A 10.5.202.241 * IN CNAME www.baidu.com. # 这个是泛解析,也就是说只要在这个域下未匹配的主机名都走这个; ###### 配置named.0.202.5.10的文件## $TTL 1D @ IN SOA ns1.baidu.com. admin.baidu.com ( 8 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS ns2.baidu.com. # 主nameserver IN NS ns1.baidu.com. # 辅助nameserver 245 IN PTR ns1.baidu.com. # 反向解析的记录 246 IN PTR ns2.baidu.com. 246 IN PTR www.baidu.com. 245 IN PTR www.baidu.com. 247 IN PTR ns3.baidu.com.
辅助DNS服务器
### name.conf的配置 options { listen-on port 53 { 10.5.202.246; }; directory "/var/named"; }; zone "baidu.com" IN { type slave; # 为备模式 file "slaves/named.baidu.com"; # 这些文件不需要新建,会自动同步的 masters {10.5.202.245;}; # 指向主dns服务器,也可以设置在options中 }; zone "202.5.10.in-addr.arpa" IN { type slave; # 为备模式 file "slaves/named.10.5.202"; # 这些文件不需要新建,会自动同步的 masters {10.5.202.245;};# 指向主dns服务器,也可以设置在options中 };
cache DNS服务器
options { listen-on port 53 { any; }; directory "/var/named"; allow-query { any; }; forward only; # 配置转发 forwarders {10.5.202.245;}; # 配置转发参考的服务器 max-cache-ttl 100; # 配置正确的解析的缓存时间s max-ncache-ttl 100; # 配置错误的解析的缓存时间s };
一般生效前可检查
named-checkconf /etc/named.conf # 检查配置有没有问题; named-checkzone {zonename} {filename} # 检查zone的文件有没有问题;
end
参考:https://gist.github.com/Nilpo/1a70ebca988ad0743ea533d747445148
bind的option的参数设置可参考:http://www.ipamworldwide.com/ipam/bind-options.html