pdnsd - dns proxy daemon
pdnsd [-h] [-V] [-s] [-d] [-g] [-t] [-p file] [-vn] [-mxx] [-c file]
[-4] [-6] [-a]
This man page is an extract of the documentation of pdnsd. For
complete, current documentation, refer to the HTML (or plain text)
documentation (which you can find in the doc/ subdirectory of the
source or in a standard documentation directory, typically
/usr/share/doc/pdnsd/ if you are using a binary package).
pdnsd is a IPv6 capable proxy domain name server (DNS) which saves the
contents of its DNS cache to the disk on exit.
-4 enables IPv4 support. IPv6 support is automatically
disabled (should it be available). On by default.
-6 enables IPv6 support. IPv4 support is automatically
disabled (should it be available). Off by default.
-a With this option, pdnsd will try to detect automatically
if the system supports IPv6, and fall back to IPv4
-V or --version
Print version information and exit.
-c FILE or --config-file=FILE
specifies that configuration is to be read from FILE.
Default is /etc/pdnsd.conf.
-d or --daemon
Start pdnsd in daemon mode (as a background process).
-g or --debug
Print some debug messages on the console or to the file
pdnsd.debug in your cache directory (in daemon mode).
-h or --help
Print an option summary and exit.
-i PREFIX or --ipv4_6_prefix=PREFIX
specifies the prefix pdnsd uses (when running in IPv6
mode) to map IPv4 addresses in the configuration file to
IPv6 addresses. Must be a valid IPv6 address. Default is
writes the pid the server runs as to the specified
filename. Works only in daemon mode.
Print the user pdnsd will run as and exit.
-s or --status
enables the status control socket. Either this option
should be passed to the command line or status_ctl=on;
should be specified in the config file if you want to use
pdnsd-ctl(8) to control pdnsd at runtime.
-t or --tcp
enables the TCP server thread. pdnsd will then serve TCP
and UDP queries.
-vn sets the verbosity of pdnsd. n is a numeric argument
between 0 (normal operation) to 3 (many messages for
-mxx sets the query method pdnsd uses. Possible values for xx
uo - pdnsd will use UDP only. This is the fastest method,
and should be supported by all name servers on the
to - pdnsd will use TCP only. TCP queries usually take
more time than UDP queries, but are more secure against
certain attacks, where an attacker tries to guess your
query id and to send forged answers. TCP queries are not
supported by some name servers.
tu - pdnsd will try to use TCP, and will fall back to UDP
if its connection is refused or times out.
ut - pdnsd will try to use UDP, and will repeat the query
using TCP if the UDP reply was truncated (i.e. the tc bit
is set). This is the behaviour recommended by the DNS
Additionally, "no" can be prepended to the --status, --daemon,
--debug and --tcp options (e.g. --notcp) to reverse their
pdnsd is usually run from a startup script. For pdnsd to work, You need
1. Tell your system to use pdnsd as the primary DNS server by
2. Tell pdnsd to use an authentic source for DNS records, by
including the IP addresses of one or more DNS servers, usually
your ISP’s DNS servers, in /etc/pdnsd.conf.
For this, put the following line in your /etc/resolv.conf
where X can be any number. (I use 3). Comment out all other entries.
You should put the same value in the server_ip= line in global section
If you want to use pdnsd as the DNS server for a small local network,
you should use the IP address or name of the interface connected to
this network instead of 127.0.0.X.
To tell pdnsd where to get DNS information from, add the following
lines in /etc/pdnsd.conf:-
Note the opening and closing braces. Add more such server sections for
each set of DNS servers you want pdnsd to query. Of course the
configuration options shown here are just examples. More examples can
be found in /etc/pdnsd.conf.sample or the pdnsd.conf in the
documentation directory. See the pdnsd.conf(5) man page for all the
possible options and their exact meaning.
If you use a dial up connection, remember that ppp scripts usually
replace /etc/resolv.conf when connection with the ISP is established.
You need to configure ppp (or whatever you use to establish a
connection) so that /etc/resolv.conf is not replaced every time a
connection is established. Read the documentation for the scripts run
when your network comes up.
If you use pppconfig, specify ‘none’ in the ‘nameservers’ option in
the ‘advanced’ tab. If you use multiple ISPs, you should do this for
If you use multiple ISPs, you should tell pdnsd which DNS servers have
become available by calling pdnsd-ctl, the pdnsd control utility, in a
script (e.g. /etc/ppp/ip-up when you use pppd) that is run when the
connection is established. If the addresses of the DNS servers are
obtained through some type of dynamic configuration protocol (e.g. pppd
with the usepeerdns option or a DHCP client), you can pass the DNS
server addresses as an extra argument to pdnsd-ctl to configure pdnsd
at run time. See the pdnsd-ctl(8) man page for details.
/etc/pdnsd.conf is the pdnsd configuration file. The file format and
configuration options are described in the pdnsd.conf(5) man page. You
can find examples of almost all options in /etc/pdnsd.conf.sample.
/var/cache/pdnsd/pdnsd.status is the status control socket, which must
be enabled before you can use pdnsd-ctl.
/etc/init.d/pdnsd (the name and location of the start-up script may be
different depending on your distribution.)
/etc/defaults/pdnsd contains additional parameters or options which may
be passed to pdnsd at boot time. This saves the hassle of fiddling with
initscripts (not available on all distributions).
The verbosity option -vn presently does not seem to have much effect on
the amount of debug output.
Report any remaining bugs to the authors.
pdnsd should comply with RFCs 1034 and 1035. As of version 1.0.0, RFC
compliance has been improved and pdnsd is now believed (or hoped?) to
be fully RFC compatible. It completely follows RFC 2181 (except for one
minor issue in the FreeBSD port, see the documentation).
It does NOT support the following features, of which most are marked
optional, experimental or obsolete in these RFCs:
· Inverse queries
· Status queries
· Completion queries
· Namespaces other than IN (Internet)
· AXFR and IXFR queries (whole zone transfers); since pdnsd does
not maintain zones, that should not violate the standard
The following record types, that are extensions to the original DNS
standard, are supported if given as options at compile time. (if you do
not need them, you do not need to compile support for them into pdnsd
and save cache and executable space):
· RP (responsible person, RFC 1183)
· AFSDB (AFS database location, RFC 1183)
· X25 (X25 address, RFC 1183)
· ISDN (ISDN number/address, RFC 1183)
· RT (route through, RFC 1183)
· NSAP (Network Service Access Protocol address , RFC 1348)
· PX (X.400/RFC822 mapping information, RFC 1995)
· GPOS (geographic position, deprecated)
· AAAA (IPv6 address, RFC 1886)
· LOC (location, RFC 1876)
· EID (Nimrod EID)
· NIMLOC (Nimrod locator)
· SRV (service record, RFC 2782)
· ATMA (ATM address)
· NAPTR (URI mapping, RFC 2168)
· KX (key exchange, RFC 2230)
pdnsd-ctl(8), pdnsd.conf(5), pppconfig(8), resolv.conf(5)
More documentation is available in the doc/ subdirectory of the source,
or in /usr/share/doc/pdnsd/ if you are using a binary package.
pdnsd was originally written by Thomas Moestl, <email@example.com>, and
was extensively revised by Paul Rombouts <firstname.lastname@example.org> (for
versions 1.1.8b1-par and later).
Several others have contributed to pdnsd; see files in the source or
This man page was written by Mahesh T. Pai <email@example.com> using
the documents in /usr/share/docs/pdnsd/ directory for Debian, but can
be used on other distributions too.
Last revised: 22 Jul 2007 by Paul Rombouts.
This man page is a part of the pdnsd package, and may be distributed in
original or modified form under terms of the GNU General Public
License, as published by the Free Software Foundation; either version
3, or (at your option) any later version.
You can find a copy of the GNU GPL in the file COPYING in the source or
the /usr/share/common-licenses/ directory if you are using a Debian