題 使用dig查詢任何記錄時的TTL


這個問題來自 這個話題。當我這樣做時,我得到剩餘的秒數,直到A記錄在查詢的名稱服務器中到期:

dig stackexchange.com

但是,如果我這樣做,我會得到授權的TTL值:

dig any stackexchange.com 

所以,當我這樣做時,我不明白為什麼 dig any stackexchange.com 當我實際進行遞歸查詢時,我得到所有TTL值,好像我做了一個授權問題。


4
2018-02-02 22:33


起源


@Kannan Mohan,現在是一個新問題。 - whitenoisedb


答案:


簡而言之,您在問題中提到的兩個查詢都是非權威查詢。

可以從緩存DNS服務器或權威DNS服務器查詢域的DNS記錄。因此,當您要查詢緩存DNS服務器時,您可以指定DNS IP地址,或者如果未指定,則指定已配置的默認DNS服務器 /etc/resolv.conf 將被採取。

非權威查詢 

$ dig stackexchange.com

要么

$ dig stackexchange.com @8.8.8.8

在上述兩種情況下,查詢都會返回非權威回复,因為您的ISP的DNS或Google的公共DNS(8.8.8.8)不具有權威性 stackexchange.com 域。當您查詢非權威名稱服務器時,它提供的TTL值將在每次查詢時減少。一旦TTL值到期,緩存名稱服務器將重新查詢權威DNS服務器。

權威查詢 

因此,要獲得權威回复,您需要從權威DNS服務器查詢記錄,並且可以使用以下方法查找記錄。

$ dig ns stackexchange.com
       ...
;; ANSWER SECTION:
stackexchange.com.  84894   IN  NS  cf-dns02.stackexchange.com.
stackexchange.com.  84894   IN  NS  cf-dns01.stackexchange.com.
       ...

答案部分 為域提供權威的名稱服務器 stackexchange.com 所以,如果我們需要獲得權威的答复

$ dig stackexchange.com @cf-dns01.stackexchange.com.

當我們查詢權威DNS服務器時,TTL值不會改變,因為這些名稱服務器是信息的主要來源,並且在管理員更改它們之前它們不會過期。

任何記錄如何運作

任何記錄都像一張外卡,您可以使用它來獲取緩存/存儲在DNS服務器中的所有記錄。例如我查詢過 stackexchange.com 對於任何記錄,我的默認DNS服務器回復如下。

$ dig any stackexchange.com
    ....
;; ANSWER SECTION:
stackexchange.com.  86350   IN  SOA cf-dns01.stackexchange.com. dns.cloudflare.com. 2017456480 10000 2400 604800 3600
stackexchange.com.  176 IN  A   198.252.206.140
stackexchange.com.  84338   IN  NS  cf-dns01.stackexchange.com.
stackexchange.com.  84338   IN  NS  cf-dns02.stackexchange.com.
    ....

在這裡,您可以看到答复僅包含有關的信息 SOAA 和 NS 記錄。但實際上有更多的記錄 stackexchange.com 它沒有緩存在我的默認DNS服務器中,因為我沒有查詢它。

現在我在詢問 MX 記錄到我的默認DNS服務器,回復為

$ dig MX stackexchange.com
    ....
;; ANSWER SECTION:
stackexchange.com.  300 IN  MX  10 aspmx3.googlemail.com.
stackexchange.com.  300 IN  MX  5 alt2.aspmx.l.google.com.
stackexchange.com.  300 IN  MX  5 alt1.aspmx.l.google.com.
stackexchange.com.  300 IN  MX  10 aspmx2.googlemail.com.
stackexchange.com.  300 IN  MX  1 aspmx.l.google.com.
    ....

現在我再次查詢 ANY 記錄,現在你可以看到該查詢 ANY 已經回來了 MX 記錄也是。所以 ANY record將只提供僅在您的默認名稱服務器上緩存的記錄。

$ dig any stackexchange.com
     ....
;; ANSWER SECTION:
stackexchange.com.  298 IN  MX  5 alt1.aspmx.l.google.com.
stackexchange.com.  298 IN  MX  10 aspmx2.googlemail.com.
stackexchange.com.  86084   IN  NS  cf-dns01.stackexchange.com.
stackexchange.com.  298 IN  MX  10 aspmx3.googlemail.com.
stackexchange.com.  298 IN  MX  1 aspmx.l.google.com.
stackexchange.com.  298 IN  MX  5 alt2.aspmx.l.google.com.
stackexchange.com.  86084   IN  NS  cf-dns02.stackexchange.com.
stackexchange.com.  243 IN  A   198.252.206.140
stackexchange.com.  86343   IN  SOA cf-dns01.stackexchange.com. dns.cloudflare.com. 2017456480 10000 2400 604800 3600
     ....

正如您所看到的,TTL值正在針對非權威性回復進行更改。


6
2018-02-04 05:53





您不了解DNS查詢的TTL字段。 TTL是客戶端在重新查詢名稱服務器之前應該多長時間緩存結果的指示器。除非您使用不同的TTL值更新DNS服務器,否則響應將始終相同。每次需要將主機名解析為IP時,重新查詢名稱服務器是非常糟糕的做法。


1
2018-02-02 23:28



據我所知,只有在查詢授權服務器時,TTL才會指示緩存結果的時間。但是,在執行遞歸查詢時,您會在重新啟動之前獲得這些DNS服務器中的實際剩餘時間。 - whitenoisedb
這樣做的原因 dig somedomain.com 我得到,例如,1645?這實際上不是TTL。如果我做了一個authorative問題,我得到正確的TTL值14400。 - whitenoisedb
你介意指定你正在使用的實際命令嗎?我懷疑一些參數正在切換到迭代查詢而不是允許遞歸查詢。 (+ norec + nssearch或+ trace?) - TheCompWiz
比方說,我剛剛做過 dig stackexchange.com 和TTL是15.然後,如果我這樣做 dig +norecurse stackexchange.com @cf-dns01.stackexchange.com 我的TTL值為300。 - whitenoisedb
正確。 + norecurse直接強制查詢權威服務器。 + norecurse定義做迭代查詢。 - TheCompWiz