1. 背景

    1. 公司新部署几台服务器,安装最新的CentOS 6.5操作系统,但当执行ping或dig操作时,等待时间较长,不能忍受,而同网络下的CentOS 5.6系统却正常

    2. 同时在远程登录(SSH)时,也出现卡顿的现象,登录不太流畅

  2. 原理

    1. DNS解析缓慢的原因是CentOS 6/REHL 6 总是需要等待AAAA(IPv6)的结果,即使IPv6已在网络设置中禁用

    2. 出现SSH登录缓慢的问题,可能是“GSSAPIAuthentication认证与UseDNS反向解析”耗费时间导致的


3. 解决方案

    1. 在resolv.conf中添加single-request-reopen选项

      cat /etc/resolv.conf
      # Generated by NetworkManager
      options single-request-reopen
      nameserver 192.168.18.77


      这其实是CentOS 6的一个Bug,可查询到的解释如下:

      The logic behind so long time for DNS resolution lies in fact that resolver use same socket for A(ipv4) and AAAA(IPv6) DNS record resolution. Some hardware mistaking  send one reply and left resolver in waiting mode. Enabling option single-request-reopen will instruct resolver to use new socket if for AAAA if require.
      原因是:CentOS 6中的DNS解析器对于ipv4和ipv6都使用同一个socket接口,在同时发出ipv4和ipv6解析请求后,只会收到一个ipv4的解析响应,此时socket将一处于“等待”模式,等待ipv6的解析响应,故导致解析缓慢;添加single-request-reopen后就可以重新打开一个新的socket接收ipv6的解析响应,而不影响ipv4的解析响应。


      防止修改resolv.conf文件后,重启网络,会导致文件被重置的情况,原因是启用了NetworkManager 服务

      1.创建一个脚本。
      vi /etc/NetworkManager/dispatcher.d/15-resolv
      #!/bin/bash
      # Description : script to override default resolv.conf file
      # with customized file.
      cp -f /etc/resolv.conf.custom /etc/resolv.conf
      2.设置文件权限
      chmod u+x /etc/NetworkManager/dispatcher.d/15-resolv
      3.创建一个文件
      vi /etc/resolv.conf.custom
      options single-request-reopen
      nameserver xx.xx.xx.xx
      4.重启服务
      service NetworkManager restart


      1. 取消GSSAPIAuthentication认证与UseDNS反向解析功能:

        vi /etc/ssh/sshd_config
        GSSAPIAuthentication no
        #通用安全服务应用程序接口(GSSAPI) 是为了让程序能够访问安全服务的一个应用程序接口,取消这个认证。
        UseDNS no
        #DNS反向解析,设置为no


4. 参考资料

   DNS解析缓慢问题

   https://wiki.echocat.org/display/ECHOCAT/2012/04/20/CentOS+6+and+slow+DNS

   http://linuxmantra.com/2013/07/single-request-reopen-option-in-resolv-conf.html

   single-request-reopen的详细解释

   http://www.man7.org/linux/man-pages/man5/resolver.5.html

   防止resolv.conf文件被复写的情况

   http://www.linuxidc.com/Linux/2013-06/85636.htm