我让 unbound 作为验证、缓存、递归 DNS 服务器运行,让 nsd3 作为权威名称服务器运行。似乎两者的各个方面都正常工作,直到我尝试解析应转发到 nsd3 的地址。我已将问题缩小到从 unbound 转发到 nsd3 的存根区域,看起来它没有解析“存根主机”名称。根据日志,unbound 正在尝试使用外部 DNS 而不是 /etc/hosts 来解析“存根主机”(尽管这可能是因为它在查找过程中以某种方式失败)。我已经测试了对 nsd3 服务器的 IP 进行硬编码,这似乎运行正常。
这是我的未绑定配置的相关部分(完整配置是这里):
private-domain: "test.lan"
local-zone: "0.0.10.in-addr.arpa." nodefault
stub-zone:
name: "test.lan"
stub-host: unsd_nsd3
forward-zone:
name: "."
forward-addr: 8.8.8.8 # Google Public DNS
forward-addr: 74.82.42.42 # Hurricane Electric
forward-addr: 4.2.2.4 # Level3 Verizon
以下是日志级别为 3 的 unbound 的输出。我dig mithril.test.lan @localhost
作为测试运行(直接查询 nsd3 时可以正确解析):
[1448909203] unbound[1:0] debug: validator[module 0] operate: extstate:module_state_initial event:module_event_moddone
[1448909203] unbound[1:0] info: validator operate: query unsd_nsd3. A IN
[1448909203] unbound[1:0] debug: iterator[module 1] operate: extstate:module_wait_subquery event:module_event_pass
[1448909203] unbound[1:0] info: iterator operate: query mithril.test.lan. A IN
[1448909203] unbound[1:0] info: processQueryTargets: mithril.test.lan. A IN
[1448909203] unbound[1:0] info: new pside target unsd_nsd3. A IN
[1448909203] unbound[1:0] debug: iterator[module 1] operate: extstate:module_state_initial event:module_event_pass
[1448909203] unbound[1:0] info: iterator operate: query unsd_nsd3. A IN
[1448909203] unbound[1:0] info: resolving unsd_nsd3. A IN
[1448909203] unbound[1:0] info: processQueryTargets: unsd_nsd3. A IN
[1448909203] unbound[1:0] info: sending query: unsd_nsd3. A IN
[1448909203] unbound[1:0] debug: sending to target: <.> 74.82.42.42#53
[1448909203] unbound[1:0] debug: cache memory msg=132347 rrset=132399 infra=5449 val=132392
[1448909203] unbound[1:0] debug: iterator[module 1] operate: extstate:module_wait_reply event:module_event_reply
[1448909203] unbound[1:0] info: iterator operate: query unsd_nsd3. A IN
[1448909203] unbound[1:0] info: response for unsd_nsd3. A IN
[1448909203] unbound[1:0] info: reply from <.> 74.82.42.42#53
[1448909203] unbound[1:0] info: query response was NXDOMAIN ANSWER
[1448909203] unbound[1:0] info: finishing processing for unsd_nsd3. A IN
[1448909203] unbound[1:0] debug: validator[module 0] operate: extstate:module_state_initial event:module_event_moddone
[1448909203] unbound[1:0] info: validator operate: query unsd_nsd3. A IN
[1448909203] unbound[1:0] debug: iterator[module 1] operate: extstate:module_wait_subquery event:module_event_pass
[1448909203] unbound[1:0] info: iterator operate: query mithril.test.lan. A IN
[1448909203] unbound[1:0] info: processQueryTargets: mithril.test.lan. A IN
[1448909203] unbound[1:0] debug: out of query targets -- returning SERVFAIL
[1448909203] unbound[1:0] debug: return error response SERVFAIL
[1448909203] unbound[1:0] debug: validator[module 0] operate: extstate:module_wait_module event:module_event_moddone
[1448909203] unbound[1:0] info: validator operate: query mithril.test.lan. A IN
[1448909203] unbound[1:0] debug: cache memory msg=132557 rrset=132624 infra=5449 val=132392
顺便提一下,我在 debian 基础镜像中将 unbound 和 nsd3 都运行在它们自己的 docker 容器中,并将它们链接在一起。我可以unsd_nsd3
在 unbound 容器中很好地解析。以下是 unbound 容器中的 /etc/hosts:
172.17.0.6 a79a91df9ec5
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.5 docker_nsd3 89a74b365c88 unsd_nsd3
172.17.0.5 unsd_nsd3 89a74b365c88
我已经想不出下一步该怎么做了。如果能得到一些帮助就好了。
答案1
未绑定不使用/etc/hosts。Unbound 只能通过转发上游来解析存根名称unsd_nsd3
。您需要设置local-zone
并local-data
反映您的/主机或者使用 IP 作为存根。
为了简化迁移,源代码有一个 perl 脚本,contrib/build-unbound-localzone-from-hosts.pl
可以生成包含文件。在执行之前需要在脚本内部设置本地区域名称