Perl Module Net :: DNS - 调用" tsig"解析器对象上的方法导致错误

时间:2015-02-16 10:04:32

标签: perl dns perl-module gentoo

最近我使用的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。

我在做错了什么? - 非常感谢您的提示。

1 个答案:

答案 0 :(得分:2)

Net :: DNS中的TSIG功能在0.74左右完成了重写,此后的大多数版本都对TSIG的某些方面进行了错误修正。我建议您尝试忘记它的工作方式,重新阅读所有相关文档,然后根据需要更改自己的代码。

此外,0.74(在此背景下)相当古老。升级到更接近当前的东西可能是一个好主意(当我写这个时,这是0.82)。