dns的迭代和递归就是一个概念,在正常的完成一整串dns查询流程的时候,我们需要用这么一个概念来区分它们。
递归:a查询b,如果b找不到,那么就会b向c发起请求,直到找到请求,后将结果发送給a.
迭代:a查询b,如果b找不到,但是知道c有,那么告诉b的c服务器地址,让b去向c服务器发起请求。
其实不必纠结它们细节的称呼,如果我面试一个人,能答出这句话,我就算他这题过了。
options{
directory" /var/named";
recursion no;
};
zone "imoocc.com" {
typemaster;
file"imoocc.com.zone";
zone "iaskjob.com" {
file"iaskjob.com.zone";
zone "11.156.10.in-addr.arpa" {
file"10.156.11.zone";
客户端查看效果:
[root@iaskjob opt]# dig @www.iaskjob.com www.imooccc.com
; <<>> dig 9.8.2rc1-redhat-9.8.2-0.17.rc1.el6 <<>> @www.iaskjob.com www.imooccc.com
; (1 server found)
;; global options: +cmd
;; got answer:
;; ->>header<<- opcode: query, status: refused, id: 55372
;; flags: qr rd; query: 1, answer: 0, authority: 0, additional: 0
;; warning: recursion requested but not available
;; question section:
;www.imooccc.com.ina
2、客户端发起迭代查询请求
dig +norecurse @199.7.91.13 www.imoocc.com
dig +norecurse @192.33.14.30 www.imoocc.com
dig +norecurse @111.30.136.110 www.imoocc.com
在我答案中,我没有确定的域名,但是能告诉你谁能有这个更精确的答案。
服务器和服务器的的迭代查询也是一个道理,我们接触比较多的就是dns的子域授权。
父域
<a href="http://imooc.com/">imooc.com</a>
子域
<a href="http://test.imoocc.com/">test.imoocc.com</a>
a服务器(ip:30.96.8.232) 负责imoocc域名解析,并授权b服务器test.imoocc.com的域名解析
a服务器:
$ttl 7200
@ in soa imoocc.com. jeson.imoocc.com. (222 1h 15m 1w 1d)
imoocc.com. in ns dns1.imoocc.com.
dns1 in a 10.156.11.232
www in a 115.182.41.180
@ in mx10 mail
mail in a 10.156.11.233
test.imoocc.com. in ns ns1.test --将test.imoocc.com的这个子域授权給了ns1.test 30.96.8.233来作
ns1.test in a 30.96.8.233
~
b服务器(ip:30.96.8.233),完成整段子域授权:
$ttl 7200
@ in soa test.imoocc.com. jeson.test.imooccc.com. (222 1h 15m 1w 1d)
in ns dns1
dns1 in a 30.96.8.233
www in a 30.96.8.233
dig @30.96.8.232 www.test.imoocc.com -trace
如果我没法解析,那么我就指定一台dns来解析。
注意:bind9版本后,可以支持指定域来转发。
说明:这里要注意,转发器本身不用做任何设置,而是对需要转发器的其他 dns server 做以上配置。还有,如果该 dns server 无法联系到转发器,那么 bind 会自己尝试解析。
如果你要禁止 bind 在无法联系到转发器时不做任何操作,那么你还可以使用 forward only 命令,这样 bind 只能使用区的权威数据和缓存来响应查询了( 在连接不到转发器的情况下 )。
forward first说明先把dns请求转发出去然后再查本机的dns记录
b服务(30.96.8.233)
设置将iaskjob.com这个域,转发由a服务器解析
vim name.conf
type forward;
forwarders { 30.96.8.232; };
a服务器(30.96.8.232)
设置机器的权威域
iaskjob.com. in soa iaskjob.com.iaskjob.163.com. ( 20140122
100 1h 15m 1w 1d)
iaskjob.com. in ns dns1.iaskjob.com.
dns1.iaskjob.com. in a 10.156.11.232
www in a 10.156.11.232
dig @30.96.8.233 www.iaskjob.com -trace