名称parsing不能在centos上使用ipv6

我只是在服务器上安装了CentOs 6.3,以便安装在数据中心,但无法获得名称parsing/curl工作。

我知道这是因为它试图使用ipv6,因为ping google.com作品, curl -4 google.com作品,但不curl google.com

我从接口删除了ipv6地址,它不会改变任何东西。

这是非常有问题的,因为像yum这样的大多数系统工具目前在名称parsing时失败了。 像Firefox这样的浏览器是可以使用的,因为它们可能使用另一个名字parsing工具而不是curl使用的工具。

我设法通过完全禁用ipv6来解决这个问题,例如/etc/hosts 这个 / hardcoding名称parsing这样的教程。 但是因为我在这里configuration一个稍后将被安装在远程数据中心的服务器,所以我想不要搞砸,理解正在发生的事情并且正确地修复它。 此外,我将面对同样的问题,更多的服务器来,所以我很感激你的帮助,理解这个问题,以及如何解决它。

如果需要帮助了解正在发生的事情,我会很乐意提供更多的信息。

目前的networkingconfiguration是一个小型的企业networking,很久以前configuration了一个DNS服务器(我们称之为A )。 dig google.comdig -4 google.com都被A DNS拒绝。 但是,这也是我的工作站curl工作(是的,他们都使用相同 DNS服务器)。 事实上,这个故障的服务器和我的工作站在/etc/resolv.conf有多个名称服务器,第二个工作正常,所以如果我从resolv.conf删除A ,一切正常!

问候,

奥利维尔

我用下面的诊断过程解决了这个问题,可以在处理名称parsing问题和ipv6时应用

  • testingdig google.comdig -4 google.com ,在有这个问题的机器和另一个在同一个networking上没有这个问题。
  • 如果四个命令(两台机器)失败,这意味着它们的/etc/resolv.conf中的第一个名称服务器没有为ipv6configuration。 删除它并重新testing。

一个cal还使用digg @nameserver google.com来testing/etc/resolv.conf的其他最终名称服务器,而不更改此文件。

我不得不解决这个问题,似乎在Centos版本6.x之前(比如5.8和更早版本),glibc DNSparsing器的默认行为就是这样。 客户端询问DNS服务器的IPv6地址(AAAAlogging)和DNS服务器只有IPv4logging它说 – 我没有它(NX)。 然后客户端再次请求了这5次得到相同的答案,直到然后说 – 嘿服务器,给我的IPv4地址。 然后服务器提供了A的logging,客户满意。 在我的networking中,这整个舞蹈是在300毫秒以内完成的,所以对于最终用户来说几乎是不明显的。

这在CentOS 6.x中发生了变化,两个查询并行完成 – 同时查询IPv6和IPv4logging。 如果您的DNS服务器使用NX(我没有)为IPv6地址进行响应,则客户端完全忽略了使用A(IPv4)地址的有效响应,因为它稍后会有一小部分时间。 所以它再次查询DNS服务器(同时进行IPv6和IPv4查询),并在相同的情况下结束。 因此,在最终放弃之后,通过将DNSsearch添加到search中开始执行这些查询。

这已经在Centos 6.7中得到了修复,客户端等待了第二个IPv4响应,并高兴地接受了这个响应,这在我的networking中需要大约15毫秒。 也许这是相关的Redhat门票 – https://bugzilla.redhat.com/show_bug.cgi?id=845218 (如果对AF_UNSPEC的两个响应之一失败, 请不要失败):

 rpm -q --changelog glibc | sed -n '0,/2.12-1.132/p' | grep AF_UNSPEC - Do not fail if one of the two responses to AF_UNSPEC fails (#845218). 

现在,这张票是受限制的,所以这里有可能是上游补丁: https : //sourceware.org/git/gitweb.cgi?p= glibc.git;h =16b293a7a6f65d8ff348a603d19e8fd4372fa3a9

有关详细信息,请参阅受影响的服务器列表:

  • Centos 5.8 – 工作(glibc-2.5-81)。 正在做6个IPv6查询,并回落到最终成功的IPv4
  • Centos 6.0 – 不起作用(glibc glibc-2.12-1.7.el6.x86_64)
  • Centos 6.1到6.4 – 不工作
  • Centos 6.5 – 不工作(版本glibc-2.12-1.132.el6.x86_64)
  • Centos 6.6 – 固定(版本glibc-2.12-1.149.el6.x86_64)
  • Centos 6.7 – 固定(版本glibc-2.12-1.166.el6.x86_64)
  • Centos 7.0 – 不工作(glibc-2.17-55.el7) – 同时进行IPv4和IPv6查询,有效IPv4响应优先,等待NX的IPv6响应并且无法parsing名称
  • Centos 7.1 – fixed(glibc-2.17-78.el7) – 同时进行IPv4和IPv6查询,有效IPv4响应优先,然后是NX的IPv6响应,名称parsing成功

SUSE Linux进行比较:

  • SLES 11.3 – 工作(只做IPv4查找) – (glibc-2.11.3-17.54.1)
  • SLES 12.1 – 不工作(glibc-2.19-31.9.x86_64)
  • SLES 12.2 – 正在工作(glibc-2.22-49.16.x86_64.rpm)。 同时进行IPv4和IPv6查询,用NX先接收IPv6响应,而等待下一个IPv4使用。
  • SLES 12.3 – [将于2017年9月发布](?glibc-2.22-51.6.x86_64.rpm?)

/etc/resolv.conf的inet4only选项从未实现, https : //bugzilla.redhat.com/show_bug.cgi?id=1027452