Skip to content

Proof of concept PowerDNS implementation of ISC/BIND catalog zones

Notifications You must be signed in to change notification settings

PowerDNS/powercatz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is a very quick stab at doing a PowerDNS-external implementation of BIND9 catalog zones, using just the API.

To test:

$ sudo ./ip.sh  # bring up 3 IPs for testing
$ sqlite3 pdns-slave/powerdns.sqlite3 < ~/projects/powerdns/pdns/modules/gsqlite3backend/schema.sqlite3.sql
$ pdnsutil --config-dir=pdns-slave create-slave-zone catalog.example.com 10.33.55.1
$ sudo named -g -c bind-master/named.conf   # tty1
$ sudo named -g -c bind-slave/named.conf    # tty2
$ sudo pdns_server --config-dir=pdns-slave  # tty3

You should see all three daemons starting up. bind-slave should sync the catalog zone and add the two zones listed in it. pdns-slave should sync the catalog zone.

Then, run ./lolcatz.lua (the arguments, in order, are <catalog zone name> <domains.account value for cataloged zones> <default master>), it should add two zones to pdns:

./lolcatz.lua catalog.example.com catalog1 10.33.55.1
Processing PTR da6275bc1e0221b29ff95c97da659e213086e6f8.zones.catalog.example.com.
Record count is 1
Zone name is example.net.
Processing PTR 2fcd737781dfde2e53ae10a5411e85adf20b6ae6.zones.catalog.example.com.
Record count is 1
Zone name is example.org.
Done reading catalog zone, desired zone list:
- example.org.
- example.net.
Done reading current database, current zone list:
Looking for zones to add
Adding zone example.org.
{"account": "catalog1", "dnssec": false, "id": "example.org.", "kind": "Slave", "last_check": 0, "masters": ["10.33.55.1"], "name": "example.org.", "notified_serial": 0, "rrsets": [], "serial": 0, "soa_edit": "", "soa_edit_api": "DEFAULT", "url": "api/v1/servers/localhost/zones/example.org."}
Adding zone example.net.
{"account": "catalog1", "dnssec": false, "id": "example.net.", "kind": "Slave", "last_check": 0, "masters": ["10.33.55.1"], "name": "example.net.", "notified_serial": 0, "rrsets": [], "serial": 0, "soa_edit": "", "soa_edit_api": "DEFAULT", "url": "api/v1/servers/localhost/zones/example.net."}
Looking for zones to delete

Shortly after this you should see pdns-slave AXFRing the two zones in.

After this, if you update the master config (http://jpmens.net/2016/05/24/catalog-zones-are-coming-to-bind-9-11/ is a good guide although I did not configure rndc), and rerun ./lolcatz.lua, you should see zones being added and removed as specified.

NOTE: I only did the PTR part of the draft, this is just a proof of concept. There are lots of edge cases. It should probably be a daemon, not a one-shot script. Once daemonized, it should probably monitor the SOA of the slaved zone and not fetch the whole zone every second. The configs in this repo do not all correctly source NOTIFY/AXFR from the right IPs, etc.

TODO: implement the 'master' side of this - i.e. fetch list of zones for an account, and update the catalog zone with it, so slaves (be they BIND or PowerDNS or anything else that supports catalog zones) can pick that up.

About

Proof of concept PowerDNS implementation of ISC/BIND catalog zones

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published