在很多大的网络中为了简化维护量,都使用了DHCP来动态分配IP地址。这样就要求DNS也能够动态的添加和删除记录。BIND 8和9就支持DNS动态更新机制。
主DNS和辅DNS在处理收到的动态更新记录是有区别的,辅DNS在收到更新消息的时候,由于它不是该区的主DNS,它就会将这个更新消息转发给它的主DNS,这称作“更新转发”。而主DNS当然就简单地做更新而已。
如何来创建动态更新消息呢?第一种是用软件编程方式,采用ns_update()解析器例程来创建。第二种则是用命令行程序nsupdate命令手工创建。这里主要讲一下第二种,命令格式如下:
prereq yxrrset domain name type
prereq nxrrset domain name type
prereq yxdomain domain name
prereq nxdomain domain name
update delete domain name [type] [rdata]
update add domain name ttl [class] type rdata
看起来似乎挺复杂,其实很容易。prereq 表示预先必须符合的条件,yxrrset表示存在记录,nxrrset表示不存在记录,而yxdomain则表示存在域名了。例如:
# nsupdate
>prereq nxdomain www.xmgd.com.
>update add www.xmgd.com. 600 A 210.52.83.228
>
这个例子告诉服务器只有在域名不存在时才对域名 www.xmgd.com 添加一个地址。注意最后一个空行表示nsupdate发送这个更新消息。
# nsupdate
>prereq yxrrset xmgd.com. MX
>update delete xmgd.com. MX
>update add xmgd.com. 600 MX 10 mail.xmgd.com.
>update add xmgd.com. 600 MX 50 pop.xmgd.com.
>
这个例子告诉服务器检查服务器是否有xmgd.com.的MX记录,如果有的话就删除原有的MX记录,重新添加两个。
如何来限制动态更新呢?我们可以使用allow-update参数来限制动态更新,如:
zone “xmgd.com” {
type master
file "zone.xmgd.com"
allow-update { x.x.x.x}// IP 地址
}
不过,要注意的是如果我们允许从辅DNS向主DNS进行地址更新,那么任何人只要向辅DNS发送更新消息,经过转发更新也能进行原本不能进行的动态更新,如何防止这一点呢?可以在辅DNS上使用allow-update-forwarding参数来做转发更新的限制,如:
zone “xmgd.com” {
type slave
file "zone.xmgd.com"
allow-update-forwarding { x.x.x.x}// IP 地址
}
Linux下DNS缓存实现通常有两种方式:一种是用DNS缓存程序NSCD(name service cache daemon)负责管理DNS缓存。
一种实现DNS缓存则是用Bind来架设Caching Name Server来实现。
如果是清除NSCD上的Cache,可重新启动NSCD服务来达成清除DNS Cache的效果。用这个命令:
# service nscd restart
或是
#/etc/init.d/nscd restart
如果是清除BIND服务器上的CACHE,用这个命令:
# rndc flush
如果你的DNS服务器是用dnsmasq实现的,用下面这个命令:
$ sudo /etc/init.d/dnsmasq restart
注:DNSmasq是一个轻巧的,容易使用的DNS服务工具,它可以应用在内部网和Internet连接的时候的IP地址NAT转换,也可以用做小型网络的DNS服务。
用“WIN +R”快捷键打开运行窗口,输入“cmd”命令,进行命令行窗口。
在命令行窗口输入“ipconfig /flushdns”执行,刷新本地的DNS缓存数据。
如果在执行“ipconfig /flushdns”时,出现下图所示的“无法刷新DNS解析缓存”的错误,一般是本地的“DNS Client”服务没有正常启动。
在命令行窗口输入“services.msc”,或者通过“控制面板”-》“管理工具”-》“服务”,进入服务管理窗口。启动“DNS Client”服务后,再在命令行窗口执行“ipconfig /flushdns”命令,就能成功刷新本地的DNS缓存了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)