2015-02-05 92 views
1

我家的公共IP地址是一個動態IP,我需要從戶外訪問它。我不想使用像DynDns或NoIp這樣的服務,所以我創建了自己的腳本。通過更改TTL改善DNS傳播

該腳本每小時執行一次,基本上它讀取我的公共IP地址爲icanhazip.com,以及對應於mydomain.com的IP(使用python工具dnsyo)。如果地址不同,它會使用cloudflare API將我的新公共IP鏈接到mydomain.com。

我的問題是,當IP更改時,我必須在DNS的阻塞前5小時左右等待。在此期間,mydomain.com解決了我的舊公共IP,因此我無法訪問新的公共IP。

我的問題是:如何使這種傳播更快?

我看到there(3.7節),我可以改變我的dns區域的Time To Live參數,如果我減少這個變量,它會減少傳播時間還是會攪亂我的設置?如果我改變它設定的合理價值是什麼?

回答

1

DNS TTL是允許緩存名稱服務器緩存查詢結果的秒數。總的來說,這樣做的實際後果是客戶可能會看到陳舊的價值。減少TTL正是人們處理經常更改(或即將更改)的DNS條目的方式。

您可以檢查這是否確實是問題通過檢查什麼的TTL值查詢權威DNS服務器(我假設的CloudFlare你的情況)直接當:

% host -v dynamic.foo.com ns.foo.com 
Using domain server: 
Name: ns.foo.com 
[...] 
dynamic.foo.com. 1800 IN A 10.10.1.1 

1800是30分鐘,因此在發生更新之前請求dynamic.foo.com的客戶端可能會在此期間看到過時的值。

如果您使用CloudFlare的rec_edit操作(如https://www.cloudflare.com/docs/client-api.html#s5.2中所述),那麼您可以爲該特定記錄指定TTL,而不是整個區域。這可能是你想要的。

+0

非常感謝您的回答我沒有看到我可以改變TTL只有一個記錄! 我剛剛檢查了我的記錄上的主機回答,根據cloudflare,我的TTL爲300(5 mn),我可以設置的最小值爲120,但我不確定它會產生很大的差異...是否有其他paramer我可以玩解決我的問題? – statox 2015-02-05 18:10:08

+0

如果你的TTL實際上是300,那麼爲什麼這個值會被緩存很長一段時間還有另一個原因。當你查詢你的本地域名服務器的緩存記錄時,你是否會得到類似TTL的結果? – kiko 2015-02-05 18:24:03

+0

是的,我的本地名稱服務器的TTL也是300。 – statox 2015-02-05 18:35:15