公共域的 Intranet NameServer
我已經註冊了一個域名 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 伺服器。這就是為什麼這個系統不像你想像的那樣工作。