Re: Help requested for zone delegation using DLZ

Todd Lyons <[email protected]> Tue, 3 Nov 2009 15:56:06 -0800
Newsgroups gmane.network.dns.bind9.dlz
Message-ID <[email protected]>
This came up a while back.  Basically delegation doesn't work within a
sub zone due to the way that bind does its glue.  If it delegates to
outside of the domain, no problem, but within the same domain,
problem.

Regards...           Todd

2009/11/3 Mike Toler <[email protected]>:
> First off, I’ve gone through all of the previous DLZ/Zone Delegation threads
> both here and on other lists, and have not found a working example on any of
> them.  I’ve tried dumbing down my own selects to the bare minimum and still
> am not able to get a successful delegation of a request.  The QUERIES all
> look fine when I run named in debug mode (see below), but I NEVER see any
> attempt to delegate to the second server any DNS queries for us.example.com.
>
>
>
> Using the example.com and us.example.com nomenclature that seems popular in
> the threads, this is a description of what I have (DB SQL statements at the
> bottom of e-mail so they can be easily dropped into a matching DB):
>
>
>
>
>
> Server A:
>
>   Domain:    example.com
>
>   IP:             172.25.2.94
>
>   Hosts: SOA record, NS record (ns1), A record (ns1), A record (ns1-us), NS
> record (us.example.com)
>
>       zone      |  host  | ttl | type | mx_priority |        data         |
> resp_person |   serial   | refresh | retry | expire | minimum
>
> ----------------+--------+-----+------+-------------+---------------------+-------------+------------+---------+-------+--------+---------
>
>  example.com    | @      | 300 | SOA  |             | ns1                 |
> hostmaster  | 2009091600 |     900 |  2800 |   8640 |    1080
>
>  example.com    | ns1-us | 300 | A    |             | 172.24.1.93
> |             |            |         |       |        |
>
>  example.com    | @      | 300 | NS   |             | ns1.example.com.
> |             |            |         |       |        |
>
>  us.example.com | @      | 300 | NS   |             | ns1-us.example.com.
> |             |            |         |       |        |
>
>  example.com    | ns1    | 300 | A    |             | 172.24.2.196
> |             |            |         |       |        |
>
>
>
> Server B:
>
>   Domain:    us.example.com
>
>   IP:             172.25.1.93
>
>   Hosts: SOA record, NS record (ns1), A record (ns1), A record (ns1-us), NS
> record (us.example.com)
>
>       zone      | host  | ttl | type | mx_priority |        data         |
> resp_person |   serial   | refresh | retry | expire | minimum
>
> ----------------+-------+-----+------+-------------+---------------------+-------------+------------+---------+-------+--------+---------
>
>  us.example.com | ns1   | 300 | A    |             | 172.24.1.93
> |             |            |         |       |        |
>
>  us.example.com | @     | 300 | SOA  |             | ns1                 |
> hostmaster  | 2009091600 |     900 |  2800 |   8640 |    1080
>
>  us.example.com | @     | 300 | NS   |             | ns1.us.example.com.
> |             |            |         |       |        |
>
>  us.example.com | test1 | 300 | A    |             | 1.2.3.4
> |             |            |         |       |        |
>
>
>
>
>
> My DLZ configuration in the Named.conf file looks like:
>
> . . .
>
> dlz "postgres zone" {
>
>    database "postgres 2
>
>    {host=int-dbs  port=5432 dbname=xxxx user=yyyy}
>
>    {select zone from dns_records where zone = '%zone%'}
>
>    {select ttl, type, mx_priority, case when lower(type)='txt' then '\"' ||
> data
>
>         || '\"' else data end from dns_records where zone = '%zone%' and
> host = '%record%' }";
>
> };
>
> . . .
>
>
>
>
>
>
>
> If I do a dig command for the NS record for “us.example.com” on server A, it
> works fine and returns the NS record.  (ns1-us.example.com evaluates to the
> IP of server B.
>
>
>
> [root@int-svc-11 ~]# dig ns @172.24.2.196 us.example.com
>
>
>
> ; <<>> DiG 9.4.3-P2 <<>> ns @172.24.2.196 us.example.com
>
> ; (1 server found)
>
> ;; global options:  printcmd
>
> ;; Got answer:
>
> ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30308
>
> ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
>
>
>
> ;; QUESTION SECTION:
>
> ;us.example.com.                        IN      NS
>
>
>
> ;; ANSWER SECTION:
>
> us.example.com.         300     IN      NS      ns1-us.example.com.
>
>
>
> ;; Query time: 1 msec
>
> ;; SERVER: 172.24.2.196#53(172.24.2.196)
>
> ;; WHEN: Tue Nov  3 20:20:49 2009
>
> ;; MSG SIZE  rcvd: 53
>
>
>
>
>
> If I do a dig command for the A Record “test1.us.example.com” it fails.
>
>
>
> [root@int-svc-11 ~]# dig a @172.24.2.196 test1.us.example.com
>
>
>
> ; <<>> DiG 9.4.3-P2 <<>> a @172.24.2.196 test1.us.example.com
>
> ; (1 server found)
>
> ;; global options:  printcmd
>
> ;; Got answer:
>
> ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 29260
>
> ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
>
>
>
> ;; QUESTION SECTION:
>
> ;test1.us.example.com.          IN      A
>
>
>
> ;; Query time: 3 msec
>
> ;; SERVER: 172.24.2.196#53(172.24.2.196)
>
> ;; WHEN: Tue Nov  3 20:22:03 2009
>
> ;; MSG SIZE  rcvd: 38
>
>
>
>
>
>
>
> The final query that DLZ does before failing (that if I understand correctly
> is used to determine if the request needs to be forwarded) is:
>
> 03-Nov-2009 20:20:56.532 84 built query
>
> 03-Nov-2009 20:20:56.532 84 query is 'select ttl, type, mx_priority, case
> when lower(type)='txt' then '"' || data
>
>         || '"' else data end from dns_records where zone = 'us.example.com'
> and host = '@' '
>
> 03-Nov-2009 20:20:56.532 84 executing query for 0 time
>
> 03-Nov-2009 20:20:56.532 84 rs ok
>
> 03-Nov-2009 20:20:56.532 84 cleaning up
>
> 03-Nov-2009 20:20:56.532 84 returning
>
> 03-Nov-2009 20:20:56.532 842 Getting DBI
>
> 03-Nov-2009 20:20:56.532 842 Got DBI - checking query
>
> 03-Nov-2009 20:20:56.532 842 cleaning up
>
> 03-Nov-2009 20:20:56.532 842 returning
>
>
>
>
>
> That query on my DB returns:
>
>
>
> dns_data=# select ttl, type, mx_priority, case when lower(type)='txt' then
> '"' || data   || '"' else data end from dns_records where zone =
> 'us.example.com' and host = '@';
>
>  ttl | type | mx_priority |        data
>
> -----+------+-------------+---------------------
>
>  300 | NS   |             | ns1-us.example.com.
>
> (1 row)
>
>
>
> Which appears to me to be correct.  That is returning the NS record defined
> for “us.example.com” in SERVER A (ns1-us.example.com is an A record that
> points to server B).
>
>
>
> So why, when I do a dig, does the query never make it to the server B and I
> get the DNS lookup failure???  This is driving me nuts.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> --------------------------------------------------DB Definition
> ----------------
>
>
>
>
>
> Postgres DB Definition:
>
>
>
> CREATE TABLE dns_records
>
> (
>
>   "zone" character varying(255) NOT NULL,
>
>   host character varying(255) NOT NULL,
>
>   ttl integer,
>
>   "type" character varying(16) NOT NULL,
>
>   mx_priority integer,
>
>   data character varying(255) NOT NULL,
>
>   resp_person character varying(255),
>
>   serial integer,
>
>   refresh integer,
>
>   retry integer,
>
>   expire integer,
>
>   minimum integer,
>
>   datestamp timestamp without time zone DEFAULT now(),
>
>   CONSTRAINT dns_records_pkey PRIMARY KEY (zone, host, data, type)
>
> )
>
> WITH (
>
>   OIDS=FALSE
>
> );
>
>
>
> Michael L. Toler
>
> Sr. System Test Engineer
>
> Prodea Systems, Inc.
>
> 214-278-1834 (office)
>
> 972-816-7790 (mobile)
>
>
>
> This message is confidential to Prodea Systems, Inc unless otherwise
> indicated
> or apparent from its nature. This message is directed to the intended
> recipient
> only, who may be readily determined by the sender of this message and its
> contents. If the reader of this message is not the intended recipient, or an
> employee or agent responsible for delivering this message to the intended
> recipient:(a)any dissemination or copying of this message is strictly
> prohibited; and(b)immediately notify the sender by return message and
> destroy
> any copies of this message in any form(electronic, paper or otherwise) that
> you
> have.The delivery of this message and its information is neither intended to
> be
> nor constitutes a disclosure or waiver of any trade secrets, intellectual
> property, attorney work product, or attorney-client communications. The
> authority of the individual sending this message to legally bind Prodea
> Systems
> is neither apparent nor implied,and must be independently verified.
>
> ------------------------------------------------------------------------------
> Come build with us! The BlackBerry(R) 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/devconference
> _______________________________________________
> Bind-dlz-testers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/bind-dlz-testers
>
>



-- 
Regards...      Todd
The best thing about pair programming is that you have the perfect
audience for your genius.  -- Kent Beck

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july