IO::Socket::DNS::Server - Net::DNS::Nameserver personality to handle IO::Socket::DNS client connections.


  use IO::Socket::DNS::Server;

  my $server = new IO::Socket::DNS::Server
    Suffix    => $dns_suffix,
    LocalAddr => \@ips,
    LocalPort => $port,
    Password  => $secret,
    Verbose   => 5,
    IdleTimeout => $timeout,
      or die "Unable to start DNS server";


Listens for DNS queries in order to proxy for use by IO::Socket::DNS clients.


The "new" constructor takes arguments in key-value pairs:

  Suffix        Proxy DNS Suffix               Required.
  SOA           Authoritative IP for Suffix    Defaults to Suffix's authority
  LocalAddr     IP address on which to listen  Defaults to SOA IP
  LocalPort     Port on which to listen.       Defaults to 53.
  NotifyHandler NS_NOTIFY (RFC1996) handler    Optional.
  Password      Access password                <password>
  Verbose       Used for debugging             Defaults to 0 (off).

The "Suffix" argument is really the only requirement. This setting may also be passed via the DNS_SUFFIX environment variable. It must be a domain or subdomain for which queries will authoritatively arrive to the machine running this IO::Socket::DNS::Server software.

The "SOA" argument is the IP that will be provided in the authority records for all relevant DNS responses. If none is provided, then it will attempt to automatically determine this based on Suffix by resolving all its NS entries found in global propagation.

The "LocalAddr" argument may be one IP or an array ref of IP addresses to bind to. This defaults to the SOA IP is none is supplied, instead of the BINY_ANY address that the default Net::DNS::Nameserver uses.

The "NotifyHandler" code ref is the handler for NS_NOTIFY (RFC1996) queries. This is just passed through to Net::DNS::Nameserver, but it is not required.

The "Password" setting is to ensure only approved IO::Socket::DNS clients can connect to this server. Only the first 8 characters are used. This setting may also be passed via the DNS_PASSWORD environment variable. Default is no password.

If "Verbose" is specified, additional diagnostic information will be sent to STDOUT.


  my $server = IO::Socket::DNS::Server->new(
    Suffix    => "",
    SOA       => "",
    LocalAddr => "",
    LocalPort => 5353,
    Password  => "No Geeks",
    Verbose   => 6,
  ) or die "connect: $!";

  $ENV{DNS_SUFFIX} = "";
  my $server = new IO::Socket::DNS::Server;

  # Continuously handle requests


dnsd, Net::DNS::Nameserver, IO::Socket::DNS


Rob Brown, <>


Copyright (C) 2011 by Rob Brown

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.9 or, at your option, any later version of Perl 5 you may have available.