我正在尝试使用Python的dns.update进行简单的DNS更新。但是,每次我运行脚本时,都会得到“ rcode REFUSED” 。我尝试了一系列不同的排列,但似乎无法弄清楚我要去哪里。我可以直接将此键与nsupdates一起使用并进行更改。
我正在Python 2.7上运行
我的钥匙是这样
key test.testdomain.com. {
algorithm HMAC-MD5;
secret "5MbEv7VrELN7ztkNMGSUvfimpoLAEzdmDzAHE9X4ax0ZDxiYnz1rkIx29SQru2AHQ3XbRBHmY7EQ/xD/2FocCA==";
};
这是我的代码,为了进行故障排除,我将所有内容都进行了硬编码。
import sys
import dns.update
import dns.query
import dns.tsigkeyring
import dns.resolver
def main():
UpdateDNS()
####################################################################################################################
def UpdateDNS():
# set zone and dnsserver
zone = 'testdomain.com'
dnshostname = 'dns-test.testdomain.com'
keyring = dns.tsigkeyring.from_text ({'test.testdomain.com.' : '5MbEv7VrELN7ztkNMGSUvfimpoLAEzdmDzAHE9X4ax0ZDxiYnz1rkIx29SQru2AHQ3XbRBHmY7EQ/xD/2FocCA=='})
update = dns.update.Update(zone, keyring = keyring, keyalgorithm = 'hmac-md5.sig-alg.reg.int')
update.add('foo.testdomain.com', 8600, 'A', '179.33.72.36')
response = dns.query.tcp(update, 'dns-test.testdomain.com')
print response
#########################################################
# Main
#########################################################
if __name__ == '__main__':
main()
这是我的答复
x1c\x08'}
id 45721
opcode UPDATE
rcode REFUSED
flags QR RA
;ZONE
testdomain.com. IN SOA
;PREREQ
;UPDATE
;ADDITIONAL
答案 0 :(得分:0)
通常,您的代码对我来说看起来不错。我刚刚在我的名称服务器上测试了基本上相同的代码,它的工作原理就像一个魅力。
您是否允许将TSIG密钥更新到您要更新的区域?在您的绑定配置中应该有类似这样的内容(可能是您编写时可以手动使用密钥,但只是为了确保这一点):
zone "testdomain.com" IN {
type master;
[...]
allow-update {
key "test.testdomain.com.";
};
};
运行更新脚本时,名称服务器日志怎么说?通常,应该有拒绝更新的原因:
view internal: signer "test-key" denied
view internal: request has invalid signature: TSIG test-key: tsig verify failure (BADKEY)
前者表示不允许密钥更新区域,后者表示密钥本身未被接受(尽管这也会在运行代码时导致异常)。