Linux

如果在同一記錄集中不允許不同的 TTL,為什麼綁定允許按記錄設置 TTL

  • March 26, 2021

如果同一記錄集中不允許不同的 TTL,為什麼綁定允許逐個記錄設置 TTL?

如果我使用以下方法設置區域 ttl:

$TTL 39600

然後使用以下方法設置記錄 TTL:

@        300     IN      A       1.1.1.1

我在日誌中收到警告:

TTL set to prior TTL (300)

這是因為我有“同一記錄集中的記錄有不同的 TTL,這是不允許的”

如果不允許這樣做,那麼能夠逐條記錄設置 TTL 記錄有什麼意義?

謝謝

文件格式在RFC1034和部分RFC1035中指定。它非常古老(1987 年),並沒有專門為 BIND 或根據目前功能定義。這裡沒有大智慧;按照慣例,就是這樣。

我相信這種格式也被設計用於記憶體之類的東西,儘管在實踐中這種用法一定非常罕見。在記錄記憶體中,TTL 經常不同,並且記憶體包含來自許多不同域的記錄。

BIND 允許您為與區域預設 TTL 不同的單個記錄設置顯式 TTL,但您不能為具有相同名稱的相同類型的記錄設置不同的 TTL。

你可以這樣做:

$TTL 39600
@        300     IN      A       192.0.2.100

你不可以做這個:

$TTL 39600
@        300     IN      A       192.0.2.100
@                IN      A       192.0.2.101

為什麼?因為這會導致某些記錄從記憶體中超時,留下其他記錄,從而為您的使用者提供對其 DNS 查詢的錯誤答案。例如,當您有兩個具有相同名稱的相同類型的記錄時,BIND 將以循環方式回答,平衡兩個 IP 地址之間的負載。在上面的範例中,203.0.113.100 將在 5 分鐘後超時,而將另一個記憶體 11 小時。解析器不會重新查詢具有較短 TTL 的記錄,因為據它所知,它具有該 A 記錄查詢的答案。

這是一個 TXT 記錄範例:

$TTL 39600
@                IN      TXT     "My Google verification code"
@        300     IN      TXT     "My SPF record"
@        300     IN      TXT     "My DKIM record"
@        300     IN      TXT     "My DMARC record"

如果允許上面的範例,解析器將在查詢後記憶體所有 3 條 TXT 記錄,但我的 SPF、DKIM 和 DMARC 記錄將在 5 分鐘後消失。使用此解析器的任何郵件伺服器都無法看到這些記錄,並且我可能會遇到郵件傳遞問題。

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