在 AAAA(IPv6) 查找之前首选 A (IPv4) DNS 查找

nos*_*nos 56 dns

请注意,我新安装的 Ubuntu 10.10 总是在 A 记录查找之前进行 AAAA DNS 查找。有什么办法可以将系统配置为先进行 A 查找?

(虽然各种浏览器和其他应用程序可能包含自己的解析器,但我指的是 glibc 中的解析器)

fre*_*dyb 71

IPv6 优先于 IPv4 是允许下一代 IP 接管的标准:)

您可以通过编辑/etc/gai.conf(gai 代表getaddrinfo,解析主机名的标准系统调用)中的优先级块来更改此设置。只需注释掉文件中描述的行:

# 对于喜欢 IPv4 连接的站点,将最后一行更改为

#优先级::ffff:0:0/96 100

gai.conf可以在man gai.conf(5) 中找到有关 的详细说明。

  • `gai.conf` 的手册页指出,您必须取消注释*所有*行,而不仅仅是 IPv4 行,才能获得正确的修改行为。来自`gai.conf(5)`:“再一次,配置文件中存在单个优先行会导致不使用默认表。” 如果您希望其他默认表行继续工作,您也必须取消注释它们。 (2认同)

小智 15

我的问题是一样的,我在 IPv4 之前进行了 IPv6 查询并且它们浪费资源,所以我确实/etc/gai.conf在 freddyb 发布时更改了我的文件,但我的情况有点不同,我的服务器是 Natted,所以 IPv4 不会优先于IPv6 只有那一行。解决方案也在注释掉其他行,/etc/gai.conf所以它看起来像这样

# For sites which prefer IPv4 connections change the last line to
precedence ::ffff:0:0/96 100
...
#    For sites which use site-local IPv4 addresses behind NAT there is
#    the problem that even if IPv4 addresses are preferred they do not
#    have the same scope and are therefore not sorted first.  To change
#    this use only these rules:
#
scopev4 ::ffff:169.254.0.0/112  2
scopev4 ::ffff:127.0.0.0/104    2
scopev4 ::ffff:0.0.0.0/96       14
Run Code Online (Sandbox Code Playgroud)

因此,即使您是 Natted,您的服务器也会先尝试 ipv4!

  • Ubuntu 15.04 “vivid”中的 `/etc/gai.conf` 文件说你上面建议的那三行 `scopev4` 已经是默认值。我只做了一行 `precedence ::ffff:0:0/96 100` 更改,甚至在 NAT 之后也有效。 (2认同)

小智 3

如果您根本不想启用 IPv6,可以禁用 IPv6 来实现此目的。 http://www.webupd8.org/2010/05/how-to-disable-ipv6-in-ubuntu-1004.html

如果没有,您可以尝试添加

options single-request
Run Code Online (Sandbox Code Playgroud)

到您的 /etc/resolv.conf 文件。(有关血淋淋的详细信息,请参阅http://udrepper.livejournal.com/20948.html