我想知道,根服务器是否可以将一个区域的不同子区域委托给不同的名称服务器,并将其余子区域委托给默认名称服务器。
例如,我有区域“thing.”、“some.thing.”、“any.thing”、“i.do.some.thing.”、“i.do.any.thing.”。如果我想要以下行为,根区域文件应该是什么样的:
对“i.do.some.thing”和“*.i.do.some.thing”的每个查询都转到名称服务器
对“i.do.any.thing”和“*.i.do.any.thing”的每个查询都转到名称服务器 b
对“some.thing”和“*.some.thing”的剩余查询转到名称服务器 c
对“any.thing”和“*.any.thing”的剩余查询转到名称服务器 d
对“thing”和“*.thing”的剩余查询转到名称服务器 e
根名称服务器可以做到这一点吗?或者只有权威名称服务器才能做到这一点?
答案1
不可以,根区域不能在树中进一步委托已经在其他地方委托的内容。至少在不违反协议和造成奇怪的不一致的情况下不能这样做。
每个区域的权威服务器可以委派任何子域,从而创建可以驻留在其他地方的新区域。
工作原理示例:
根 ( .
) 区域委托example.
给ns.example.
example.
区域foo.example.
代表ns.foo.example.
foo.example.
区域bar.foo.example.
代表ns.bar.foo.example.
ETC。
相反,如果您遇到这样的情况:根区域需要为已经在其他地方委托的内容提供授权信息(但事实并非如此!),如下所示:
根 ( .
) 区域委托example.
给ns.example.
根 ( .
) 区域委托foo.example.
给ns.foo.example.
然后,您就会遇到这样的情况:具有预热缓存的解析器服务器foo.example.
可能已经知道该example.
位置ns.example.
,然后会从该点开始查询(并且可能会得到完全不同的响应),而具有冷缓存的解析器服务器会从根开始查询并从那里获取委托信息(该委托不应该与第一个委托共存)。
上述情况并不是您期望看到的,但我认为,如果软件存在漏洞并违反协议,或者存在某种恶意攻击,理论上可能会发生此类响应。(当发生攻击时,DNSSEC 会解决一些此类问题。)
答案2
区域委派是主要的 DNS 功能
在根区域文件中,您必须描述主机和子区域。
$ORIGIN thing. ; root domain
@ IN NS ns.thing. ; who is responsible for root domain
ns IN A 11.22.33.44 ; It's me itself so I have to add the "glue record"
$ORIGIN any.thing. ; subdomain
@ IN NS ns.any.thing. ; who is responsible for subdomain
ns IN A 22.33.44.55 ; address of the ns.any.thing
$ORIGIN some.thing. ; subdomain
@ IN NS ns.some.thing. ; who is responsible for subdomain
ns IN A 33.44.55.66 ; address of the ns.some.thing
然后您可以在子域的 NS 服务器上执行任何操作,所有请求都将由其子区域处理。