Linux

Debian 如何選擇或優先考慮 IPv4 和 IPv6 連接?

  • September 8, 2016

我將用一個例子來解釋我的問題。我有兩台伺服器,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.frIPv6 地址,而在另一台伺服器上連接到 IPv4 地址。您必須在strace兩台伺服器上執行以查看差異是什麼,也許解決一台伺服器上的 AAAA 地址超時並且隨後的 A 查找成功。

引用自:https://unix.stackexchange.com/questions/199295