是否允許設定空 DNS A 記錄?

是否允許設定空 DNS A 記錄?

我正在嘗試了解 DNS 上的奇妙世界。

我為 example.com 建立了一個區域文件,其中包含:

@     A    1.2.3.4
*     A    1.2.3.4

不過,我還設定了本機 DNS local.example.com,我建立了一個單獨的區域檔案來包含以下內容:

machine1     A    192.168.0.1
machine2     A    192.168.0.2

當我挖掘 machine1.local.example.com 時,它返回 A 記錄 192.168.0.1,太棒了。

遺憾的是,badmachine.local.example.com 返回 1.2.3.4,local.example.com 也是如此。

我不確定防止這種情況的最佳方法。如果我將以下內容新增至 local.example.com ,則會為上述 2 個範例傳回空 A 記錄,這就是我想要的行為:

@     A
*     A

我希望 everything.example.com 使用通配符,除了 local.example.com 子網域中的任何內容,除非指定,否則我不想給予回應。本質上我需要一張有一個排除項的通配符。

這是允許的嗎?這是最佳實踐,還是我做的事情非常錯誤?我正在使用帶有 BIND 後端的 PowerDNS。

感謝您的想法!

答案1

首先,您對 Chris S 的評論在很大程度上澄清了(實際上,修改了)您原來的問題,我希望您能原諒我將其編輯到您原來的問題中。

其次,正如其他人指出的那樣,不允許空記錄。

第三,我認為做你想做的事情的方法是聲明local.example.com是一個適當的子領域:

local                       IN      NS      ns1.example.com
local                       IN      NS      ns2.example.com

列出與您目前運行的 example.com 相同的兩個名稱伺服器(注意:我不了解 PowerDNS,所以我上面的條目是 BIND 格式)。然後在這些名稱伺服器上(我認為是這個名稱伺服器),您為 local.example.com 聲明一個區域文件,其中僅包含您要解析的主機,並且沒有通配符記錄。

因此,當人們查找 時foo.example.com,假設未列出,它將匹配現有的通配符記錄,並傳回1.2.3.4(或其他)。但是,當人們查找 時 foo.local.example.com,將返回 的名稱伺服器記錄local.example.com,並且將進行進一步的遞歸,您的名稱伺服器現在正在查看 的區域文件local.example.com,並說(在沒有 foo 的特定記錄的情況下)local.example.com 中的通配符)「不,沒有這樣的記錄」。

答案2

準確地知道您想要什麼回應將會很有用。您的問題中引用的前兩行設定了網域的預設回應,以及不匹配的記錄回應。因此 example.com 將由「@」記錄提供服務,anything-that-doesnt-exist.exmaple.com 將由「*」記錄提供服務。它們不是必需的,您可以將兩者都刪除。將它們設為空白值是無效的配置(在大多數系統上)。

答案3

我想不出一種方法來“清空”條目。不允許空 A 記錄。

也許*.example.com A 1.2.3.4會阻止覆蓋 .local.example.com 條目?聽起來 PowerDNS 的行為不符合規範。定義 local.example.com 網域應該可以防止通配符破壞該網域中的任何內容。您可以發布完整的區域文件嗎?這將解決一些小問題。

答案4

您應該查看正在運行的伺服器的具體行為,因為此功能尚未一致實現:

引用 RFC 4592 的話,許多 DNS 實作以不同的方式偏離了通配符的原始定義。

實踐中的通配符

您希望通配符條目執行的操作是正確的,因為我了解通配符用法的定義(最好將其視為最後手段的預設值)。我會盡力找時間閱讀澄清的 RFC 並在此處更新...

相關內容