Giter Site home page Giter Site logo

jondwaite / powerdns-for-docker Goto Github PK

View Code? Open in Web Editor NEW

This project forked from connectitnet/powerdns-for-docker

0.0 0.0 0.0 80 KB

PowerDNS Docker Images based on Debian 12

License: GNU Affero General Public License v3.0

Shell 66.39% Dockerfile 27.52% Jinja 6.09%

powerdns-for-docker's Introduction

PowerDNS 4.9 Docker Images based on Debian 12 (Bookworm)

This repository contains four Docker images - pdns, pdns-recursor and pdns-admin. It is forked from PowerDNS 4.1 for Debian Stretch and updated for Debian 12 and PowerDNS Auth 4.9 & PowerDNS Recursor 5.0

Image pdns contains completely configurable PowerDNS 4.9.x server with mysql and gpgsql backends.

Image pdns-recursor contains completely configurable PowerDNS 5.0 recursor.

Images pdns-admin contains backend (gunicorn) for PowerDNS Admin web app, written in Flask, for managing PowerDNS servers. PowerDNS Admin is also completely configurable.


pdns

Docker image with PowerDNS 4.9.x server with mysql and gpgsql backends.

Env vars for gmysql configuration:

BACKEND=gmysql
PDNS_gmysql_host=mysql
PDNS_gmysql_port=3306
PDNS_gmysql_user=root
PDNS_gmysql_password=powerdns
PDNS_gmysql_dbname=powerdns

PowerDNS server is configurable via env vars. A backend must be selected with the BACKEND env var. Valid choices are gmysql, gpgsql and gsqlite3 for MySQL, PostgreSQL and SQLite3 respectively. Every variable starting with PDNS_ will also be inserted into /etc/pdns/pdns.conf configuration file in the following way: prefix PDNS_ will be stripped and every _ will be replaced with -. For example, from above sql config, PDNS_gmysql_host=mysql will become gmysql-host=sql in /etc/pdns/pdns.conf file. This way, you can configure the PowerDNS server any way you need within a docker run command.

There is also a SUPERMASTER_IPS env var supported, which can be used to configure supermasters for slave dns server. Docs. Multiple ip addresses separated by space should work.

All available settings can be found over here.

pdns Examples

Master server with API enabled and with one slave server configured

docker run -d -p 53:53 -p 53:53/udp --name pdns-master \
  --hostname ns1.example.com \
  -e BACKEND=gmysql \
  -e PDNS_primary=yes \
  -e PDNS_api=yes \
  -e PDNS_api_key=secret \
  -e PDNS_webserver=yes \
  -e PDNS_webserver_address=0.0.0.0 \
  -e PDNS_webserver_password=secret2 \
  -e PDNS_version_string=anonymous \
  -e PDNS_default_ttl=1500 \
  -e PDNS_soa_minimum_ttl=1200 \
  -e PDNS_allow_axfr_ips=172.5.0.21 \
  -e PDNS_only_notify=172.5.0.21 \
  jondwaite/pdns

Slave server with supermaster

docker run -d -p 53:53 -p 53:53/udp --name pdns-slave \
  --hostname ns2.example.com --link mariadb:mysql \
  -e BACKEND=gmysql \
  -e PDNS_gmysql_dbname=powerdnsslave \
  -e PDNS_secondary=yes \
  -e PDNS_version_string=anonymous \
  -e PDNS_disable_axfr=yes \
  -e PDNS_allow_notify_from=172.5.0.20 \
  -e SUPERMASTER_IPS=172.5.0.20 \
  jondwaite/pdns

pdns-recursor

Docker image with PowerDNS 5.0 recursor.

PowerDNS recursor is configurable via env vars. Every variable starting with PDNS_ will be inserted into /etc/pdns/recursor.conf configuration file in the following way: prefix PDNS_ will be stripped and every _ will be replaced with - just like above. This way, you can configure the PowerDNS recursor any way you need within a docker run command.

All available settings can be found over here.

pdns-recursor Examples

Recursor server with API enabled:

docker run -d -p 53:53 -p 53:53/udp --name pdns-recursor jondwaite/pdns-recursor

pdns-admin

Docker image with PowerDNS Admin web app, written in Flask, for managing PowerDNS servers. This image contains the python part of the app running under gunicorn. It needs external *sql server.

Env vars for sql configuration:

PDNS_ADMIN_SQLA_DB_HOST="'sql'"
PDNS_ADMIN_SQLA_DB_PORT="'3306'"
PDNS_ADMIN_SQLA_DB_USER="'root'"
PDNS_ADMIN_SQLA_DB_PASSWORD="'powerdnsadmin'"
PDNS_ADMIN_SQLA_DB_NAME="'powerdnsadmin'"

Similar to the pdns container, pdns-admin is also completely configurable via env vars. Prefix in this case is PDNS_ADMIN_, but there is one caveat: as the config file is a python source file, every string value must be quoted, as shown above. Double quotes are consumed by Bash, so the single quotes stay for Python. (Port number in this case is treated as string, because later on it's concatenated with hostname, user, etc in the db uri). Configuration from these env vars will be written to the /opt/powerdns-admin/config.py file.

Connecting to the PowerDNS server

For the pdns-admin to make sense, it needs a PowerDNS server to manage. The PowerDNS server needs to have exposed API (example configuration for PowerDNS 4.x):

api=yes
api-key=secret
webserver=yes

And again, PowerDNS connection is configured via env vars (it needs url of the PowerDNS server, api key and a version of PowerDNS server, for example 4.9.0):

(name=default value)

PDNS_ADMIN_PDNS_STATS_URL="'http://pdns:8081/'"
PDNS_ADMIN_PDNS_API_KEY="''"
PDNS_ADMIN_PDNS_VERSION="''"

If this container is linked with pdns- sql from this repo with alias pdns, it will be configured automatically and none of the env vars from above are needed to be specified.

Persistent data

There is a directory with user uploads which should be persistent: /opt/powerdns-admin/upload

pdns-admin-uwsgi Example

When linked with pdns-sql from this repo and with LDAP auth:

docker run -d --name pdns-admin-uwsgi \
  --link mariadb:mysql --link pdns-master:pdns \
  -v pdns-admin-upload:/opt/powerdns-admin/upload \
  -e PDNS_ADMIN_LDAP_TYPE="'ldap'" \
  -e PDNS_ADMIN_LDAP_URI="'ldaps://your-ldap-server:636'" \
  -e PDNS_ADMIN_LDAP_USERNAME="'cn=dnsuser,ou=users,ou=services,dc=example,dc=com'" \
  -e PDNS_ADMIN_LDAP_PASSWORD="'dnsuser'" \
  -e PDNS_ADMIN_LDAP_SEARCH_BASE="'ou=System Admins,ou=People,dc=example,dc=com'" \
  -e PDNS_ADMIN_LDAP_USERNAMEFIELD="'uid'" \
  -e PDNS_ADMIN_LDAP_FILTER="'(objectClass=inetorgperson)'" \
  jondwaite/pdns-admin-uwsgi

pdns-admin-nginx

Front-end image with nginx and static files for PowerDNS Admin. Exposes port 80 for proxy connections, and expects a uWSGI backend image under pdns-admin-uwsgi alias.

pdns-admin-nginx Example

docker run -d --name pdns-admin-nginx \
  --link pdns-admin-uwsgi:pdns-admin-uwsgi \
  jondwaite/pdns-admin-nginx

powerdns-for-docker's People

Contributors

jsenecal avatar jondwaite avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.