Domain-Name-System

找出哪個 DNS 伺服器回答了您的查詢

  • August 7, 2019

我有一個看似簡單的問題,但經過一番搜尋後無法準確找到該問題的答案:

我知道,如果我想查找某個域名的 IP 地址,我輸入,例如:

nslookup google.de

並得到

Server:     127.0.1.1
Address:    127.0.1.1#53

Non-authoritative answer:
Name:   google.de
Address: 172.217.18.3

但是,我不知道我從哪裡得到這個答案。據我所知,我的解析器嘗試詢問我的本地 DNS 伺服器(在 Ubuntu dnsmasq 上),如果該伺服器沒有答案,它會詢問下一個伺服器,依此類推。但是我想知道到底是哪台伺服器給出了答案。那可能嗎?

我也試過

dig +trace www.google.com

它提供有關已發布伺服器的所有資訊,但執行完全迭代查找。我基本上想要這樣的答案,但要正常查找。

我想知道到底是哪個伺服器給出了答案。那可能嗎?

這是無法實現的。您不會在 DNS 回复的有效負載中的任何位置找到被諮詢的特定權威伺服器。存在用於辨識回复您的特定遞歸伺服器的 CHAOS 查詢,但沒有這樣的等效查詢來提取遞歸器從中獲取數據的確切權威伺服器的名稱。

Phillip 連結到的 StackOverflow 問答提供了有關如何辨識NS遞歸 DNS 響應的權威部分中存在的記錄列表的說明。這是伺服器的完整列表,而不是特定的伺服器。即使對於您的使用來說已經足夠了,但 DNS 標準認為此資訊是可選的,並且越來越少在遞歸響應中看到它,以減少內部來源的反射攻擊的有效負載大小。

如果您知道區域的名稱,則可以NS通過顯式請求來請求完整的記錄列表。這需要知道您處於該區域的頂點;對 NS 記錄的請求example.com將返回所需的響應,但www.example.com不會,除非www被委託給另一組伺服器。在這種情況下,您別無選擇,只能迭代地向後工作,直到發現該區域的頂點。

長話短說,沒有可靠的短路徑(即單個查詢)從遞歸伺服器獲取有關所有上游權限的資訊,並且沒有辦法在不控制權威伺服器的情況下了解響應查詢的特定權威伺服器和在每台伺服器上創建唯一的數據。(如果您這樣做,請為此創建一個獨特的區域,以免干擾您更敏感的生產區域轉移)

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