在AAAA(IPv6)查找之前优先使用A(IPv4)DNS查找


44

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

(尽管各种浏览器和其他应用程序可能包含它们自己的解析器,但我在谈论的是glibc中的解析器)


要澄清一下,您确实要同时存在IPv4和IPv6吗?
belacqua 2011年

最好是。但是由于我只有链接本地IPv6,所以每次都要求例如google.com的AAAA记录,然后再要求A记录是很浪费的。

Answers:


53

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

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

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

#precedence :: ffff:0:0/96 100

有关详细说明,请gai.conf参见手册页。


谢谢,你救了我的一天!我的一台服务器不断从dns服务器获取ipv6结果,但是我的服务器无法正常工作(带有ipv6)
Boon 2014年

嗨,此设置是否需要sysctl或重新加载任何服务或重新启动才能生效?我发现您的答案很有用,但您可以对其进行编辑以解决此类疑问。
Marco Marco

的手册页gai.conf指出,您必须取消注释所有行,而不仅仅是IPv4,以获取正确的修改行为。来自gai.conf(5):“再次,配置文件中存在一个优先级行将导致不使用默认表。” 如果希望其他默认表行继续工作,则也必须取消注释它们。
伊恩·D·艾伦

10

我的问题是相同的,我在IPV4之前进行了IPV6查询,它们浪费了资源,所以我确实在freddyb发布时更改了/etc/gai.conf文件,但是我的情况有点不同,我的服务器是Natted,所以仅使用该行,IPv4不会优先于IPv6。该解决方案还在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

因此,即使您感到纳闷,您的服务器也将首先尝试ipv4!


2
/etc/gai.conf在Ubuntu 15.04文件“生动”说这三个scopev4行你在上面建议已经默认。我只进行了单行precedence ::ffff:0:0/96 100更改,即使在NAT之后也可以使用。
伊恩·艾伦

1

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

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

options single-request

到/etc/resolv.conf文件。(有关血腥细节,请参见http://udrepper.livejournal.com/20948.html


1
resolv.conf的手册页指出,您建议的选项恰好相反:“此选项使glibc顺序执行IPv6和IPv4请求(以解决过程变慢的代价)。” - man7.org/linux/man-pages/man5/resolver.5.html
ndemou

顺序=第一个,然后另一个-与并行相反。它在这里工作正常。
cweiske
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.