如何在Linux上刷新DNS缓存(对于systemd-resolved,BIND,Dnsmasq或nscd)

本文介绍如何在Linux上刷新(清除)DNS缓存。它描述了使用systemd解析系统的系统(例如Ubuntu 18.04或更高版本),以及使用nscd,BIND或Dnsmasq缓存DNS查询的系统。
DNS或域名系统类似于Internet电话簿,并将人类友好的计算机主机名转换为IP地址。例如 google.com 翻译成 216.58.214.238 IPv4地址,以及 2a00:1450:400d:808::200e IPv6地址。这样,域名可以更改其IP地址,而不会影响用户或更改名称。
DNS缓存(或DNS解析器缓存)是一个临时数据库,用于存储这些记录,并在您尝试访问时用于快速查找网站。
如果缓存了DNS,则可能无法访问最近更改的主机名-在更新或清除DNS缓存之前,刷新/清除DNS缓存可能很有用。清除DNS缓存后,将从为网络设置的DNS服务器获得一个新地址。系统解析 网络名称解析管理器。实现缓存和验证DNS / DNSSEC存根解析器,LLMNR和MulticastDNS解析器和响应器。
默认情况下,systemd-resolved用于许多Linux发行版的最新版本,包括Ubuntu,Linux Mint和Fedora。
不确定您的系统是否使用systemd-resolved?用途:

systemctl is-active systemd-resolved

该命令返回时 active,系统处于活动状态,并且启用了systemd-resolved。在其他情况下(例如: inactive)表示系统中未使用systemd-resolved。如果您使用的是systemd-resolved,请刷新DNS缓存。

sudo systemd-resolve --flush-caches

使用以下命令检查DNS缓存:

systemd-resolve --statistics

Current Cache Size 您正在寻找的价值。如果 0,刷新DNS缓存。
输出示例(缓存大小为0,因为它是在刷新DNS缓存后立即执行的):

$ systemd-resolve --statistics
DNSSEC supported by current servers: no

Transactions
Current Transactions: 0
  Total Transactions: 5538

Cache
  Current Cache Size: 0
          Cache Hits: 3482
        Cache Misses: 2096

DNSSEC Verdicts
              Secure: 0
            Insecure: 0
               Bogus: 0
       Indeterminate: 0

使用BIND时如何刷新DNS缓存

“命名”可以充当一个或多个特定域的权威名称服务器,通常充当DNS系统的递归解析器,并充当缓存DNS服务器。 Bind具有三个主要修订版本,BIND4和BIND8在技术上已过时,BIND9是受支持的版本,并且除了其他功能和增强功能之外,还具有DNSSEC。
要检查BIND(服务名称为“命名”)在您的系统上是否处于活动状态(请注意,在大多数情况下,只有在您明确安装并启用它后,它才会处于活动状态):可以的

systemctl is-active named

什么时候 active 当此命令返回时,表示该服务在系统上处于活动状态。
在较旧的系统或没有systemd的系统上,您可以使用以下方法检查服务的状态:

service named status

要刷新BIND(命名)DNS缓存,请使用:

sudo rndc flush

对于BIND,检查DNS缓存是否已清除会更加复杂。刷新DNS缓存后,执行以下命令以转储缓存:

sudo rndc dumpdb -cache

缓存文件现已保存 /var/named/data/cache_dump.db。您可以将此文件作为根查看,以查看是否有任何缓存的DNS条目。

sudo cat /var/named/data/cache_dump.db

如果刷新了缓存(如果未缓存DNS条目),则文件将如下所示:

$ sudo cat /var/named/data/cache_dump.db 

;
; Start view _default
;
;
; Cache dump of view '_default' (cache _default)
;
$DATE 20190711141232
;
; Address database dump
;
; [edns success/4096 timeout/1432 timeout/1232 timeout/512 timeout]
; [plain success/timeout]
;
;
; Unassociated entries
;
;
; Bad cache
;

如果DNS高速缓存包含类似于以下内容的条目,则不会刷新该高速缓存:

102397 IN DNSKEY 256 3 8 (
  AwEAAeVDC34GZILwsQJy97K6Fst4P3XYZrXL
  yrkausYzStEjSUulgh+iLgHg0y7FIF890+sI
  jXsk7KLJUmCOWfYWPorNKEOKLk5Zx/4M6D3I
  HZE3O3m/Eahrc28qQzmTLxiMZAW65MvR2UO3
  LxVtYOPBEBiDgAQA47x2JLsJYtavCzNL5WiU
  k59OgvHmDqmcC7VXYBhK8V8Tic089XJgExGe
  plKWUt9yyc31ra1swJX51XsOaQz17+vyLVH8
  AZP26KvKFiZeoRbaq6vl+hc8HQnI2ug5rA2z
  oz3MsSQBvP1f/HvqsWxLqwXXKyDD1QM639U+
  XzVB8CYigyscRP22QFnwKIU=
  ) ; ZSK; alg = RSASHA256 ; key id = 25266

使用Dnsmasq时如何刷新DNS缓存

Dnsmasq 可用作DNS缓存服务器的DNS转发器和DHCP服务器。
要确定dnsmasq在系统上是否处于活动状态,可以执行以下操作:

systemctl is-active dnsmasq

什么时候 active 当此命令返回时,表示该服务在系统上处于活动状态。
在较旧的系统或没有systemd的系统上,您可以使用以下方法检查服务状态:

service dnsmasq status

要在使用Dnsmasq时刷新DNS缓存,请重新启动服务。

sudo systemctl restart dnsmasq

在较旧的系统或没有systemd的系统上,使用以下命令刷新Dnsmasq的DNS缓存:

sudo service dnsmasq restart

无法找出dnsmasq是否已刷新。

使用nscd时如何刷新DNS缓存

光盘 名称服务缓存守护程序。
要检查nscd在您的系统上是否处于活动状态(请注意,在大多数情况下,只有在您明确安装并启用nscd后,它将处于活动状态),您可以执行以下操作:

systemctl is-active nscd

如果此命令返回“ active”,则表示该服务在系统上处于活动状态。
在较旧的系统或没有systemd的系统上,您可以使用以下方法检查服务状态:

service nscd status

在大多数指南中在线都提到了重新启动nscd服务,但实际上并不会刷新DNS缓存,因为文件仍在存储中 /var/db/nscd重新启动nscd服务后使用。您真正想刷新nscd DNS缓存的操作 禁用 要在使用nscd时使主机缓存无效(刷新DNS主机缓存),请使用:

sudo nscd --invalidate=hosts

要检查DNS缓存是否已刷新:

sudo nscd -g

并查看“主机”部分(如果启用了多个),则应显示 0 作为价值 used data pool size DNS缓存已刷新。随着使用DNS访问各种主机名/域名而逐渐增加。
示例输出(刷新DNS缓存后):

$ sudo nscd -g
nscd configuration:

              0  server debug level
         1m  5s  server runtime
              5  current number of threads
             32  maximum number of threads
              0  number of times clients had to wait
             no  paranoia mode enabled
           3600  restart internal
              5  reload count
.......................................
hosts cache:

            yes  cache is enabled
            yes  cache is persistent
            yes  cache is shared
            211  suggested size
         216064  total data pool size
              0  used data pool size
           3600  seconds time to live for positive entries
             20  seconds time to live for negative entries
              0  cache hits on positive entries
              0  cache hits on negative entries
              5  cache misses on positive entries
......................................
Sidebar