Domain-Name-System

公共域的 Intranet NameServer

  • August 12, 2014

我已經註冊了一個域名 domain.co 並有一個為查詢提供服務的 Intranet DNS 伺服器 (BIND)。我希望網路中的任何人都可以發現此域和 dns,而無需對其係統進行任何更改。

所以,我有另一個域 example.com,我在其中添加了指向 ns1.example.com -> 10.10.0.1 和 ns2.example.com -> 10.11.0.1 的記錄

現在我已經更改了 domain.co 的名稱伺服器(更改為 ns1.example.com 、 ns2.example.com)

但是當我嘗試解析域名時,我得到了伺服器故障。

$$ Note: the DNS have propagated already $$

$ dig stage.domain.co

; <<>> DiG 9.9.5-3-Ubuntu <<>> stage.domain.co
;; global options: +cmd
;; connection timed out; no servers could be reached

但是 dig stage.domain.co @ns1.example.com 返回正確。

$ dig stage.domain.co @ns1.example.com

; <<>> DiG 9.9.5-3-Ubuntu <<>> stage.domain.co @ns1.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17613
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;stage.domain.co.       IN  A

;; ANSWER SECTION:
stage.domain.co.    86400   IN  A   10.11.8.35

如果我更新 /etc/resolv.conf 以指向我的 dns 伺服器並且一切正常,它就可以工作。我想要實現的是它可以正常工作,而我網路中的resolv.conf機器沒有任何變化,可以直接查詢我的內網dns伺服器。

為什麼直接查詢域名會拋出server-fault?是因為它的內網ip嗎?我希望這些只能解析到我的 Intranet 機器。

編輯:找出原因,正如 falcon 建議的那樣,本地系統不遞歸解析 dns,而是查詢提供者提供遞歸 dns 解析器(如 google dns/open dns),他們將無法訪問 Intranet 名稱伺服器,因此失敗。它在部署本地遞歸 dns 解析器並將其用作 dns 源時起作用。

不,您不應該將 RFC1918 IP 地址添加到公共粘合記錄中。這有幾個原因:

  • 如果您的內部主機使用 RFC1918 定址的權威名稱伺服器所在的 LAN 外部的 DNS 伺服器,則由於顯而易見的原因將導致 SERVFAIL
  • 它將垃圾添加到粘合記錄集
  • 如果不同 LAN 中的解析器實際上可以聯繫指定 RFC1918 地址上的 DNS 伺服器並且存在惡意伺服器,則會產生意想不到的後果
  • 它可能會為您的網路提供不希望的可見性

你真的可以做兩件事之一。

典型的解決方案是在您的 Intranet 中使用的 DNS 伺服器上設置條件轉發器(並且不要與註冊商設置粘合記錄)。無論如何,您都應該執行一個,這樣您就可以利用記憶體。

另一種解決方案是使用一對公共路由的 IP 地址並在其上託管 DNS 伺服器,但使用 ACL 以便僅允許 LAN 中的主機查詢它們,並確保它們只能從您的 Intranet 訪問。此方法適用於 IPv6 環境,但不適用於 IPv4。

值得注意的是,大多數電腦都不是遞歸 DNS 解析器。只有遞歸 DNS 解析器才會查看粘合記錄或根。除非電腦正在執行 DNS 守護程序(如綁定),否則它很可能不是遞歸解析器,而只是將其查詢發送到配置的 DNS 伺服器。這就是為什麼這個系統不像你想像的那樣工作。

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