Problem with DLZ and AXFR requests?
Jon Austin <[email protected]> Tue, 15 Sep 2009 08:13:42 +1000
| Newsgroups | gmane.network.dns.bind9.dlz |
|---|---|
| Message-ID | <[email protected]> |
Hi there
I'm having a few problems with DLZ and BIND crashing when a slave
server requests a zone transfer (my secondary DNS host does not
support DLZ).
I've built the BIND package on Ubuntu 8.10 x86. The steps I took to build it was
apt-get install build-essential
apt-get install libmysqlclient15-dev
apt-get build-dep bind9
mkdir /usr/src/local/bind9
cd /usr/src/local/bind9
apt-get source bind9
cd bind9-9.5.0.dfsg.P2/
vim debian/rules
change --with-dlz-mysql=no to --with-dlz-mysql=yes
dpkg-buildpackage -b
dpkg - install debs
I believe it built ok with some warnings. The .debs installed ok, just
a minor issue with rndc and keys.
After a bit of mucking around with configs, any normal lookup works
fine, no errors produced when running named with -d1 console output.
However, when I trigger a AFXR request (using testing host configured
as static slave zone):
14-Sep-2009 21:39:16.173
Query String: select zone from dns_records where zone = 'domainzone.com'
14-Sep-2009 21:39:16.173
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'
14-Sep-2009 21:39:16.173
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'
14-Sep-2009 21:39:17.047
Query String: select zone from dns_records where zone = 'domainzone.com'
14-Sep-2009 21:39:17.047
Query String: select zone from xfr_table where zone = 'domainzone.com'
and client = '203.x.x.x'
14-Sep-2009 21:39:17.047
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'
14-Sep-2009 21:39:17.047
Query String: select ttl, type, host, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') else data end,
resp_person, serial, refresh, retry, expire, minimum from dns_records
where zone = 'domainzone.com'
14-Sep-2009 21:39:17.048
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'
14-Sep-2009 21:39:17.048 zone.c:2514: REQUIRE((((source) != ((void
*)0)) && (((const isc__magic_t *)(source))->magic == ((('Z') << 24 |
('O') << 16 | ('N') << 8 | ('E')))))) failed
14-Sep-2009 21:39:17.048 exiting (due to assertion failure)
Aborted (core dumped)
My table structure is as follows (apologies for formatting)
mysql> select * from dns_records;
+----+-------------------------+---------+-------+------------------------------+------+-------------+---------+-------+--------+---------+------------+-----------------+---------------+------------+
| id | zone | host | type | data
| ttl | mx_priority | refresh | retry | expire | minimum |
serial | resp_person | primary_ns | data_count |
+----+-------------------------+---------+-------+------------------------------+------+-------------+---------+-------+--------+---------+------------+-----------------+---------------+------------+
| 9 | domainzone.com | staging | CNAME | www.domainzone.com. | 3600 |
NULL | NULL | NULL | NULL | NULL | NULL | NULL
| NULL | 0 |
| 11 | domainzone.com | www | A | 1.2.3.4 |
3600 | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | 0 |
| 12 | domainzone.com | @ | MX | ASPMX.L.GOOGLE.COM.
| 3600 | 1 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 13 | domainzone.com | @ | MX | ALT1.ASPMX.L.GOOGLE.COM.
| 3600 | 5 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 14 | domainzone.com | @ | MX | ALT2.ASPMX.L.GOOGLE.COM.
| 3600 | 5 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 15 | domainzone.com | @ | MX | ASPMX2.GOOGLEMAIL.COM.
| 3600 | 10 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 16 | domainzone.com | @ | MX | ASPMX3.GOOGLEMAIL.COM.
| 3600 | 10 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 17 | domainzone.com | @ | SOA | ns1.domainzone.com.
| 3601 | NULL | 3602 | 3603 | 86400 | 3604 |
2008082700 | admin.domainzone.com | ns1.domainzone.com | 0 |
| 18 | domainzone.com | @ | NS | ns1.domainzone.com.
| 3600 | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | 0 |
| 20 | domainzone.com | @ | NS | ns4.us.editdns.net.
| 3600 | NULL | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 21 | domainzone.com | @ | NS | ns5.us.editdns.net.
| 3600 | NULL | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
+----+-------------------------+---------+-------+------------------------------+------+-------------+---------+-------+--------+---------+------------+-----------------+---------------+------------+
mysql> select * from xfr_table;
+-------------------------+-----------------+
| zone | client |
+-------------------------+-----------------+
| domainzone.com | 96.31.74.171 |
| domainzone.com | 203.x.x.x |
+-------------------------+-----------------+
And my BIND config is as follows:
dlz "Mysql zone" {
database "mysql
{host=127.0.0.1 dbname=bind port=3306 user=xxx pass=xxx}
{select zone from dns_records where zone = '%zone%'}
{select ttl, type, mx_priority, case when lower(type)='txt' then
concat('\"', data, '\"') when lower(type) = 'soa' then concat_ws(' ',
data, resp_person, serial, refresh, retry, expire, minimum) else data
end from dns_records where zone = '%zone%' and host = '%record%'}
{}
{select ttl, type, host, mx_priority, case when lower(type)='txt' then
concat('\"', data, '\"') else data end, resp_person, serial, refresh,
retry, expire, minimum from dns_records where zone = '%zone%'}
{select zone from xfr_table where zone = '%zone%' and client = '%client%'}";
};
In terms of troubleshooting:
1. The source package I used was bind9-9.5.0.dfsg.P2 (from Ubuntu
repository). Is there any way to tell what revision of DLZ is applied
to this source?
2. Does my table data look correct? I had a bit of a problem early on
that I fixed by setting unused fields (such as serial in an A record)
to NULL, although this could have been fixed by me experimenting with
the queries in named config.
3. I found the following references which might be relevant
https://bugzilla.redhat.com/show_bug.cgi?id=454783
http://www.mail-archive.com/[email protected]/msg00134.html
I would prefer to only use debian sources for build as it will make
deployment and maintainence much easier. Any suggestions are greatly
appreciated.
Regards
Jon
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf