【基础概念】
1 不讲dns的历史,只讲现如今已经存在dns,和如何使用dns
dns: domain name server (名称服务器) 常用做域名的翻译器
很多场景要用到名称服务器
如: ssh shop-web01.beta
首先ssh 协议要调用dns解析的库(解析器),然后把解析出来的IP地址,发起ssh连接!
还有ftp软件等等
应用模型如下图:
【 名称服务器中的名词解释有(很难理解)】
名称服务器: nameserver 存储域命名空间信息的程序
域命名空间: 就是那颗倒树(如图)
域名:FQDN 完全限定域名
域: domain 命令空间中的一颗子树 sjtu.edu.cn 就像linux目录中的目录
子域: 就像linux目录中还有目录一样,即子目录
资源记录: 数据类c(lass) 如A记录,提供查询的条目
授权: 设计域名系统的目录就是分散管理,授权就是实现的手段。
区域: zone 紧紧是某个一集体的完整信息。也就是一个文件,区域的内容是从文件或者另外一个名称服务器加载而来的。加载过来后,该名称服务器就可对外宣称对该区域具有权威。
master slave 名称服务器
区域传送: master——> slave
区域文件: zone file (zone file 从主 区域传送到slave)
root名称服务器(全球有13个逻辑服务器)
解析器: reslover 就是访问名称服务器的客户端程序(提供发起查询和接受响应的功能)
解析: 从域命名空间中检索数据
递归
迭代
缓存(可定都是存在内存的) window下清理 ipconfig /flushdns命令 查看: ifconfig /displaydns 显示dns的缓存,而在linux下 dns客户端在Unix下,DNS客户端只是几个例程,负责转发和接受查询的功能,并不缓存。
参考:
http://my.oschina.net/lenglingx/blog/425020
生存时间TTL: 缓存的时间
地址到名称的映射: 一般都是公司内部DNS用,和以前的域名生效,美国的一些早期域名!
DNS的构造也是向linux的目录一样的树状
root目录
顶级域(一级域)
二级域(不要说成二级域名)
子域
注意:
1 域名名空间要求,同一个父节点下的兄弟节点不能有相同的标签(和linux统一目录下不能有两个一样文件名)
2 树种每个节点都有一个标签(不超过63 位,且不包括 . 号的), 空标签是为 root保留的!
3 域名是 从节点本身开始,沿着路径一直读到root,并用 “ .” 来分隔
4 www.stju.edu.cn. 其实是(www.stju.edu.cn.“ ”) 最后一个点号后面其实是个空标签
5 向这种绝对域名有时被被称为完全限定域名 FQDN
6 顶级域是root的子域,二级域是顶级域的子域
7 一条资源记录
ftp.stju.edu.cn. IN A 202.120.58.157
解释其中的 IN 和 A
IN表示的是使用Internet(任何基于TCP/IP 的internet),当然还有其他的老式协议网络类,如Chaosnet协议的网络类,使用Hesiod软件的网络类。但我们看到的都将是IN
A是一种记录type类型,A表示名称到地址的映射 还有其他的type 如{SOA| NS | PTR| Other| CNAME}
8 授权: 和DNS查询原理理解在一起比较容易理解。
比如: 交通大学这个域中sjtu.edu.cn 下面的 ftp.sjtu.edu.cn. www.sjtu.edu.cn. bbs.sjtu.edu.cn. 这些该怎么设定,交通大学的这个组织可行管理和上一级edu.cn. 这个域无关! edu.cn 这个域只关心 我有一个指针到你那里(访问sjtu.edu.cn 这个域的东西, 一律发到我执行的 那台或多台 交通大学组织的DNS名称解析服务器)。
9. 域和区域:
区分迭代和递归的区别
迭代的效果: 就是如向root查询ftp.stju.edu.cn 返回的值第一次是 你去查询cn吧,在发请求到cn时,返回的值有迭代到了 你去请求edu吧。。。。一次迭代下去!
for i in a,b,c,d:
print i
递归: 就是我给你 解析器给本地dns发的递归请求,你本地服务器一定要给我最终答案(能找到或者找不到),不管是何种办法给我返回! 你都要递归出来
地址到名称的映射:
在Internet域命名空间中,就是in-addr.arpa域
如谷歌 nslookup 216.58.221.68
反向解析的结果
68.221.58.216.in-addr.arpaname = hkg08s14-in-f4.1e100.net.
原理图是:
读法也是从叶子节点到根节点!
缓存:
1 linux 下dns客户端 和 window不一样,linux下客户端默认不缓存 除非有 nscd软件安装了。 service nscd {restart,reload}清缓存,缓存只是名称服务器做的事情!名称服务器会进行缓存
2 TTL参数来设置dns默认的缓存时间,但要记住是你解析的域名在别人dns中缓存的时间
比如: 你在学校内部 访问www.baidu.com 那么这个www.baidu.com. 域名的缓存,将是停留在 你学校的DNS名称服务器上的(缓存时间是baidu.com这个域的TTL值决定的)
##################### ######################################
参考:
http://www.zytrax.com/books/dns/ch7/xfer.html#allow-update
allow-query: 允许哪些IP客户端进行查询使用DNS服务; 一般是是: allow-query { any; };
allow-transfer 如果有辅助DNS,是否充许的IP列表(slave DNS)可以同步zone文件,The default behaviour is to allow zone transfers to any host。如: allow-transfer { 10.10.100.22; 222.73.117.198; 21.32.2.181; 21.32.2.182; 21.32.2.183; 21.32.2.184; 10.10.100.201; };
also-notify 只有master端配置, 修改配置后主动给slave发送NOTIFY消息 also-notify { 10.10.100.22; 222.73.117.198; 21.32.2.181; 21.32.2.182; 21.32.2.183; 21.32.2.184; 10.10.100.201; };
allow-update allow-update只在zone中定义指定哪些主机允许为主域名服务器提交动态 DNS 更新。默认为拒绝任何主机进行更新。
allow-update {key "update-key";}; 或者 allow-update {10.0.1.2;}; // DDNS this host only
下面一般不需要的配置:
allow-notify: slave端配置, 控制允许发送NOTIFY消息的master, 默认是 master 里配置的ip列表
notify: master和slave都可以配置, 默认是yes, 当配置修改后, 就会发送NOTIFY消息给zone文件里配置的NS和also-notify里的ip列表
notify-source: 默认是*, 表示当前的主机ip, 可以指定某个ip和port, ip必须在slave的master中包含
allow-update { address_match_list };
allow-update { !172.22.0.0/16;};
allow-update defines an address_match_list of hosts that are allowed to submit dynamic updates for master zones, and thus this statement enables Dynamic DNS. The default in BIND 9 is to disallow updates from all hosts, that is, DDNS is disabled by default. This statement is mutually exclusive with update-policy and applies to master zones only. The example shows DDNS for three zones: the first disables DDNS explicitly, the second uses an IP-based list, and the third references a key clause. The allow-update in the first zone clause could have been omitted since it is the default behavior. Many people like to be cautious in case the default mode changes.
// named.conf fragment
// key clause is shown only for illustration and would
// normally be included in the named.conf file
key "update-key" {
....
};
....
zone "example.net" in{
type master;
allow-update {none;}; // no DDNS by default
....
};
....
zone "example.com" in{
....type master;
allow-update {10.0.1.2;}; // DDNS this host only
....
};
zone "example.org" in{
type master;
allow-update {key "update-key";};
....
};
In the example.org zone, the reference to the key clause "update-key" implies that the application that performs the update, say nsupdate, is using TSIG and must also have the same shared secret with the same key-name. This statement may be used in a zone, view or an options clause.
### 生产实践 dns文件的轮询实现
/etc/resolv.conf 最好需要添加如下参数
options timeout:1 attempts:2 rotate single-request-reopen
timeout: 默认值 5s 最大值30s,5s肯定不合理,5s超时业务都出问题了
attempts:2 默认值2次
rotate: 多个nameserver会轮询,而不仅仅使用第一个,只有在redhat7.5 之后才能使用
参考: https://access.redhat.com/solutions/1426263 -> centos6.x 只能不同机器更换地址的位置 或者 采用 前端架设LVS轮询
single-request-reopen: 防火墙的网络中可能需要设置
参考http://blog.sina.com.cn/s/blog_7f2122c50101uk9m.html
dns的中bind的参数
http://blog.sina.com.cn/s/blog_7f2122c50101uk9m.html
https://www.jianshu.com/p/2c1c081cc521
https://access.redhat.com/solutions/1426263
https://serverfault.com/questions/915449/bind-options-rotate-in-resolv-conf-file