Debian 如何选择 IPv4 和 IPv6 连接或确定其优先级?

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,而另一方则没有。操作系统有什么理由优先考虑连接类型吗?

答案1

原来是关于 getaddrinfo 的配置,它是在/etc/gai.conf.

有关如何解决该问题的更多信息:https://askubuntu.com/questions/32298/prefer-a-ipv4-dns-lookups-before-aaaaipv6-lookups

答案2

建立连接的不是操作系统,而是应用程序。如果whois想要连接到 n 个 IPv6 地址,那么操作系统将确定用于连接的(IPv6)源地址,除非应用程序已显式绑定源地址。连接到 IPv4 地址时,IPv4 地址将用作源。您不能使用 IPv6 源地址连接到 IPv4 目标地址,反之亦然。

现在的问题是:为什么whois选择在一台服务器上连接到whois.nic.frIPv6 地址,而在另一台服务器上选择连接到 IPv4 地址。您必须strace同时运行两台服务器才能看到差异,也许是在一台服务器上解析 AAAA 地址超时,而后续的 A 查找成功。

相关内容