最近我使用的linux发行版(最近的gentoo) 将net-dns软件包升级到版本0.74(从0.66)。 从这时起在查询和更新中使用TSIG 不再起作用了。 前我用过:
$resolver = Net::DNS::Resolver->new(...);
$resolver->tsig( $keyname, $key );
# ($key as base64 representation)
或
$resolver->tsig( Net::DNS::RR->new( "$keyname TSIG $key" ) );
现在调用tsig会产生一个问题:
"zone file representation not defined for TSIG at /usr/lib/perl5/vendor_perl/5.18.2/i686-linux/Net/DNS/RR.pm line 683."
根据http://search.cpan.org/~nlnetlabs/Net-DNS-0.74/lib/Net/DNS/Resolver.pm#tsig
tsig() - Get or set the TSIG record used to automatically sign outgoing queries and updates.
我对tsig()的使用应该是正确的。
使用另一种方法预先创建tsig RR-Object:
my $tsig = Net::DNS::RR->new( type => "TSIG", name => "KEYNAME", key => "KEY" );
$resolver->tsig($tsig);
导致服务器端BIND的“tsig verify failure(BADSIG)”错误。
仅使用$ tsig更新数据包:
my $update = Net::DNS::Update->new( ... );
$update->sign_tsig($tsig);
也行不通(BADSIG); '更简单'的方式
$update->sign_tsig($keyname, $key);
确实有效。
在Net :: DNS> = V0.74中使用解析器对象 查询和更新数据包的TSIG使用TSIG的正确方法是什么?
Perl版本是5.18.2。
我在做错了什么? - 非常感谢您的提示。答案 0 :(得分:2)
Net :: DNS中的TSIG功能在0.74左右完成了重写,此后的大多数版本都对TSIG的某些方面进行了错误修正。我建议您尝试忘记它的工作方式,重新阅读所有相关文档,然后根据需要更改自己的代码。
此外,0.74(在此背景下)相当古老。升级到更接近当前的东西可能是一个好主意(当我写这个时,这是0.82)。