Linux DNS缓存相关

DNS缓存相关

bind-utils

bind是linux系统下的一个DNS服务程序.bind-utils是bind软件提供的一组DNS工具包,里面有一些DNS相关的工具.主要有:dig,host,nslookup,nsupdate.使用这些工具可以进行域名解析和DNS调试工作.

#安装
yum install bind-utils-9.11.4-26.P2.el7_9.9.x86_64 -y
dig
#dig参数
#      dig  [  @server ]  [ -b address ]  [ -c class ]  [ -f filename ]  [ -k       filename ]  [ -p port# ]  [ -t type ]  [ -x addr ]  [ -y name:key ]  [
       name ]  [ type ]  [ class ]  [ queryopt... ]
       dig [ -h ]
       dig [ global-queryopt... ]  [ query... ]
       
-b    设置查询时所使用的源IP地址.这个必须是一个本地主机网络接口上的地址.
-c    Internet上的DNS服务器,大部分是拒绝使用-c进行查询的.这个值可以是CH,HS等.
-f    使用批处理模式从文件中读取一个需要查询的列表.
-p    指定一个DNS服务器的端口,不使用-p选项,则使用默认端口53.
-t    设置查询类型.默认为A类型查询.
-x    反向查询.使用这个选项时,不需要提供name,class,type参数.dig会自动设置这些参数.

#查询选项:
    dig提供了一些开关式的查询选项,用于设置查询方法和查询结果的输出.
+[no]tcp		查询时,是否使用TCP协议.默认情况下是使用UDP协议.
+[no]ignore		是否忽略设置有"截头"位的UDP回应包.若设置为不忽略,将使用TCP协议进行重试.
+domain=somename	设置一个包含域名的搜索列表,就像在/etc/resolv.conf文件中指定的一样.
+[no]search		是否使用搜索列表.默认不使用搜索列表.
+[no]adflag		是否在查询中设置AD(可信数据)位.
+[no]cdflag		是否在查询中设置CD(禁止检查)位.这个需要服务器不进行回应的DNSSEC确认.
+[no]recurse		在查询中设置RD(递归)位.默认情况下是设置有这个标志.表示dig正常情况下会进行一个递归查询.当使用+nssearch或+trace时,这个选项将自动被禁用.
+[no]nssearch		设置这个选项后,dig将在权威DNS服务器中查找结果.然后显示每个DNS服务器的SOA记录.
+[no]trace		设置轨迹查询.即从根服务器开始追踪一个域名的解析过程.此选项默认是禁用的.打开此选项后,dig将反复对name进行查询.它将从根服务器开始,显示每一个服务器回答.
+[no]cmd		设置是否打印初始化注释.默认是打开的.
+[no]short		设置是否简化输出.默认是详细的输出.
+[no]identify		在启用short选项后,是否显示IP地址和端口号.在short选项启用后,默认是不显示IP地址和端口号的.
+[no]comments		是否输出注释行.默认是输出注释行.
+[no]stats		是否输出统计列表.默认是输出统计列表.
+[no]qr		是否输出发送出的查询内容.默认是不打印.
+[no]question		在输出中是否打印"提问部分".默认是打印"提问部分".
+[no]answer		在输出中是否打印"回答部分".默认是打印"回答部分".
+[no]authority	在输出中是否打印"权威部分".默认是打印"权威部分".
+[no]additional	在输出中是否打印"附加部分".默认是打印"附加部分".
+[no]all		设置或取消所有标记设置.
+time=T		设置查询的超时时间.默认超时是5秒.
+tries=T		设置UDP查询的重试次数.默认是3.
+[no]multiline	设置是否多行输出.默认每个记录一行.
+[no]fail		是否在接收到一个错误后,尝试下一个服务器.
+[no]besteffort	是否显示信息的摘要.默认是不显示.
dig使用
#查看当前使用dns
dig | grep SERVER
;; SERVER: 8.8.8.8#53(8.8.8.8)
#查看百度服务器
# dig baidu.com ns

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> baidu.com ns
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38239
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;baidu.com.			IN	NS

;; ANSWER SECTION:
baidu.com.		21600	IN	NS	ns4.baidu.com.
baidu.com.		21600	IN	NS	ns3.baidu.com.
baidu.com.		21600	IN	NS	ns2.baidu.com.
baidu.com.		21600	IN	NS	ns7.baidu.com.
baidu.com.		21600	IN	NS	dns.baidu.com.

;; Query time: 28 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 一 815 08:58:34 CST 2022
;; MSG SIZE  rcvd: 128
#其中21599为 TTL,即 DNS 缓存刷新时间,单位为 s ,NS 就是这次查询的类型。

示例:
<code>
# dig @172.23.3.1 www.baidu.com A
nslookup
#nslookup语法
nslookup –option1 –option2 host-to-find dns-server

#-querytype 和 -type 的效用一致,可以简写为 -q 和 -ty,其在不指定类型的情况下默认查询类型为 A
非交互模式: nslookup -ty=类型 name
交互模式: set ty=类型
#PTR 反向DNS解析(8.8.8.8)
nslookup -ty=ptr 8.8.8.8
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
8.8.8.8.in-addr.arpa	name = dns.google.

Authoritative answers can be found from

#查看百度服务器
> baidu.com
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
baidu.com	nameserver = dns.baidu.com.
baidu.com	nameserver = ns2.baidu.com.
baidu.com	nameserver = ns4.baidu.com.
baidu.com	nameserver = ns3.baidu.com.
baidu.com	nameserver = ns7.baidu.com.

Authoritative answers can be found from:
host
       host  [  -aCdlnrTwv ]  [ -c class ]  [ -N ndots ]  [ -R number ]  [ -t
       type ]  [ -W wait ]  name [ server ]

name	需要解析的域名.可以是以"."分隔的IPv4地址,也可以是":"分隔的IPv6地址.
server	DNS服务器的域名或IP地址.这是个可选项.指定此选项后,将会忽略/etc/resolv.conf中的设置.
-a	等同于-v -t选项.
-C	显示SOA记录.
-c	指定一个查询类别.默认是IN类别.
-d,-v	详细输出方式.
-n	对IPv6的IP地址进行反解析.
-R	一次查询中UDP协议的重试次数.默认为1.
-r	禁用递归查询.
-T	在查询中使用TCP协议.host默认使用UDP协议进行查询.
-t	用来指定查询类型.类型可以是CNAME,NS,SOA,SIG,KEY,AXFR等.默认是查询A类型记录.
-W	设置等待查询结果的时间,单位为秒.
-w	设置等待查询结果.等待时间取决于硬件能够记录的最大数值.
nscd
yum install -y nscd
#nscd语法
用法: nscd [选项...]
Name Service Cache Daemon.
 
-d, --debug Do not fork and display messages on the current
tty
-f, --config-file=名称 从NAME中读取配置数据
-g, --statistics Print current configuration statistics
-i, --invalidate=TABLE Invalidate the specified cache
-K, --shutdown 关闭服务器
-t, --nthreads=NUMBER 启动 NUMBER 个线程
-?, --help 给出该系统求助列表
--usage 给出简要的用法信息     
NSCD配置文件
      NSCD配置文件为/etc/nscd.conf,NSCD程序在启动的时候会读取/etc/nscd.conf文件,每一行指定一个属性和对应的值,或者指定一个服务和对应的值,#表示注释。有效的服务设定是:passwd, group, hosts, services, or netgroup五个。
      
NSCD配置文件相关参数解释

#设置日志文件
logfile debug-file-name
 
#设置debug记录的级别,默认是0
debug-level value
 
#程序启动时,等待进去请求的处理线程数,至少5个
threads number
 
#最大线程数,默认32
max-threads number
 
#nscd程序以哪个用户运行,如果设置了该选项,nscd将作为该用户运行,
#而不是作为root。如果每个用户都使用一个单独的缓存(-S参数),将忽略该选项。
server-user user
 
#哪个用户可以请求统计用户
stat-user user
 
#在一个缓存项被删除之前允许使用的次数,默认是5
reload-count unlimited | number
 
#是否启用偏执模式,启用会导致nscd周期性重启,默认是no
paranoia <yes|no>
 
#如果启用偏执模式,设置的定期重启nscd的时间间隔,默认是3600秒
restart-interval time
 
#开启或者关闭服务缓存,默认是no
enable-cache service <yes|no>
 
#为成功请求的元素设置缓存TTL,单位是秒,值越大缓存命中率越高,
#降低平均响应时间,但会增加缓存的一致性问题
positive-time-to-live service value
 
#为失败查询元素设置缓存TTL,单位是秒,应保持小值,减小缓存一致性问题
negative-time-to-live service value
 
#内部的散列表大小,value应该保持一个素数以达到优化效果。默认值是211
suggested-size service value
 
#启用或者禁用检查文件是否属于指定的服务,这些文件是/etc/passwd、/etc/group、
#/etc/hosts、/etc/services、/etc/netgroup等
check-files service <yes|no>
 
#设置缓存在服务器重启后,仍旧能提供缓存服务,在使用偏执模式时有用,默认是no
persistent service <yes|no>
 
#为客户端共享nscd数据库在内存中做的映射,使客户端可以直接搜索,
#而不用每次都查询守护进行,默认是no
shared service <yes|no>
 
#该数据库的最大大小,单位是bytes,默认是33554432
max-db-size service bytes
 
#此选项仅使用于passwd和group服务
auto-propagate service <yes|no>
配置
$ vim /etc/nscd.conf
 
logfile /var/log/nscd.log
threads 5
max-threads 32
server-user nscd
debug-level 0
paranoia no
enable-cache hosts yes
enable-cache passwd no
enable-cache group no
positive-time-to-live hosts 60
negative-time-to-live hosts 20
suggested-size hosts 211
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432
启动NSCD进程

默认该服务在Redhat或Centos下是关闭的,可以通过以下指令开启

$ service nscd start
查看进程,如下所示
$ ps aux | grep nscdnscd 1284 0.1 0.3 708056 1580 ? Ssl 23:37 0:00 /usr/sbin/nscd
NSCD服务查看和清除

NSCD缓存DB文件在/var/db/nscd下。可以通过nscd -g查看统计的信息,这里列出部分:

nscd -g
#查看状态 | 停止 | 启动 | 重启
systemctl status | stop | start | restart nscd.service
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值