如何在CentOS中刷新本地DNS缓存


20

我正在寻找一种刷新CentOS 6上的本地DNS缓存的方法。

系统没有运行任何DNS服务器或任何其他设备,我希望让每个DNS查询都可以访问配置的名称服务器,即使是重复的名称服务器也是如此。

我在网上找到的大多数内容都告诉我去做service nscd restart,重新加载或去做nscd -i hosts。但是,似乎没有人刷新缓存。

因此,我想知道是否有人对我如何做到这一点有所了解。我需要翻转内核中的某种开关吗?任何解决方法都可以。


您正在做什么检查缓存是否已刷新?
约翰

好的,这有点复杂,我的系统上有一个程序在端口53上侦听并以某种方式转发DNS查询,还有一个使用localhost作为“ DNS服务器”的http代理;在第一个查询(例如wget -e 'http_proxy=localhost:3128' xxx.com)上,我可以看到查询已正确转发,但是所有后续查询都没有正确转发。如果我等待足够长的时间(缓存过期),那么它将再次起作用。
zee 2013年

而且我还配置了代理(鱿鱼)不缓存任何对象,所以我认为这是系统仍然以某种方式缓存答案的原因
zee 2013年

1
nscd -i主机->每次都能工作。我连续3次重新启动nscd,但它不想清除缓存。
丹妮

nscd在CentOS 7 Minimum中似乎不是什么东西。我知道这个问题叫CentOS 6,但标题通常叫CentOS。CentOS 7的方式是什么?
pipe_tape_coder

Answers:


11

缓存DNS请求的不是您的本地机器,而是缓存/etc/resolv.conf谁使用的DNS解析器。

为防止获取那些缓存的查询,请回复:

  1. 更换旋转变压器。

    $ dig @<resolve-ip> www.google.com

  2. 如果可以访问DNS服务器,请刷新解析器上的DNS缓存。

    $ sudo /etc/init.d/bind restart


嗯,但是我已经dns_nameservers 127.0.0.1在代理配置文件中设置了,并且侦听器仅将查询转发到预配置的名称服务器,难道甚至没有查询resolv.conf的情况?
zee 2013年

4
“ bash:/etc/init.d/bind:没有这样的文件或目录”,OP的方法为“无法重新启动nscd.service:单元nscd.service无法加载:没有这样的文件或目录。” 我想这些已经被移动/更改了。他们为什么不能只保留可以正常工作的东西,或者至少保留别名?变得很糟糕,必须成为OS专家才能简单地使用Linux-box。当您必须在每个发行版中重新学习操作系统时,情况更糟。
JosephK

3

即使刷新或刷新了客户端计算机上的DNS缓存(如果它不起作用)之后,如果您的服务器或客户端计算机被绑定到任何NIS服务器(如果是的话),则将“主机:文件dns dns”更改为“主机:文件dns nis” /etc/nsswitch.conf文件中的条目,还需要在NIS主服务器主机列表中更改IP地址。


这导致了我的解决方案。在/ etc / hosts内部是以前静态配置的旧ip地址。我前一段时间做过的事情。删除该行(或替换为新的ip)解决了该问题,并允许我使用其主机名ping我的机器。
保罗

3

我几乎可以肯定这不是系统缓存响应-该部分(系统缓存)仅由nscd守护程序处理。重新启动(或完全停止)该守护程序会重置或消除名称服务请求响应的OS缓存。

我将提供两种可能性,尽管您在端口53上设置的自定义侦听器会极大地混淆水域:

  • A)您的系统正在向上游发出查询,但是直接上游名称解析器根据其设置或记录的TTL来缓存响应。
  • B)您的自定义侦听器在内部缓存响应,并且在缓存时间到期之前再次被询问时,将响应立即返回给系统。

感谢您的输入,但是侦听器除了转发查询和响应外什么也不做,毕竟只不过是200行代码。所以不应该是第二种情况。监听器也在打印接收到的所有内容,因此我确定它确实没有得到任何东西:
zee 2013年
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.