Skip to content
/ pdns Public
forked from PowerDNS/pdns

PowerDNS Authoritative, PowerDNS Recursor, dnsdist

License

Notifications You must be signed in to change notification settings

desec-io/pdns

This branch is 154 commits ahead of, 2040 commits behind PowerDNS/pdns:master.

Folders and files

NameName
Last commit message
Last commit date
Feb 21, 2023
Jun 1, 2024
Nov 30, 2017
Nov 15, 2023
Jan 29, 2024
Jan 30, 2024
Mar 15, 2022
Jan 23, 2024
Jan 8, 2024
Jan 31, 2024
Jan 23, 2024
Jan 29, 2024
May 31, 2024
Jan 31, 2024
Jun 26, 2024
Jun 1, 2024
Jan 26, 2024
Mar 17, 2020
Jan 17, 2024
Jan 8, 2024
Dec 14, 2023
May 31, 2024
Jan 23, 2024
Jan 8, 2024
Jan 19, 2024
Mar 31, 2021
Jan 8, 2024
Jan 8, 2024
Jul 6, 2021
Mar 25, 2022
Jan 8, 2024
Sep 27, 2018
Feb 1, 2024
Aug 21, 2013
Apr 30, 2010
Oct 6, 2023
May 28, 2018
Oct 9, 2023
Aug 21, 2023
Aug 1, 2023
Dec 5, 2012
Mar 14, 2022
Jan 8, 2024
Jun 26, 2024
May 16, 2023
Jan 31, 2024
Jun 26, 2024
Dec 22, 2015
Jun 13, 2022
Nov 9, 2020
Jul 22, 2019
Oct 25, 2013
May 6, 2024
May 4, 2013
Jan 8, 2024
May 12, 2023
Aug 18, 2022
Jan 9, 2024
Feb 15, 2022
Aug 23, 2021
Nov 10, 2020
Aug 21, 2013
Jun 26, 2024

Repository files navigation

PowerDNS is copyright © by PowerDNS.COM BV and lots of contributors, using the GNU GPLv2 license (see NOTICE for the exact license and exception used).

All documentation can be found on https://doc.powerdns.com/

This file may lag behind at times. For most recent updates, always check https://doc.powerdns.com/authoritative/changelog/

Another good place to look for information is: https://doc.powerdns.com/authoritative/appendices/compiling.html

To file bugs, head towards: https://github.com/PowerDNS/pdns/issues

But please check if the issue is already reported there first.

DOCKER

This README is mirrored from GitHub to dockerhub. For information about our Docker images, please refer to https://github.com/PowerDNS/pdns/blob/master/Docker-README.md

SOURCE CODE / GIT

Source code is available on GitHub:

git clone https://github.com/PowerDNS/pdns.git

This repository contains the sources for the PowerDNS Recursor, the PowerDNS Authoritative Server, and dnsdist (a powerful DNS loadbalancer). All three can be built from this repository. However, all three released separately as .tar.bz2, .deb and .rpm.

The different releases can be built by the help of pdns-builder, which uses a docker-based build process. To get started with this, run these commands in the root of this repository:

git submodule init
git submodule update
./builder/build.sh

This will bring up a USAGE-page which will explain how to build the different releases.

COMPILING Authoritative Server

The PowerDNS Authoritative Server depends on Boost, OpenSSL and Lua, and requires a compiler with C++-2017 support.

On Debian, the following is useful:

apt install g++ libboost-all-dev libtool make pkg-config default-libmysqlclient-dev libssl-dev libluajit-5.1-dev python3-venv

When building from git, the following packages are also required:

apt install autoconf automake ragel bison flex

For Ubuntu, the following packages should be installed:

apt install libcurl4-openssl-dev luajit lua-yaml-dev libyaml-cpp-dev libtolua-dev lua5.3 autoconf automake ragel bison flex g++ libboost-all-dev libtool make pkg-config libssl-dev lua-yaml-dev libyaml-cpp-dev libluajit-5.1-dev libcurl4 gawk libsqlite3-dev python3-venv
# For DNSSEC ed25519 (algorithm 15) support with --with-libsodium
apt install libsodium-dev
# If using the gmysql (Generic MySQL) backend
apt install default-libmysqlclient-dev
# If using the gpgsql (Generic PostgreSQL) backend
apt install libpq-dev
# If using --enable-systemd (will create the service scripts so it can be managed with systemctl/service)
apt install libsystemd0 libsystemd-dev
# If using the geoip backend
apt install libmaxminddb-dev libmaxminddb0 libgeoip1 libgeoip-dev

Then generate the configure file:

autoreconf -vi

To compile a very clean version, use:

./configure --with-modules="" --disable-lua-records
make
# make install

To use a OpenSSL library, use the following:

./configure --with-modules="" --disable-lua-records --with-libcrypto=<PATH/TO/CUSTOM/OPENSSLLIB>
make
# make install

This generates a PowerDNS Authoritative Server binary with no modules built in.

See https://doc.powerdns.com/authoritative/backends/index.html for a list of available modules.

When ./configure is run without --with-modules, the bind and gmysql module are built-in by default and the pipe-backend is compiled for runtime loading.

To add multiple modules, try:

./configure --with-modules="bind gmysql gpgsql"

Note that you will need the development headers for PostgreSQL as well in this case.

See https://doc.powerdns.com/authoritative/appendices/compiling.html for more details.

If you run into C++11-related symbol trouble, please try passing CPPFLAGS=-D_GLIBCXX_USE_CXX11_ABI=0 (or 1) to ./configure to make sure you are compatible with the installed dependencies.

Compiling the Recursor

See README.md in pdns/recursordist/.

Compiling dnsdist

See README-dnsdist.md in pdns/.

Building the HTML documentation

The HTML documentation (as seen on the PowerDNS docs site) is built from ReStructured Text (rst) files located in docs. They are compiled into HTML files using Sphinx, a documentation generator tool which is built in Python.

Install the dependencies under "COMPILING", and run autoreconf if you haven't already:

autoreconf -vi

Enter the docs folder, and use make to build the HTML docs.

cd docs
make html-docs

The HTML documentation will now be available in html-docs.

FreeBSD Notes

You need to compile using gmake - regular make only appears to work, but doesn't in fact. Use gmake, not make.

The clang compiler installed through FreeBSD's package manager does not expose all of the C++17 features needed under the default std=gnuc++14. Force the compiler to use std=c++17 mode instead.

export CXXFLAGS=-std=c++17

macOS Notes

PowerDNS Authoritative Server is available through Homebrew:

brew install pdns

If you want to compile yourself, the dependencies can be installed using Homebrew. You need to tell configure where to find OpenSSL, too.

brew install boost lua pkg-config ragel openssl
./configure --with-modules="" PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
make -j4

Additionally, for PostgreSQL support, run brew install postgresql and add --with-modules="gpgsql" to ./configure. For MySQL support, run brew install mariadb and add --with-modules="gmysql" to ./configure.

Linux notes

None really.

Post-Quantum PDNS

First install the OQS fork of OpenSSL, for this follow the instructions given here and afterwards run:

make install

in the forked OpenSSL directory. Note: if make -j crashes, just use make while bulding the library.

Once you installed the OQS OpenSSL on your device, clone this repository to the place of your choice. Install the needed package (see above depending on your system) Then generate the configure file:

autoreconf -vi

Compile using the local OpenSSL library freshly installed:

./configure --with-modules="" --disable-lua-records --with-libcrypto=<PATH/TO/CUSTOM/OPENSSLLIB>
make
# make install

If you want to be able to run tests, run:

./configure --with-modules="" --disable-lua-records --enable-unit-tests --with-libcrypto=<PATH/TO/CUSTOM/OPENSSLLIBDIR>
make
cd pdns
make testrunner
./testrunner

As example, if your custom OpenSSL library is installed under /usr/local/include/openssl, use the option --withlibcrypto=/usr/local/.

To extend this implementation with another algorithm supported by the LibOQS library refer to PQC changes.

About

PowerDNS Authoritative, PowerDNS Recursor, dnsdist

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 70.4%
  • Python 18.2%
  • JavaScript 5.5%
  • M4 1.8%
  • Shell 1.7%
  • Makefile 0.8%
  • Other 1.6%