Domain-Name-System

未使用 /etc/hosts 解析的未綁定存根主機選項

  • December 1, 2015

我有 unbound 作為驗證、記憶體、遞歸 dns 伺服器執行,nsd3 作為權威名稱伺服器執行。在我嘗試解析應該轉發到 nsd3 的地址之前,似乎兩者的每個方面都可以正常工作。我已將問題縮小到從未綁定轉發到 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

這是 unbound 的輸出,日誌級別為 3。我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

附帶說明一下,我在它們自己的 docker 容器中從 debian 基本映像執行 unbound 和 nsd3,並將它們連結在一起。我可以unsd_nsd3在未綁定的容器中很好地解決。這是未綁定容器中的 /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

我已經沒有關於如何從這裡繼續前進的想法了。一些幫助將不勝感激。

未綁定不使用*/etc/hosts*。Unbound 只能unsd_nsd3通過上游轉發來解析 stub-name。您將需要設置local-zonelocal-data反映*/hosts*的內容,或為存根使用 IP。

為了便於遷移,源 tarball有一個 perl 腳本,contrib/build-unbound-localzone-from-hosts.pl它會生成一個包含文件。本地區域名稱需要在 exec 之前在腳本中設置

引用自:https://serverfault.com/questions/739829