Domain-Name-System
DNS SOA 記錄 - MNAME 為空(只是一個零字節)
簡短的問題
空的 MNAME 是否有效?它最終會影響 Windows PC 或智能手機等客戶端嗎?
我的情況
我正在調試一個問題,即在 Android 應用程序中解析主機名有時會卡在對用於解析主機名的標準 Android Bionic 函式的本機呼叫中。呼叫有時會在幾秒鐘後返回,有時會在例如 15 分鐘 (!) 後返回。但是,在從 Java 呼叫本機函式之前呼叫本機函式時,如果特定請求僅解析主機名的 IPv4 地址,則呼叫會立即返回。如果然後再次呼叫該函式並請求主機名的 IPv6 地址,它就會卡住。所以肯定是DNS IPv6相關的。
我已經 Wireshark 和探勘了一下,主機名和 IP 地址在下面被替換為假人。
IPv4 你
這是標準回复:
$ dig sub.domain.de -t A ; <<>> DiG 9.9.5-3ubuntu0.19-Ubuntu <<>> domain.de -t A ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47021 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sub.domain.de. IN A ;; ANSWER SECTION: domain.de. 5771 IN A 111.111.111.111 ;; AUTHORITY SECTION: . 8267 IN NS i.root-servers.net. . 8267 IN NS c.root-servers.net. . [...] ;; Query time: 3 msec ;; SERVER: 172.16.0.90#53(172.16.0.90) ;; WHEN: Wed Feb 24 16:02:52 CET 2021 ;; MSG SIZE rcvd: 283
IPv6 你
IPv6 響應不包含答案,因為似乎沒有分配給主機名的 IPv6 地址。但是,它包含一個 SOA 記錄,其中 MNAME 設置為零字節。
$ dig sub.domain.de -t AAAA ; <<>> DiG 9.9.5-3ubuntu0.19-Ubuntu <<>> sub.domain.de -t AAAA ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27732 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;sub.domain.de. IN AAAA ;; AUTHORITY SECTION: domain.de. 599 IN SOA . admin.domain.de. 2021022401 10800 3600 604800 600 ;; Query time: 29 msec ;; SERVER: 172.16.0.90#53(172.16.0.90) ;; WHEN: Wed Feb 24 15:57:07 CET 2021 ;; MSG SIZE rcvd: 102
上面的探勘將 MNAME 描述為一個點“。”,但是在檢查 Wireshark 響應時,我可以看到 MNAME 欄位只是一個零字節。
長問題
- 空的 MNAME 欄位是否有效?針對 DNS SOA 值的 RIPE NCC 建議說:“DNS 規范明確規定主伺服器在此處命名。必須確定並使用該值。$$ … $$"
- Android DNS解析器是否可能對此感到困惑,拼命嘗試將主機名解析為具有未定義名稱的主名稱伺服器?
- 對於未指定 IPv6 地址的主機名,NOERROR 的 RCODE 是否合法?那不應該是 NXDOMAIN,因為 IPv6 領域中不存在主機名嗎?或者這種反應完全有效?
- 這是該欄位在技術上可能的值,但正如您所指出的,從
.
實際上不是名稱伺服器的名稱的意義上說,它並不是真正有效的。- 不太可能,因為它
SOA
MNAME
並沒有真正用於正常查找。雖然NS
記錄對於在正常查找過程中查找名稱伺服器至關重要,但SOA
MNAME
僅在某些特定情況下使用,即哪個伺服器是“主伺服器”很重要(例如 NOTIFY 和 UPDATE 消息的一些預設值)。- 是的。
NOERROR
權威部分中的+SOA
是所謂的NODATA
響應。這是一個否定的響應,只是說該名稱不存在所請求的記錄類型,不像NXDOMAIN
說該名稱根本不存在。