DNS BIND之nsupdate介绍和使用

nsupdate是一个动态DNS更新工具,可以向DNS服务器提交更新记录的请求,它可以从区文件中添加或删除资源记录,而不需要手动进行编辑区文件。
1.使用方法
nsupdate [ -d ] [ [ -y keyname:secret ] [ -k keyfile ] ] [ -v ] [ filename ]
1)参数说明:
-d 调试模式。
-k 从keyfile文件中读取密钥信息。
-y keyname是密钥的名称,secret是以base64编码的密钥。
-v 使用TCP协议进行nsupdate.默认是使用UDP协议。
2)输入格式:
nsupdate可以从终端或文件中读取命令.每个命令一行.一个空行或一个”send”命令,则会将先前输入的命令发送到DNS服务器上.
3)命令格式:
server servername [ port ]
发送请求到servername服务器的port端口.如果不指定servername,nsupdate将把请求发送给当前去的主DNS服务器.
如:
> server 192.168.36.54 53
local address [ port ]
发送nsupdate请求时,使用的本地地址和端口.
zone zonename
指定需要更新的区名.
class classname
指定默认类别.默认的类别是IN.
key name secret
指定所有更新使用的密钥.
prereq nxdomain domain-name
要求domain-name中不存在任何资源记录.
prereq yxdomain domain-name
要求domain-name存在,并且至少包含有一条记录.
prereq nxrrset domain-name [ class ] type
要求domain-name中没有指定类别的资源记录.
prereq yxrrset domain-name [ class ] type
要求存在一条指定的资源记录.类别和domain-name必须存在.
update delete domain-name [ ttl ] [ class ] [ type [ data... ] ]
删除domain-name的资源记录.如果指定了type和data,仅删除匹配的记录.
update add domain-name ttl [ class ] type data…
添加一条资源记录.
show
显示自send命令后,所有的要求信息和更新请求.
send

将要求信息和更新请求发送到DNS服务器.等同于输入一个空行.

2.使用实例
修改named.conf中test.com zone添加
allow-update { any; };

添加记录

./bind/bin/nsupdate
> server 192.168.36.54
> update add nsupdate.test.com 6000 IN A 192.168.0.2
> send
> quit
测试

dig @192.168.36.54 nsupdate.test.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> @192.168.36.54 nsupdate.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39140
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;nsupdate.test.com.             IN      A

;; ANSWER SECTION:
nsupdate.test.com.      6000    IN      A       192.168.0.2

;; AUTHORITY SECTION:
test.com.               86400   IN      NS      dns.test.com.

;; ADDITIONAL SECTION:
dns.test.com.           86400   IN      A       192.168.36.189

;; Query time: 1 msec
;; SERVER: 192.168.36.54#53(192.168.36.54)
;; WHEN: Sat Apr 18 22:21:43 2015
;; MSG SIZE  rcvd: 85
添加成功。

3.通过TSIG key实现nsupdate功能
1、使用dnssec-keygen -a HMAC-MD5 -b 128 -n USER testkey命令来生成密钥。
  dnssec-keygen:用来生成更新密钥。
    -a HMAC-MD5:采用HMAC-MD5加密算法。
    -b 128:生成的密钥长度为128位。
    -n USER testkey:密钥的用户名为testkey。
2、密钥生成后,会在当前目录下自动生成两个密钥文件***.+157+xxx.key和***.+157+xxx.private。
3、查看两个密钥文件的内容:
  cat ***.+157+xxx.key
  cat ***.+157+xxx.private
4、通过同样的方法生成test2key。
5、添加密钥信息到DNS主配置文件中 
6、将test.com区域中的allow-update { none; }中的“none”改成“key testkey”;
  将“none”改成“key testkey”的意思是指明采用“key testkey”作为密钥的用户可以动态更新“test.com”区域。

view"view-test"in{
	match-clients{keytestkey;acl1;};//keytestkey;以及acl1;zone"test.com"{
	type master;
	file "test.zone";
	allow-update{
			keytestkey;
		};
	};
};
实现通过正确的key和acl对两个view进行nsupdate。但bind的acl匹配原则是:"由上而下,匹配即退出",并且match-clients{}中的参数是"or"的关系。当执行nsupdate命令时,执行端(一般都是主dns或管理机)所用的ip地址不应该包含在acl1或者acl2中(最后一个view的match-clients{aclx}可包含也可不包含),否则按照以上原则,执行端主机只能访问包含其ip的view了,其它view的访问都将被拒绝。
按照以上配置运行bind,在bind主机上执行nsupdate,
命令是:nsupdate -y test2key:epYaIl5VMJGRSG4WMeFW5g== (或 -k /etc/test_key)
>zone test.com
>update add abc.test.com 86400 A 192.168.99.100
>send
返回错误结果:update failed: REFUSED
错误分析:执行nsupdate的主机地址包含在acl1中, 进入了view "view-test"执行更新,显然key不匹配,被拒绝。
解决办法:在view "view-test"的match-clients{}中将执行nsupdate主机的地址(bind主机地址)排除掉,
命令:match-clients{ key testkey; !127.0.0.1; !x.x.x.x; acl1;} //x.x.x.x填写bind主机真实ip地址

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值