查看操作系统DNS缓存

OS缓存会参考DNS服务器响应的TTL值,但是不完全等于TTL值。

Windows查看电脑DNS缓存信息的方法

Windows系统默认开启DNS缓存服务,叫做DNSClient,可以缓存一些常用的域名。

ipconfig /displaydns #这个命令可以展示现在你电脑已经缓存的域名

Linux DNS缓存

ubuntu服务器一般默认安装nscd,nscd(Name Service Cache Daemon)是一种能够缓存 passwd、group、hosts 的本地缓存服务,分别对应三个源 /etc/passwd、/etc/hosts、/etc/resolv.conf。其最为明显的作用就是加快 DNS 解析速度,在接口调用频繁的内网环境建议开启。

首先查看nscd服务是否开启

ps -e |grep nscd

nscd 默认配置文件位置 /etc/nscd.conf

## 日志文件
#logfile /var/log/nscd.log
## 调试级别
debug-level 5
## 等待请求的线程数
threads 6
## 最大线程数
max-threads 128
## 运行用户
server-user nscd
paranoia no
## 禁用passwd缓存
enable-cache passwd no
## 禁用group缓存
enable-cache group no
## 启用hosts缓存
enable-cache hosts yes
## 指定缓存命中项的TTL,单位为s
positive-time-to-live hosts 5
## 指定缓存未命中项的TTL,单位为s
negative-time-to-live hosts 20
## 散列表大小
suggested-size hosts 211
## 启用hosts文件的修改情况检查
check-files hosts yes
persistent hosts yes
shared hosts yes
## 最大缓存库大小
max-db-size hosts 33554432

通过service nscd start开启

查看nscd dns缓存列表

想添加dns缓存,可以修改本地hosts 在/etc/hosts,保存

通过下面命令查询,是否缓存到本地dns列表

nscd -f hosts

清除操作系统缓存

在 Windows 上清除/刷新 DNS 缓存

对于所有 Windows 版本,清除 DNS 缓存的过程都是相同的。你需要使用管理员权限打开命令提示符并运行 :

ipconfig /flushdns

在 Linux 上清除/刷新 DNS 缓存

在 Linux 上,除非已安装并运行诸如 Systemd-Resolved,DNSMasq 或 Nscd 之类的缓存服务,否则没有操作系统级 DNS 缓存。根据 Linux 发行版和所使用的缓存服务,清除 DNS 缓存的过程有所不同。

系统化解决

大多数现代 Linux 发行版,例如 Ubuntu 18.04,都使用 systemd 解析的服务来缓存 DNS 条目。

要查找服务是否正在运行,请运行:

systemctl is-active systemd-resolved.service

如果该服务正在运行,则将打印命令 active,否则将看到 inactive。

要清除系统解析的 DNS 缓存,你需要键入以下命令。

systemd-resolve --flush-caches

成功后,该命令不会返回任何消息。

Dnsmasq

Dnsmasq 是轻量级的 DHCP 和 DNS 缓存名称服务器。

如果你的系统使用 DNSMasq 作为缓存服务器,则要清除 DNS 缓存,需要重新启动 Dnsmasq 服务:

systemctl restart dnsmasq.service
#或者
service dnsmasq restart

NSCD

NSCD 是一个缓存守护程序,它是大多数基于 RedHat 的发行版的首选 DNS 缓存系统。

如果系统使用 NSCD 来清除 DNS 缓存,则需要重新启动 NSCD 服务:

清除缓存
1. nscd -i passwd
2. nscd -i group
3. nscd -i hosts
除了上面的方法,重启nscd服务同样可以达到清理cache的目的。
$ sudo systemctl restart nscd.service
或者
$ sudo service nscd restart

在 MacOS 上清除/刷新 DNS 缓存

根据你所运行的版本,在 MacOS 中刷新缓存的命令略有不同。该命令必须以具有系统管理员特权的用户(sudo 用户)身份运行。

要清除 MacOS 中的 DNS 缓存,请执行以下步骤:

  1. 打开查找器。
  2. 转到应用程序>实用程序>终端。这将打开终端窗口。
  3. 在命令行中,输入以下行,然后按回车:
sudo killall -HUP mDNSResponder

输入你的 sudo 密码,然后再次按回车。成功后,系统不会返回任何消息。

对于早期版本的 MacOS,刷新缓存的命令不同。

  • MacOS 版本 10.11 和 10.9
$ sudo dscacheutil -flushcache
$ sudo killall -HUP mDNSResponder
  • MacOS 版本 10.10
$ sudo discoveryutil mdnsflushcache
$ sudo discoveryutil udnsflushcaches
  • MacOS 版本 10.6 和 10.5
$ sudo dscacheutil -flushcache