未绑定的存根主机选项无法使用 /etc/hosts 进行解析

未绑定的存根主机选项无法使用 /etc/hosts 进行解析

我让 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-zonelocal-data反映您的/主机或者使用 IP 作为存根。

为了简化迁移,源代码有一个 perl 脚本,contrib/build-unbound-localzone-from-hosts.pl可以生成包含文件。在执行之前需要在脚本内部设置本地区域名称

相关内容