今天在linux服务器下遇到一个奇怪的问题:内网域名的ping结果居然和nslookup结果不一致,特将解决过程记录如下。

  1. 确认/etc/resolv.conf配置是否正确:没问题;

  2. 确认/etc/hosts中是否添加了额外域名:没问题;

  3. 确认域名服务器中正确的内网域名对应的IP,并和同事确认发现内网域名更新过,ping的结果指向了旧的IP,nslookup的解析结果正确;

  4. 确认本地域名缓存服务nscd状态:处于运行中,重启没有解决问题,看起来缓存还是很顽固的;

    # service nscd status

    nscd (pid 30993) is running...

    # service nscd restart

    Stopping nscd:                                        [  OK  ]

    Starting nscd:                                        [  OK  ]

  5. 经google发现nscd的缓存文件清理可以用以下命令清理,运行,问题得以解决。


 # ls /var/db/nscd/

    hosts

  # nscd --invalidate=hosts   或者  nscd -i hosts

  # service nscd restart

  具体请参考https://stijn.tintel.eu/blog/2012/05/10/how-to-really-flush-the-various-nscd-caches 


总结:

  1. linux服务器本地会有域名缓存以加快域名解析,centos下用的是nscd

  2. ping一般会直接使用缓存的域名,nslookup会直接到域名服务器查询