【基础概念】

1 不讲dns的历史,只讲现如今已经存在dns,和如何使用dns

dns: domain name server (名称服务器)  常用做域名的翻译器

很多场景要用到名称服务器

如: ssh shop-web01.beta

首先ssh 协议要调用dns解析的库(解析器),然后把解析出来的IP地址,发起ssh连接!

还有ftp软件等等

应用模型如下图:


DNS原理概念详解_DNS原理概念详解 bind dns m

【 名称服务器中的名词解释有(很难理解)】

名称服务器: 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

DNS原理概念详解_DNS原理概念详解 bind dns m_02


生存时间TTL: 缓存的时间

地址到名称的映射: 一般都是公司内部DNS用,和以前的域名生效,美国的一些早期域名!

DNS的构造也是向linux的目录一样的树状

root目录 

顶级域(一级域)

二级域(不要说成二级域名)

子域



DNS原理概念详解_DNS原理概念详解 bind dns m_03



注意:

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. 域和区域:


DNS原理概念详解_DNS原理概念详解 bind dns m_04


DNS原理概念详解_DNS原理概念详解 bind dns m_05



DNS原理概念详解_DNS原理概念详解 bind dns m_06




区分迭代和递归的区别

迭代的效果: 就是如向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.

原理图是:

读法也是从叶子节点到根节点!



DNS原理概念详解_DNS原理概念详解 bind dns m_07



缓存:

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