[Mac/Linux] 使用 host 指令發出 DNS query ANY 封包,同時查詢 IPv4/IPv6 位址

[Mac/Linux] 使用 host 指令發出 DNS query ANY 封包,同時查詢 IPv4/IPv6 位址

今天在看一個奇怪的問題,

就是我們的程式去 DNS server 問某個網站的 IP,

但有時取回來的是 IPv6 位址、有時是 IPv4+IPv6 位址…

 

研究了一下,我們使用的程式看來會發出 DNS query type ANY 的封包,

所以 DNS server 理論上會同時回傳 IPv4/IPv6 位址,

只是我們使用的 DNS server 看來有點問題,

有時只回傳了 IPv6,而有時是兩者皆回。

 

要怎麼模擬發出 DNS query type ANY 的封包呢?

可以用 host -a 這個指令,

例如我想要問 DNS server 8.8.4.4 說 www.google.com 的 IP 是多少?

testuser@localhost ~ $ host -a www.google.com 8.8.4.4

Trying "www.google.com"
Using domain server:
Name: 8.8.4.4
Address: 8.8.4.4#53
Aliases:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26531
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.			IN	ANY

;; ANSWER SECTION:
www.google.com.		299	IN	A	172.217.160.68
www.google.com.		299	IN	AAAA	2404:6800:4012::2004

Received 76 bytes from 8.8.4.4#53 in 14 ms

 

可以看到發出了 DNS type ANY,且同時取得了 IPv4/IPv6 的位址。

用 Wireshark 抓封包,結果亦是相同:

 

另外想起來,最近看到了 CloudFlare: RFC8482 – Saying goodbye to ANY 這篇文章,

說 CloudFlare 不再支援 DNS query ANY 這種請求,

因為發出的 DNS query 封包不大,

但回應封包卻因為包含許多資訊,造成了攻擊放大效果。

為了避免這種問題,所以將 DNS query ANY 擋掉了~

 

手動來試一下,改用 CloudFlare 的 DNS server 1.1.1.1,

同樣使用 host -a 去問 www.google.com 的 IP,

這次就因為 CloudFlare 不支援 DNS query ANY,

因此得到了 NOTIMP (not implemented 未實作) 的結果:

testuser@localhost ~ $ host -a www.google.com 1.1.1.1

Trying "www.google.com"
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:

Host www.google.com not found: 4(NOTIMP)
Received 32 bytes from 1.1.1.1#53 in 159 ms

 

當然,如果單問 IPv4 位址 (DNS query type A) 的話,是有結果的:

testuser@localhost ~ $ host -v -t A www.google.com 1.1.1.1

Trying "www.google.com"
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8888
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.			IN	A

;; ANSWER SECTION:
www.google.com.		54	IN	A	172.217.160.100

Received 48 bytes from 1.1.1.1#53 in 5 ms

 

單問 IPv6 位址 (DNS query type AAAA) 也沒有問題的囉:

testuser@localhost ~ $ host -v -t AAAA www.google.com 1.1.1.1

Trying "www.google.com"
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9060
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.			IN	AAAA

;; ANSWER SECTION:
www.google.com.		117	IN	AAAA	2404:6800:4012::2004

Received 60 bytes from 1.1.1.1#53 in 8 ms

 

參考資料:鳥哥的 Linux 私房菜 — DNS Server

(本頁面已被瀏覽過 1,854 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料