Linux
如果在同一記錄集中不允許不同的 TTL,為什麼綁定允許按記錄設置 TTL
如果同一記錄集中不允許不同的 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 分鐘後消失。使用此解析器的任何郵件伺服器都無法看到這些記錄,並且我可能會遇到郵件傳遞問題。