недавно дистрибутив linux, который я использую (недавний gentoo), обновил пакет net-dns до версии 0.74 (с 0.66). с этого времени использование TSIG для запросов и обновлений больше не работает. раньше я использовал:
$resolver = Net::DNS::Resolver->new(...);
$resolver->tsig( $keyname, $key );
# ($key as base64 representation)
or
$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);
приводит к ошибкам «tsig verify failure (BADSIG)» в BIND на стороне сервера.
используя $tsig только для пакетов обновления:
my $update = Net::DNS::Update->new( ... );
$update->sign_tsig($tsig);
также не работает (BADSIG); "более простой" способ
$update->sign_tsig($keyname, $key);
работает.
Как правильно использовать TSIG для как запросов, так и пакетов обновления с объектом преобразователя в Net::DNS >= V0.74?
Версия Perl — 5.18.2.
Что я делаю не так ? - большое спасибо за ваши подсказки.