Delegating /24's from a /19

From owner-nanog@merit.edu Tue Mar 15 14:12:12 2005
Date: Tue, 15 Mar 2005 15:12:10 -0500
From: Robert Blayzor <rblayzor@inoc.net>
To: alex@pilosoft.com
Cc: Mike Sawicki <fifi@HAX.ORG>, nanog@merit.edu
Subject: Re: Delegating /24's from a /19

> Either by doing DNS delegation on the zone boundary or by SWIP'ing the
> space to the other company.

You can SWIP it yes, but that won't help DNS on small blocks like /24's.

> It is very easy to do DNS delegation, say if you have 128.0.0.0/19, and
> you want to delegate 128.0.1.0/24, in your zone file for
> 0.128.in-addr.arpa zone put
>
> 1 IN NS ns1.othercompany.com
> 1 IN NS ns2.othercompany.com

The only way it will work is to use RFC2317 or slave the zones from the
other name server. Because he does not have the entire /16 you can't
just delegate like that.

OK, what am I missing?

*ASSUMPTION*:
  The holder of the /16 _has_ delegated rDNS for the 32 /24s to the /19 owner.

The /19 owner can, on it's nameserver, run an "authoritative" zone for
the /16 -- with _its_ /24s listed explicitly, and a wildcard pointing
back to the rDNS nameserver of the /16 owner.

"He who" queries from the outside world will work their way down from the
.arpa zone, to the X.W.in-addr.arpa zone, get referred to the nameserver
at "thiscompany", and get referred to the NS listed for Y.X.W.in-addr.arpa.
which will resolve Z.Y.X.W.in-addr.arpa.

"He who" queries the /19 owner nameserver directly for a Y.X.W.in-addr.arpa
address that lies within the /19 owner's addresses will get answered by
that nameserver, *or* be referred to the client's server. If they ask for
something *outside* the /19 owner's space, the wildcard -- referring to
the 'upstream' (the /16 owner) nameserver kicks in.

_AS_LONG_AS_ the 'delegated to' nameserver has the wildcard in it pointing
back to the 'parent' nameserver, this seems to work just fine. Admittedly,
if the upstream block owner changes the _name_ of it's nameserver(s), the
'delegated to' nameserver requires manual tweaking, but, realistically,
"how often" does _that_ happen?

In article <200503152040.j2FKe8p8001524@host122.r-bonomi.com> you write:

From owner-nanog@merit.edu Tue Mar 15 14:12:12 2005
Date: Tue, 15 Mar 2005 15:12:10 -0500
From: Robert Blayzor <rblayzor@inoc.net>
To: alex@pilosoft.com
Cc: Mike Sawicki <fifi@HAX.ORG>, nanog@merit.edu
Subject: Re: Delegating /24's from a /19

> Either by doing DNS delegation on the zone boundary or by SWIP'ing the
> space to the other company.

You can SWIP it yes, but that won't help DNS on small blocks like /24's.

> It is very easy to do DNS delegation, say if you have 128.0.0.0/19, and
> you want to delegate 128.0.1.0/24, in your zone file for
> 0.128.in-addr.arpa zone put
>
> 1 IN NS ns1.othercompany.com
> 1 IN NS ns2.othercompany.com

The only way it will work is to use RFC2317 or slave the zones from the
other name server. Because he does not have the entire /16 you can't
just delegate like that.

OK, what am I missing?

*ASSUMPTION*:
The holder of the /16 _has_ delegated rDNS for the 32 /24s to the /19 owner.

The /19 owner can, on it's nameserver, run an "authoritative" zone for
the /16 -- with _its_ /24s listed explicitly, and a wildcard pointing
back to the rDNS nameserver of the /16 owner.

"He who" queries from the outside world will work their way down from the
.arpa zone, to the X.W.in-addr.arpa zone, get referred to the nameserver
at "thiscompany", and get referred to the NS listed for Y.X.W.in-addr.arpa.
which will resolve Z.Y.X.W.in-addr.arpa.

"He who" queries the /19 owner nameserver directly for a Y.X.W.in-addr.arpa
address that lies within the /19 owner's addresses will get answered by
that nameserver, *or* be referred to the client's server. If they ask for
something *outside* the /19 owner's space, the wildcard -- referring to
the 'upstream' (the /16 owner) nameserver kicks in.

_AS_LONG_AS_ the 'delegated to' nameserver has the wildcard in it pointing
back to the 'parent' nameserver, this seems to work just fine. Admittedly,
if the upstream block owner changes the _name_ of it's nameserver(s), the
'delegated to' nameserver requires manual tweaking, but, realistically,
"how often" does _that_ happen?

  This is the worst piece of "advice" I have ever seen.

  SWIP the nameservers. The OP customers will be expecting to
  be able to use the X.Y.Z.IN-ADDR.ARPA as the zone name. It
  also reduces the number of nameservers involved. It is also
  the clean solution. The RIR's are all setup to handle this.

  For those advising RFC 2317 please read the first sentence of
  the introduction. RFC 2317 was NOT written to cover this
  situation. Go put it back in the filing cabinet and bring
  it out when you have a situation that it does cover (/25-/32
  sub-delegation).

  Mark

> Either by doing DNS delegation on the zone boundary or by SWIP'ing
> the space to the other company.

You can SWIP it yes, but that won't help DNS on small blocks like /24's.

SWIPping the large block won't help. SWIPping the /24s will.

OK, what am I missing?

*ASSUMPTION*:
The holder of the /16 _has_ delegated rDNS for the 32 /24s to the /19
owner.

The /19 owner can, on it's nameserver, run an "authoritative" zone for
the /16 -- with _its_ /24s listed explicitly, and a wildcard pointing
back to the rDNS nameserver of the /16 owner.

Absolutely.

[SNIP DNS Resolution 101 tutorial]

_AS_LONG_AS_ the 'delegated to' nameserver has the wildcard in it
pointing back to the 'parent' nameserver, this seems to work just fine.
Admittedly, if the upstream block owner changes the _name_ of it's
nameserver(s), the 'delegated to' nameserver requires manual tweaking,
but, realistically, "how often" does _that_ happen?

Seems perfectly reasonable to me.

  This is the worst piece of "advice" I have ever seen.

Um, why?

  SWIP the nameservers. The OP customers will be expecting to
  be able to use the X.Y.Z.IN-ADDR.ARPA as the zone name. It
  also reduces the number of nameservers involved. It is also
  the clean solution. The RIR's are all setup to handle this.

That's another alternative, but, not the only one, and, in many cases,
not the most effective.

  For those advising RFC 2317 please read the first sentence of
  the introduction. RFC 2317 was NOT written to cover this
  situation. Go put it back in the filing cabinet and bring
  it out when you have a situation that it does cover (/25-/32
  sub-delegation).

While it doesn't inherently cover it, I see no reason it couldn't be
used, although it seems unnecessarily complicated for the task. Using
a /16 zone with a wildcard backreference seems to me the cleanest solution,
with SWIP coming in a close second. In reality, the wildcard backreference
is only needed _IF_ the nameserver is a resolver or forwarder, otherwise,
it's useless anyway, as the nameserver in question should not be receiving
queries outside of the space delegated to it.

Owen

In article <2147483647.1110902129@imac-en0.delong.sj.ca.us> you write:

--==========D714B409A8D84E671065==========
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

> Either by doing DNS delegation on the zone boundary or by SWIP'ing
> the space to the other company.

You can SWIP it yes, but that won't help DNS on small blocks like =

/24's.

SWIPping the large block won't help. SWIPping the /24s will.

OK, what am I missing?

*ASSUMPTION*:
The holder of the /16 _has_ delegated rDNS for the 32 /24s to the /19
owner.

The /19 owner can, on it's nameserver, run an "authoritative" zone for
the /16 -- with _its_ /24s listed explicitly, and a wildcard pointing
back to the rDNS nameserver of the /16 owner.

Absolutely.

[SNIP DNS Resolution 101 tutorial]

_AS_LONG_AS_ the 'delegated to' nameserver has the wildcard in it
pointing back to the 'parent' nameserver, this seems to work just fine.
Admittedly, if the upstream block owner changes the _name_ of it's
nameserver(s), the 'delegated to' nameserver requires manual tweaking,
but, realistically, "how often" does _that_ happen?

Seems perfectly reasonable to me.

  This is the worst piece of "advice" I have ever seen.

Um, why?

  Firstly he does NOT have authority for the /16 reverse. Lots
  of latent problems there.
  Secondly sideways delegations don't work.
  Thirdly I'm sick and tired of having to debug stupid
  schemes ISP's come up with to try to avoid SWIPing the
  nameservers in situations like this. They don't work
  or they don't meet the customers expectations (i.e.
  they have a /24 and should just be able to use x.y.z.in-addr.arpa
  and have it work reliably).

  Delegation is the DNS is strictly hierachical.

  You either SWIP the new servers or you slave the zones
  from the customer. In both cases you are following the
  delegation heirarchy. Note even if you slave the zones
  you still have to ensure the delegation is correct.

  Mark

...snip...

Um, why?

  Firstly he does NOT have authority for the /16 reverse. Lots
  of latent problems there.

Nor is he claiming it. Nowhere on the internet is there anything saying
that the entire /16 should be looked up against his nameserver. No reference
should exist pointing to his nameserver as authoritative for the /16.
The convenience of having a zone file that is based on a /16 that he owns
part of does not create authority out of thin air, nor does it make any
meaningful claim to authority except to a system which (mistakenly) attempts
to use those nameservers as resolvers. Yes, if you are going to do this, it
is a prerequisite that your nameserver _NOT_ be anyone's resolver.

  Secondly sideways delegations don't work.

Huh? I'm not sure what you mean by "sideways delegations". It is
perfectly acceptable, for example, for:

a.root-servers.net returns 16.172.in-addr.arpa. IN NS ns1.arin.net.
ns1.arin.net returns 124.16.172.in-addr.apra. IN NS ns1.foobar.com.
ns1.foobar.com. returns 124.16.172.in-addr.arpa. IN NS ns1.subsidiary.com.
ns1.subsidiary.com. returns 5.124.16.172.in-addr.arpa. IN PTR foo.subsidiary.com.

This does work. This is what is being proposed.

  Thirdly I'm sick and tired of having to debug stupid
  schemes ISP's come up with to try to avoid SWIPing the
  nameservers in situations like this. They don't work
  or they don't meet the customers expectations (i.e.
  they have a /24 and should just be able to use x.y.z.in-addr.arpa
  and have it work reliably).

So don't debug them. As long as ARIN has all of the /24s within the /19
pointing as NS records to the nameserver which contains the partially
populated /16 zone file (or which secondaries each of the relevant /24 zones
from their true owners), things work just fine. Nothing really to debug.

  Delegation is the DNS is strictly hierachical.

I don't see where the above breaks this.

  You either SWIP the new servers or you slave the zones
  from the customer. In both cases you are following the
  delegation heirarchy. Note even if you slave the zones
  you still have to ensure the delegation is correct.

I guess we will have to agree to disagree on this. I will point out that
the above solution is working in a number of networks without problem.
Sure, if you screw it up, it doesn't work. That's true of DNS generally.

Owen

P.S. Learn to trim quotations.

Robert Bonomi wrote:

OK, what am I missing?

*ASSUMPTION*:
  The holder of the /16 _has_ delegated rDNS for the 32 /24s to the /19 owner.

The /19 owner can, on it's nameserver, run an "authoritative" zone for
the /16 -- with _its_ /24s listed explicitly, and a wildcard pointing back to the rDNS nameserver of the /16 owner.

"He who" queries from the outside world will work their way down from the
.arpa zone, to the X.W.in-addr.arpa zone, get referred to the nameserver
at "thiscompany", and get referred to the NS listed for Y.X.W.in-addr.arpa.
which will resolve Z.Y.X.W.in-addr.arpa.

I'm not as versed in DNS protocols as I was in the past (which then didn't compare to some on this list), but won't this cause tons of "lame server" messages that could be eliminated by proper SWIPping?

pt

.... I'm not sure what you mean by "sideways delegations". It is
perfectly acceptable, for example, for:

a.root-servers.net returns 16.172.in-addr.arpa. IN NS ns1.arin.net.
ns1.arin.net returns 124.16.172.in-addr.apra. IN NS ns1.foobar.com.
ns1.foobar.com. returns 124.16.172.in-addr.arpa. IN NS ns1.subsidiary.com.
ns1.subsidiary.com. returns 5.124.16.172.in-addr.arpa. IN PTR foo.subsidiary.com.

This does work. This is what is being proposed.

I'm afraid that above is not an accurate or workable sequence of events.

Here is what happens *today* when a "fresh" copy of named seeks a "reverse map." First the disclaimer - I'm using named 9.3.1, not all iterating resolvers have the same strategy. I'm omitting repeated queries, as well as queries for AAAA records and retranmissions because of FORMERR. Also, if you start the server, run the query, stop the server and repeat (with an empty cache), the next result may vary as zones held vary be server.

Note too that this is from a fresh (empty) cache. Some queries are not needed when the cache is populated. It is not always as bad as I am illustrating - but it's easiest to visualize from the "0" state.

1. I ask a root-server for "162.57.173.209.in-addr.arpa./PTR". The response is a referral to the servers for 209.in-addr.arpa and I am told there are 7 of them.

2. I ask another root-server for the address of each of the 7 name servers. This means 7 new queries (14 w/AAAA's) directed to this second root server. Note that in this example, all 7 name servers are in the .net domain.

3. I ask the .net name servers the same questions as in #2. From this I get some "hybrid" answers - referrals enriched with answers - for most of the 7 name servers. I call these hybrids because, if you adhere strictly to the DNS protocol specifications, referrals are what you should get. The addition of the answer records to the referrals is a crutch to help the Internet run more smoothly. (For this we should thank Verisign engineers.)

4. The query in step 1 is issued to one of the name servers with a hybrid answer at this point. The reply received in this "step" is a referral to the servers for 57.173.209.in-addr.arpa, served up by four machines in neustar.com.

5. BIND continues seeking the glue for the name servers w/o hybrid answers in step 3. BIND does this to have these name servers available for further querying, but is not necessary for the immediate question. (This is done in parallel too - to avoid unnecessary latency.)

6. Armed with new name servers in step 4, a query for each's address is sent to another root server, which results in referrals to the servers for .com.

7. The .com servers also give the same hybrid answers (.com and .net are on the same machines) for the 4 name servers.

8. The original query is then issued to one of the servers whose address was obtained in step 7. The result of this is what we wanted all along.

9. BIND may continue seeking addresses for other servers after returning the answer, filling out its cache.

Why bother to detail all this? It's important to realize that the real iteration is done only in steps 1, 4, and 8. In step 1 I am being told who to ask. In step 4 I am also being told who to ask. The rest of the time I am trying to find out "where to ask". Steps 2,3,5 get me the addresses for the question in step 4. Steps 6,7,9 get the addresses for the question in step 8.

So - going back to the comment above:

a.root-servers.net returns 16.172.in-addr.arpa. IN NS ns1.arin.net.

The root-servers do not return NS records, the refer the querier to one of the /8 zones. (Note that not all root servers have the same zones, some might refer the querier to the in-addr.arpa. zone.)

ns1.arin.net returns 124.16.172.in-addr.apra. IN NS ns1.foobar.com.
ns1.foobar.com. returns 124.16.172.in-addr.arpa. IN NS ns1.subsidiary.com.

If the above two "situations" happened, then there's a violation of the database coherency principle that DNS tries hard (split-brain aside) to uphold. In the global DNS, no matter where you ask question, you should get the same answer.

I.e.,

dig @ns1.arin.net 124.16.172.in-addr.arpa. IN NS

and

dig @ns1.foobar.com 124.16.172.in-addr.apra. IN NS

had better return the same NS RRSet.

So, I don't think the above is workable or even realistic.

   Thirdly I'm sick and tired of having to debug stupid
   schemes ISP's come up with to try to avoid SWIPing the
   nameservers in situations like this. They don't work
   or they don't meet the customers expectations (i.e.
   they have a /24 and should just be able to use x.y.z.in-addr.arpa
   and have it work reliably).

So don't debug them. As long as ARIN has all of the /24s within the /19
pointing as NS records to the nameserver which contains the partially
populated /16 zone file (or which secondaries each of the relevant /24 zones
from their true owners), things work just fine. Nothing really to debug.

I think the above two paragraphs are on the same side of the page.

   Delegation is the DNS is strictly hierachical.

I don't see where the above breaks this.

It's the incoherency in your example that is the breakage.

   You either SWIP the new servers or you slave the zones
   from the customer. In both cases you are following the
   delegation heirarchy. Note even if you slave the zones
   you still have to ensure the delegation is correct.

I guess we will have to agree to disagree on this. I will point out that
the above solution is working in a number of networks without problem.
Sure, if you screw it up, it doesn't work. That's true of DNS generally.

If the delegation from the /8 zone is to the /24 level (as opposed to the /16 level) there are three options for an ISP to "transfer" the delegation to the customer.

1) Send a reassign-detailed or reallocate template (in ARIN lingo) for the space to the RIR. Then the next set of DNS zone files generated will delegate to the customer's name servers.

2) Use DNAME, RFC 2672. Good luck.

(http://www.isc.org/index.pl?/pubs/tn/index.pl?tn=isc-tn-2002-1.html)

3) Use RFC 2317. "I encourage my competitors to operate this way."

'Course, the ISP is free to have the customer just update the ISP's name servers, whether by dynamic update or be zone transfers from hidden masters.

aside) to uphold. In the global DNS, no matter where you ask
question, you should get the same answer.

Really?

Yes.

dig @ns1.arin.net 124.16.172.in-addr.arpa. IN NS

and

dig @ns1.foobar.com 124.16.172.in-addr.apra. IN NS

had better return the same NS RRSet.

An example modeled after the above using real servers:

dig 48.173.209.in-addr.arpa ns @a.root-servers.net

;; AUTHORITY SECTION:
209.in-addr.arpa. 1D IN NS chia.ARIN.NET.
209.in-addr.arpa. 1D IN NS dill.ARIN.NET.
209.in-addr.arpa. 1D IN NS BASIL.ARIN.NET.
209.in-addr.arpa. 1D IN NS henna.ARIN.NET.
209.in-addr.arpa. 1D IN NS indigo.ARIN.NET.
209.in-addr.arpa. 1D IN NS epazote.ARIN.NET.
209.in-addr.arpa. 1D IN NS figwort.ARIN.NET.

dig 48.173.209.in-addr.arpa ns @chia.ARIN.NET

;; AUTHORITY SECTION:
48.173.209.in-addr.arpa. 1D IN NS oak.neustar.com.
48.173.209.in-addr.arpa. 1D IN NS pine.neustar.com.
48.173.209.in-addr.arpa. 1D IN NS willow.neustar.com.
48.173.209.in-addr.arpa. 1D IN NS cypress.neustar.com.

And that is correct. Both are referring you to another zone. The set of servers in the first belong to 209/8, the latter to 209.173.48/8.

What is not apparent is that neither query is resulting in an answer. Instead, the reply is a "go ask someone else" referral. It's like Joe says "ask Bob" and Bob says "ask Charlie."

Whoops - the last is /24.

I'm afraid that above is not an accurate or workable sequence of events.

Not accurate in the sense that I left out some of the queries and left
it as a summary of the relevant ones, however...

[...bind 9.3.1...] snip

Note too that this is from a fresh (empty) cache. Some queries are not
needed when the cache is populated. It is not always as bad as I am
illustrating - but it's easiest to visualize from the "0" state.

1. I ask a root-server for "162.57.173.209.in-addr.arpa./PTR". The
response is a referral to the servers for 209.in-addr.arpa and I am told
there are 7 of them.

And their host names.

2. I ask another root-server for the address of each of the 7 name
servers. This means 7 new queries (14 w/AAAA's) directed to this second
root server. Note that in this example, all 7 name servers are in the
.net domain.

Right... However, pretty quickly, your cache gets these and, unless you
are patholigically stupid about restarting your nameservers often, this
is almost never necessary.

3. I ask the .net name servers the same questions as in #2. From this I
get some "hybrid" answers - referrals enriched with answers - for most of
the 7 name servers. I call these hybrids because, if you adhere strictly
to the DNS protocol specifications, referrals are what you should get.
The addition of the answer records to the referrals is a crutch to help
the Internet run more smoothly. (For this we should thank Verisign
engineers.)

Except that the additional info was done long before Verisign was in the
picture. Not sure why you think Verisign should get credit.

Anyway, again, this query is almost never necessary.

4. The query in step 1 is issued to one of the name servers with a hybrid
answer at this point. The reply received in this "step" is a referral to
the servers for 57.173.209.in-addr.arpa, served up by four machines in
neustar.com.

OK.

5. BIND continues seeking the glue for the name servers w/o hybrid
answers in step 3. BIND does this to have these name servers available
for further querying, but is not necessary for the immediate question.
(This is done in parallel too - to avoid unnecessary latency.)

Right, but, again, this happens once in a blue moon.

6. Armed with new name servers in step 4, a query for each's address is
sent to another root server, which results in referrals to the servers
for .com.

Again, if you actually have to do this. 99+% of the time, you will not.

7. The .com servers also give the same hybrid answers (.com and .net are
on the same machines) for the 4 name servers.

And, as such, you probably already have these answers.

8. The original query is then issued to one of the servers whose address
was obtained in step 7. The result of this is what we wanted all along.

9. BIND may continue seeking addresses for other servers after returning
the answer, filling out its cache.

Why bother to detail all this? It's important to realize that the real
iteration is done only in steps 1, 4, and 8. In step 1 I am being told
who to ask. In step 4 I am also being told who to ask. The rest of the
time I am trying to find out "where to ask". Steps 2,3,5 get me the
addresses for the question in step 4. Steps 6,7,9 get the addresses for
the question in step 8.

Uh, right, but, steps 2,3,5 and 6,7,9 are almost always unnecessary as they
get put in the cache and pretty much left there for anything at all
active pretty quickly.

So - going back to the comment above:

a.root-servers.net returns 16.172.in-addr.arpa. IN NS ns1.arin.net.

The root-servers do not return NS records, the refer the querier to one
of the /8 zones. (Note that not all root servers have the same zones,
some might refer the querier to the in-addr.arpa. zone.)

OK... Fine... You're right, it returns more like

172.in-addr.arpa. IN NS ns1.arin.net.

But I don't see this as a significant distinction, since, ARIN will still
return the next line the same. They are, btw, NS records...

dig @a.root-servers.net 162.57.173.209.in-addr.arpa. PTR

; <<>> DiG 9.2.3 <<>> @a.root-servers.net 162.57.173.209.in-addr.arpa. PTR
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24751
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 0

;; QUESTION SECTION:
;162.57.173.209.in-addr.arpa. IN PTR

;; AUTHORITY SECTION:
209.in-addr.arpa. 86400 IN NS chia.ARIN.NET.
209.in-addr.arpa. 86400 IN NS dill.ARIN.NET.
209.in-addr.arpa. 86400 IN NS BASIL.ARIN.NET.
209.in-addr.arpa. 86400 IN NS henna.ARIN.NET.
209.in-addr.arpa. 86400 IN NS indigo.ARIN.NET.
209.in-addr.arpa. 86400 IN NS epazote.ARIN.NET.
209.in-addr.arpa. 86400 IN NS figwort.ARIN.NET.

;; Query time: 102 msec
;; SERVER: 198.41.0.4#53(a.root-servers.net)
;; WHEN: Wed Mar 16 23:37:33 2005
;; MSG SIZE rcvd: 196

ns1.arin.net returns 124.16.172.in-addr.apra. IN NS ns1.foobar.com.
ns1.foobar.com. returns 124.16.172.in-addr.arpa. IN NS
ns1.subsidiary.com.

If the above two "situations" happened, then there's a violation of the
database coherency principle that DNS tries hard (split-brain aside) to
uphold. In the global DNS, no matter where you ask question, you should
get the same answer.

If that were true, then, there would be no such thing as recursive resolvers
and all clients would have to have recursive libraries. If I ask a recursive
resolver for a foreign A record, I usually get an A record in response.
If I ask a non-recursive server, I usually get NS records in response.
This is no less consistent than that scenario.

I.e.,

dig @ns1.arin.net 124.16.172.in-addr.arpa. IN NS

and

dig @ns1.foobar.com 124.16.172.in-addr.apra. IN NS

had better return the same NS RRSet.

In an ideal world, that's preferable, but, in this scenario, I have
yet to see anything break when they don't, so long as ns1.foobar.com is
within the RR Set returned by ns1.arin.net.

So, I don't think the above is workable or even realistic.

It may not be RFC-Pretty, but, I can guarantee you it does work in the real
world (RFC 2317 subdelegations downstream notwithstanding, I need to look
into that a bit more).

   Delegation is the DNS is strictly hierachical.

I don't see where the above breaks this.

It's the incoherency in your example that is the breakage.

Perhaps, but, as long as the referrals consistently point to an
end and not a loop, in general, it seems to work.

1) Send a reassign-detailed or reallocate template (in ARIN lingo) for
the space to the RIR. Then the next set of DNS zone files generated will
delegate to the customer's name servers.

Obviously, in most circumstances, I'd agree that this is preferred.

2) Use DNAME, RFC 2672. Good luck.

(http://www.isc.org/index.pl?/pubs/tn/index.pl?tn=isc-tn-2002-1.html)

Right.

3) Use RFC 2317. "I encourage my competitors to operate this way."

Very much not pretty with /24 and shorter prefixes.

'Course, the ISP is free to have the customer just update the ISP's name
servers, whether by dynamic update or be zone transfers from hidden
masters.

The zone-transfer based solution would be my second choice. The above
delegation-based solution (NS records) would be my third with 2317 being
fourth and 2672 being last.

Owen

Ed's comments:

If that were true, then, there would be no such thing as recursive resolvers
and all clients would have to have recursive libraries. If I ask a recursive
resolver for a foreign A record, I usually get an A record in response.
If I ask a non-recursive server, I usually get NS records in response.

I was going to respond with a really long tutorial on reading DNS responses, but I figure this is not the forum. In short, yes, the responses are as you say, but to really understand this you have to dig deeper into the protocol details to see the difference between a referral and an answer.

Perhaps, but, as long as the referrals consistently point to an
end and not a loop, in general, it seems to work.

In the IPv4 reverse space, you only have the following zones...

root, arpa, in-addr.arpa, /8, maybe the /16, and /24

In operations, four or five referral possibilities, tops. DNAME and CNAME kind of change this, but they aren't "referrals" in the DNS dictionary, they rewrite the query.

In theory, DNS referrals only loop if the there is a break in the protocol. DNS is a tree, which means "there's only one path between any two points." If you turn the tree into a bush, you've broken it.

1) Send a reassign-detailed or reallocate template (in ARIN lingo) for
the space to the RIR. Then the next set of DNS zone files generated will
delegate to the customer's name servers.

Obviously, in most circumstances, I'd agree that this is preferred.

If that's the case, I don't know why this thread is being continued.

I responded under the presumption you were about to propose some other way to do this. From your earlier message you mentioned "sideways delegations" and "this is what is proposed." Before "proposing" a change to DNS, the details of the protocol have to be clearly understood.