Skip to main content

Dynamic PowerDNS backend

PyPI Python

This repository implements a PowerDNS pipe backend to provide dynamic replies to DNS queries. Replies are taken round-robin from a predefined list read from a text file. We use this backend to steer RIPE Atlas traceroute measurements toward PEERING prefixes according to experiment requirements.

Usage

This module communicates with PowerDNS using PowerDNS’s pipe backend protocol version 3. The tool receives a single configuration file as parameter, and exchanges information with PowerDNS through standard input and output. The configuration file is in JSON format and is validated by the config-schema.json JSON schema.

Backend configuration

The configuration file specifies the DNS domain the backend is responsible for, and information required to answer SOA and NS DNS queries:

{
  "domain": "atlas.peering.usc.edu",
  "soa": "atlas.peering.usc.edu noc.peering.usc.edu 20170723 7200 3600 7200 120",
  "nameservers": [
    "peering-atlas-ns.vms.uscnsl.net",
    "peering-atlas-ns.peering-vms.usc.edu"
  ],
  "ttl": 3600,
  "...": "..."
}

The domain parameter specifies what domain the backend is responsible for. The soa parameter specifies zone-specific timers and configuration, and is used verbatim in replies for DNS SOA queries. The nameserver parameter specifies a list of name servers for the zone, used in replies for NS queries. The time-to-live parameter (ttl) specifies the period for which replies to SOA and NS queries should be cached. Normally, the third field in the soa parameter (20170723, the serial number) needs to be updated whenever a zone is updated. Although updating the serial number when the dynamic addresses are reconfigured is not essential (because replies have a time-to-live of zero to prevent caching), the serial number needs to be updated if the soa or nameservers parameters are updated.

Each dynamic host name within domain is handled by a handler that reads the list of IP addresses from a text file. The handler replies to queries with IP addresses in the text file in round-robin order. Each handler has three parameters:

{
  "...": "...",
  "handlers": [
    {
      "qname": "target1.atlas.peering.usc.edu",
      "qtype": "A",
      "file": "data/peering-v4.txt",
    },
    {
      "qname": "target2.atlas.peering.usc.edu",
      "qtype": "AAAA",
      "file": "data/peering-v6.txt"
    },
    "..."
  ]
}

Parameter qname specifies the fully-qualified domain name that should be answered with IP addresses within file. The qtype field specified whether IP addresses in file are IPv4 addresses (qtype = A) or IPv6 addresses (qtype = AAAA).

Setting up the parent DNS server

We also need to configure the authoritative name server for the parent domain (peering.usc.edu in our case) to forward all requests for atlas.peering.usc.edu to the machine running the dynamic backend.

If using BIND and if the dynamic backend server is peering-atlas-ns.vms.uscnsl.net, this can be achieved by adding the following to the zone database (equivalent entries can be added to PowerDNS to achieve the same effect):

atlas.peering.usc.edu.  NS          peering-atlas-ns.vms.uscnsl.net.

Testing pdyndns.py

We have a test suite for pdyndns.py. You can run it by installing nose and running nosetests. Note that we require nose for Python 3. We also have a tox script that checks for formatting and performs some linting.

Acknowledgements

Precursors and early implementations for this code include RIPE Atlas’s atlas-dyndns, Emile Aben’s Scapy DNS Ninja and Zeerover DNS.

Release files for pdyndns 0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pdyndns 0.3
File Size Uploaded
pdyndns-0.3.tar.gz 5.2 kB Details

Release files / pdyndns-0.3.tar.gz

Download URL pdyndns-0.3.tar.gz
Size 5.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0b606713052b4d24f4a201b9494cd8ff9b68fbc52d3057f9b5b841d1bca66624
BLAKE2b-256 checksum
How to use checksums
45d7ca0384382245aac98e76abaedd8657b62653fc58b9f90b7b13c5e576f52b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

0.5.2

1 release file

0.5.1

1 release file

0.5

1 release file

0.4

1 release file

This release

0.3 This release

1 release file

0.2.6

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2

1 release file

0.1.10

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page