[Pdns-users] New PowerDNS Authoritative Server snapshot with DNSSEC + Release Notes

Leen Besselink leen at consolejunkie.net
Fri Jan 28 10:14:43 UTC 2011


On 01/27/2011 11:37 PM, bert hubert wrote:
> Hi everybody,
>
> (the short version, there is a snapshot worth looking at, packages on
> http://powerdnssec.org/downloads - documentation on http://powerdnssec.org )
>
> Since our previous 'PowerDNSSEC' announcement, a lot has happened. 
> PowerDNSSEC now offers support for almost all DNSSEC algorithms standardised
> (RSASHA1, RSASHA256, RSASHA512, GOST), and even for some that aren't yet
> (ECDSA).
>
> In addition, we've added support for pre-signed zones, so you can now slave
> signed zones from non-PowerDNS installations, and serve them. The other way
> around works too, you can slave unsigned zones and serve them with DNSSEC
> added to it, as a front-proxy.
>
> Finally, there is now a lot of documentation, a good place to start reading
> is still http://powerdnssec.org.
>
> Today, we've released snapshot 20110127.1921 which is in reasonably wide
> production. It powers every single access to the PowerDNS Wiki and the
> PowerDNS Subversion repository. 
>
> Packages for 32 bit and 64 bit Linux distributions, plus source, can be
> found on http://powerdnssec.org/downloads
>
> We urge everybody with an interest in DNSSEC to give this snapshot and its
> associated documentation a go, if only to find out if it would 'work for
> you'.
Hi Bert and others,

So I wanted to atleast do a quick test last night. So I downloaded the
static 64-bit .deb and installed it on my 64-bit Ubuntu 10.10 desktop.
But it did not work. Eventually I found some of the problems, but a
CNAME problem remained. I have some suggestions as well.

I didn't want to setup a mysql or postgresql database, but first try to
setup the bind backend.

I've not created a bind zone file in ages, so I did a quick dig AXFR of
an existing zone in production and removed and replaced a lot of stuff,
this was the result:


test.net.               14400   IN      SOA     ns1.test.net.
hostmaster.test.net. 2011012731 10800 3600 604800 38400
test.net.               14400   IN      NS      ns2.test.net.
test.net.               14400   IN      NS      ns1.test.net.
test.net.               14400   IN      NS      ns3.test.net.
ns1.test.net.           3600    IN      A       10.0.0.101
ns2.test.net.           3600    IN      A       10.0.0.102
ns3.test.net.           3600    IN      A       10.0.1.13
web.test.net.   3600    IN      A       10.0.0.238
www.test.net.           3600    IN      CNAME   web.test.net.
test.net.               14400   IN      MX      100 mx1.test.net.
test.net.               14400   IN      MX      100 mx2.test.net.
test.net.               14400   IN      MX      400 mx3.test.net.
test.net.               14400   IN      MX      400 mx4.test.net.
mx1.test.net.           3600    IN      A       10.0.0.111
mx2.test.net.           3600    IN      A       10.0.0.112
mx3.test.net.           3600    IN      A       10.0.0.116
mx4.test.net.           3600    IN      A       10.0.0.117

I created a named.conf:

zone "test.net" {
        type master;
        file "/etc/powerdns/zones/test.net";
};

and added these settings to pdns.conf:

local-address=127.0.0.1

launch=bind
bind-config=/etc/powerdns/named.conf

Everything seemed to work fine. I tested this by sending:

dig +norec @127.0.0.1 www.test.net. A

I got the CNAME and the A-record of web.test.net as result as expect.

So just running the bind-backend seemed to work just fine.

If I don't want to setup a whole database server, for DNSSEC I would
need sqlite or sqlite3.

First problem: what do I need to specify at the launch parameter ?:
sqlite or sqlite3 ?

I checked pdns_server --list-modules

gsqlite or gsqlite3

I guess if I use the 'sqlite3' command to create the database I'll use
gsqlite3.

So I added that to the launch setting:

launch=gsqlite3,bind

created a database:

http://doc.powerdns.com/gsqlite.html#id621028 (gsqlite / Setting up the
database)

And added the dnssec changes:

http://wiki.powerdns.com/trac/export/1922/trunk/pdns/pdns/dnssec.schema.sqlite3.sql

Added to the config:

gsqlite3-database=/etc/powerdns/sql/powerdns.sqlite3

gsqlite3-dnssec

Everything still worked.

As I understand it, it is possible to use bind-zones and sqlite3 to
store the keys.

So I ran the commands:

$pdnssec secure-zone test.net
This should not happen, still no key!

So I ran check-zone:
$pdnssec check-zone test.net
no nsec3 for test.net
Jan 28 10:39:17 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0
removed
Checked 17 records, 0 errors

Still the same error when I ran pdnssec secure-zone test.net

So I try:

$ pdnssec rectify-zone test.net
no nsec3 for test.net
Jan 28 10:41:46 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0
removed
Adding NSEC ordering information
Done listing

so I run:

$ echo .dump | sqlite3 /etc/powerdns/sql/powerdns.sqlite3 2>&1 | less -I

Nothing was added to the database.

So I run pdnssec secure-zone test.net

Still the same: This should not happen, still no key!

Now I think, well, maybe I should just move everything over to the
sqlite3-database instead.

As I've never created a sqlite3-database for powerdns before yesterday I
create one without dnssec first.

So I run zone2sql without the DNSSEC.

I disabled/change the settings:

#gsqlite3-dnssec
#bind-config
launch=gsqlite3

Look at the a .dump, it looks fine.

Run a dig and spot an other problem:

;; ANSWER SECTION:
www.test.net.           3600    IN      CNAME   web.test.net.

Just the CNAME, no A-record.

This seems wrong, I think it is an ordering problem. So I add the
dnssec-schema and enable:

gsqlite3-dnssec

Again and run:

pdnssec rectify-zone test.net

Now it worked:
;; ANSWER SECTION:
www.test.net.           3600    IN      CNAME   web.test.net.
web.test.net.           3600    IN      A       10.0.0.238

But still signing does not work:

$ pdnssec secure-zone test.net
This should not happen, still no key!

And I go to bed because it is late. :-/

This morning I tried running the bind and sqlite3 again but changed:

launch=bind,gsqlite3

That did not help.

Then I figured out the problem, I forgot to add to the domains-table.

So I have 2 suggestions:

1. add the insert into domain line to zone2sql
2. the documentation should be changed from:

$ echo 'insert into domains (name, type) values ('powerdnssec.org', 'NATIVE') | sqlite3 ./powerdns.sqlite3

to:

$ echo "insert into domains (name, type) values ('powerdnssec.org', 'NATIVE')" | sqlite3 ./powerdns.sqlite3


So I retested, but the problem with the CNAME and sqlite3 remained when
running without a DNSSEC-schema and gsqlite3-dnssec-setting.

After ordering and singing and ordering the DNSSEC the CNAME problems
all went away and when I run dig with +trusted-key= and everything worked.

It also worked with or without the bind backend.

Have a nice day,
    Leen Besselink.




More information about the Pdns-users mailing list