Debian 如何選擇或優先考慮 IPv4 和 IPv6 連接?
我將用一個例子來解釋我的問題。我有兩台伺服器,
A
並且B
都執行 Debian 7.8,都具有到 Internet 的雙棧連接(我不知道這是否重要,但它們甚至具有相同數量的 IPv6 地址)並且它們都具有相同版本的 whois已安裝(沒有任何配置文件)。現在,當我從伺服器 whois google.fr (我選擇 whois.nic.fr 因為它顯示您正在連接的 IP)時
A
,我得到了這個響應頭:%% %% This is the AFNIC Whois server. %% %% complete date format : DD/MM/YYYY %% short date format : DD/MM %% version : FRNIC-2.5 %% %% Rights restricted by copyright. %% See http://www.afnic.fr/afnic/web/mentions-legales-whois_en %% %% Use '-h' option to obtain more information about this service. %% %% [xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx REQUEST] >> -V Md5.1 google.fr %% %% RL Net [##########] - RL IP [#########.] %%
如您所見,whois 使用 IPv6 地址連接到 whois.nic.fr。
但是,當我在 server 做同樣的事情時
B
,我得到了這個響應頭:%% %% This is the AFNIC Whois server. %% %% complete date format : DD/MM/YYYY %% short date format : DD/MM %% version : FRNIC-2.5 %% %% Rights restricted by copyright. %% See http://www.afnic.fr/afnic/web/mentions-legales-whois_en %% %% Use '-h' option to obtain more information about this service. %% %% [xx.x.xxx.xxx REQUEST] >> -V Md5.1 google.fr %% %% RL Net [##########] - RL IP [#########.] %%
正如您現在所看到的,whois 在伺服器上使用了 IPv4
B
。為什麼伺服器
B
在連接 whois 伺服器時不使用 IPv6?他們肯定都與 IPv6 有聯繫,但他們中的一個選擇使用 IPv6 而沒有一個。作業系統是否有任何理由優先考慮連接類型?
原來是關於getaddrinfo的配置,控制在
/etc/gai.conf
.有關如何解決的更多資訊:https ://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups
建立連接的不是作業系統,而是應用程序。如果
whois
要連接到 n 個 IPv6 地址,則作業系統將確定用於連接的(IPv6)源地址,除非應用程序已明確綁定源地址。連接到 IPv4 地址時,IPv4 地址用作源。您不能使用 IPv6 源地址連接到 IPv4 目標地址,反之亦然。現在問題變成了:為什麼
whois
選擇在一台伺服器上連接到whois.nic.fr
IPv6 地址,而在另一台伺服器上連接到 IPv4 地址。您必須在strace
兩台伺服器上執行以查看差異是什麼,也許解決一台伺服器上的 AAAA 地址超時並且隨後的 A 查找成功。