|
Do you find the Support WebCast transcripts helpful?
Let us know!
Microsoft Support WebCast
Microsoft Windows Server 2003 DNS:
Stub Zones and Conditional Forwarding
January 21, 2002
Note This document is based on the original spoken
WebCast transcript. It has been edited for clarity.
Tim Rains: We're going to be talking about Microsoft®
Windows® Server 2003 DNS today. Two new topics we're going to be
focusing on in particular are stub zones and conditional
forwarding (slide 2). It will be a lively presentation, I hope.
What we're going to do right now is start with our discussion of
stub zones, and then move on to conditional forwarding after
that.
Let's just jump right into it. To understand the benefit of
using stub zones and what stub zones are, let's quickly review
some background information (slide 3). There are two types of
queries that clients can send when trying to resolve a name to
an IP address: iterative queries and recursive queries.
Let's discuss iterative queries really quickly. An iterative
query requests the best answer that a DNS server currently has
for a queried name. The DNS server checks its cache, checks the
zones it hosts for an answer, and it may only have a partial
answer. Whatever answer it has, it returns back to the client.
In the case of a partial answer, the client will try to use this
partial answer, which should identify the next DNS server to
talk to. That DNS server that it was referred to, it will send
another query to that DNS server, still looking for the answer
to its question.
Typically, only DNS servers use recursive queries. You won't
see clients using [iterative] queries unless there is some sort
of third-party application written to use an iterative query.
In this graphic (slide 4), just to very quickly summarize
what an iterative query is, you have a DNS server relationship
called the client, it sends an iterative query for let's say
AD.reskit.local. The Server A that it asked for responds back,
saying, "I'm not authoritative for these zones you're talking
about, but I do know who is authoritative for the .local zone;
ask Server B." So that response goes back to the client. The
client then sends an area of query to Server B, and it says,
"I'm not authoritative for reskit.local, but I do know who is
authoritative for AD.reskit.local; go ask Server C." That
response goes back to the client, which then asks Server C about
AD.reskit.local, and the response comes back. Finally, we have
an answer to our question. That's sort of how an iterative query
works.
Next, the other type of DNS query is the recursive query
(slide 5). When a recursive query is sent to a DNS server, the
client is not expecting a partial answer. It wants a complete
answer or an error code, such as "name does not exist" or
"server failure," for example. Windows clients typically send
recursive queries. DNS servers may also send recursive queries.
Here in this graphic (slide 6) we can see what a recursive
query is. Again, our client sends a query for AD.reskit.local.
This time, it's a recursive query, as opposed to an iterative
query. The same DNS server that we saw in our last example
accepts the query, looks at the query, and decides, "Okay I have
to start resolving this query." This time, it doesn't refer the
clients to another DNS server. It handles all this heavy
lifting. It queries DNS Server A, gets referred to DNS Server B,
which refers it to DNS Server C, and finally DNS Server C is
able to resolve the query, sends it back, and then the DNS
server sends the complete answer, the resolved name, back to the
client that originally asked for it.
The difference here is that that DNS server that we sent the
recursive query to is handling all this heavy lifting. It's
doing all the iteration, as opposed to the client. Those are the
two types of queries that clients typically use; so where do
stub zones come into all this?
A stub zone (slide 7) is a read-only copy of a zone. You
can't update it. This zone contains only enough data to identify
the DNS servers that are authoritative for the zone and all the
records for that zone. Basically what we have here is a zone
that contains specific information on what DNS servers are
authoritative for that zone. It doesn't contain all of the data
for a given zone. We'll look at this in a little bit more
detail.
Specifically, stub zones contain the following types of data
(slide 8): first, an SOA record for the zone. An SOA record
defines TTLs, authoritative servers, who the administrator is,
and so on. NS records for the zone are name server records;
these records identify which DNS servers are authoritative for
this zone. And A records, otherwise known as glue records, allow
us to resolve NS records to actual IP addresses so that we can
send queries, connect across the network, and do all sorts of
things.
Again, we have SOA records, NS records, and A records. This
data is used to identify authoritative DNS servers that host the
entire zone that we're looking for. Because a stub zone is read
only, administrators cannot modify records within the stub zone.
All changes must be made in the primary zone on the
authoritative DNS server. If we want to add records to this
zone, we can't go to the stub zone and add records. It's a
read-only zone. It basically gets all its data from a primary
server, and we're going to talk about this a little later.
All the changes that you make to a zone have to be done from
that primary server. The primary server can host a zone that's
not read only; it's read/write. So we can make changes there,
and eventually the stub zone will pick those changes up. We'll
talk about this in just a little bit.
Moving on to the next slide (slide 9), how does this
read-only copy of a zone that contains this name server data
help resolve a query? The stub zone in some cases will improve
the efficiency of how a query is answered. It's all about
efficiency. Because the stub zone can tell us which DNS server
is authoritative for the zone we want to query, we don't have to
perform more queries, looking for authoritative DNS servers. So
we can reduce the number of queries it takes to resolve a name.
This results in less DNS traffic and hopefully faster
response times. Let's see how the use of stub zones affects the
efficiency of the iterative and recursive queries that we
reviewed earlier in the presentation. Referring to this slide
(slide 10), we can see the iterative query that we reviewed
earlier; let's see how the use of a stub zone makes this more
efficient.
Our client sends out an iterative query for AD.reskit.local,
to DNS Server A. The difference here is DNS Server A has a stub
zone for AD.reskit.local. In that stub zone it has some records,
as we mentioned earlier — it has an SOA record, it has an NS
record, and it has an A record or a glue record. The SOA record
identifies the authoritative servers for that particular stub
zone, TTLs, and all sorts of information. The NS record, in this
case, tells the server that Server C is actually authoritative
for AD.reskit.local. The A record, the glue record, basically
tells us the IP address of Server C.
Because DNS Server A has this stub zone, when our client
sends it an iterative query and asks it about this, that server
responds back to the client; but this time it is able to tell
the client who is authoritative for the zone. Instead of just
getting him one hop closer, like we saw in the last example,
where it said, "I'm not authoritative for AD.reskit.local, but I
know who is authoritative for .local; go ask DNS Server B." Here
it knows that DNS Server C is authoritative for AD.reskit.local,
so it tells the client that. Now, the client sends an iterative
query to DNS Server C for AD.reskit.local, and the answer to the
question goes back to the client, and everybody is happy.
Here what we've done is eliminated that hop. We've eliminated
that extra query that would have gone from the client to DNS
Server B. So we referred straight to DNS Server C. This was a
more efficient approach, because we had this stub zone on DNS
Server A.
Next, let's take a look at how it affected our recursive
query (slide 11). Again, our client sent a recursive query for
AD.reskit.local to DNS Server A, and that DNS Server A has a
stub zone on it for AD.reskit.local. And we can see that in the
stub zone it's the same deal, we have an SOA record, an NS
record, and a glue record that all say Server C is authoritative
for AD.reskit.local.
When the query comes into DNS Server A, last time what we saw
(and before we had a stub zone there) was DNS Server A would do
iterative queries, first going to DNS Server A, then B, and then
C, where it finally gets the answer. Here, DNS Server A at the
top already knows that DNS Server C is authoritative for this
zone. Instead of querying DNS Server A or DNS Server B, it
simply queries C, gets the answer, and returns it to the client.
Again, in this case we've eliminated two steps in this query
process. We didn't have to query Server A and we didn't have to
query Server B. Because we knew that Server C was authoritative,
we went straight to Server C, asked it, got the answer, and
returned it to the client. Here we've gained a little bit of
efficiency in the query process.
With that in mind, what stub zones actually do and how they
can improve efficiency, let's talk a little bit about where they
fit in, and when to use them in a network (slide 12). In Windows
2000 DNS, we do not have support for stub zones. This is again a
new feature in Windows Server 2003. In a typical implementation
where we're using Windows 2000 DNS servers, a zone is delegated
from a DNS server hosting a parent domain to a DNS server that
will host a child domain. So we are delegating from parent to
child.
The server hosting the child domain can be configured to
forward back up to the parent server or use root hints to find
names in the parent domain. What we've done is set up a system
where we've delegated responsibility for a child zone down to a
server, and then we've configured that child server, if you
will, to forward back up to the parent or to use root hints, so
that the parent knows where to refer queries for the child zone
to, and the child knows where to find records for the parent
zone. We have this situation where we're using a delegation and
then forwarding back up.
This is a typical implementation today; a lot of our
customers use this type of implementation. The issue with this
particular type of implementation is that the delegation from
the parent to the child must be kept up to date each time a DNS
server is added or removed in the child domain. Any time we add
DNS servers down in the child domain that are going to be
authoritative for that child domain, we have to go up to the
parent and add those DNS servers to that delegation. So just go
into the delegation on the Windows 2000 server and say, "These
new DNS servers are also authoritative," so that the parent
knows that it can refer clients down to those servers in the
child domain when queried for records in the child domain. That
can be a lot of work.
One of the reasons why the delegation was done in the first
place, possibly, was to help out the administrator of the parent
domain. The administrator of the parent domain could delegate
the authority for these records down to the child domain, and
then another administrator down in the child domain can
administer those records. So the administrator in the parent
doesn't have to deal with it, it's out of his or her hair, and
everybody's happy.
The problem is if the administrator down in the child domain
makes changes or adds or removes DNS servers, they then have to
talk to the administrator or the parent domain and get them to
update the delegation. And sometimes that can be a hassle.
It's important to understand that this configuration is still
applicable, even when using Windows Server 2003 DNS (slide 13).
Stub zones do not replace delegations. When a delegation is
created for a zone, a name server (NS) record is added to the
parent that identifies the authoritative server or servers for
the child zone. When the parent zone is transferred to another
DNS server, through a DNS zone transfer, that delegation data is
transferred with the zone. When we use delegations, all the
delegations that we use at the parent are transferred when we
perform zone transfers to other servers.
If we have a primary server and then secondary servers, they
all get copies of that delegation information. They all know
about the delegations to the child servers down in the child
domain. That's really important. For instance, if we said we're
going to use a stub zone instead of a delegation, what will
happen is any secondary copies of that parent zone will be
missing the delegation information. They won't know about the
DNS servers down in the child zone. This is because when a stub
zone is created on the parent or child zone, the stub zone data
does not get transferred when the parent zone gets transferred.
Secondary copies of the parent zone will not contain any data on
the child zone. This can turn out to be a dangerous situation.
If you choose not to use delegations and choose to replace
them with stub zones, you run the risk of all these other DNS
servers in your infrastructure not having any knowledge about
the child zone, which can turn out to be a problem. And
obviously this can lead to some name resolution issues. It's
important to understand that delegations and forwarding, that
particular implementation that we talked about earlier, is still
applicable in Windows 2003 DNS, and stub zones do not replace
delegations — they enhance delegations.
That said, let's move on to the next slide (slide 14). We
recommend that you use delegations in the same way that they
were used in Windows 2000. Again, if you're not familiar with
delegations, forwarding, and the sort of scenario that I
discussed earlier, you can take a look at a KB article I wrote
around the time Windows 2000 was shipped, called "Integrating
Windows 2000 DNS into an Existing BIND or Windows NT® 4.0-Based
DNS Namespace"; it's article number
255913. This article discusses how to do the delegation and
how to do the forwarding, step-by-step. If you're not familiar
with that, have a look at that article. That article is still
applicable to namespace designs using Windows Server 2003 DNS.
Where do stub zones come in then? You're telling me that I
should use care when using these stub zones. We recommend using
stub zones when delegations can't be used effectively (slide
15). For example, environments with disjointed namespaces could
benefit from using stub zones. If we have a namespace — not
necessarily parent and child, because we've already seen that
the best tool that we have when it comes to parent and child is
delegations — stub zones can be helpful if we have, for example,
two parent domains that have different names. We talked about
reskit.local and maybe another domain, mydomain.local; they're
two different names, two different namespaces. It's disjointed —
they exist in the same environment, but they're two separate
names.
In this case, we're not doing a delegation. It makes sense to
use a stub zone, so that we can put a stub zone on the DNS
servers that host zones for, for example, reskit.local. We can
put stub zones on those reskit.local DNS servers that contain
authoritative information on which servers are authoritative for
the mydomain.local domain. That way we don't have to go up to
the root; we don't have to chase records all around to find out
which DNS servers are authoritative for that other domain. So in
a disjointed namespace scenario, stub zones can be very
effective.
A nice feature of stub zones is that they're updated
automatically (slide 16). We mentioned earlier that delegations
are not updated automatically, it is a manual process. One of
the alluring aspects of stub zones is they are updated
automatically. As authoritative name servers are added or
deleted to a zone, the stub zone automatically gets these
changes. We're going to talk a little bit about this.
The new Microsoft Management Console (MMC) in Windows 2003
DNS provides the ability to refresh the stub zone copy. It does
this three ways: Reload, which means basically a local reload;
Transfer from Master; and Reload from Master. We're going to
talk about each one of these briefly.
The Reload (slide 17): Reload will reload data from the
zone's Local.dns file on the DNS server or from the Active
Directory®. It just depends on where that stub zone is being
stored. If it's Active Directory integrated, the stub zone data
is actually stored in an Active Directory partition. If we issue
a Reload command, we would reload it from the Active Directory.
Or if it's just a standard stub zone, that zone is stored in the
.DNS file. If we had a stub zone for reskit.local, it would be
stored in a file called reskit.local.dns on the local hard drive
of that DNS server.
Issuing a Reload command would simply reload the contents of
that file into memory, and the DNS server would start using that
data. Transfer from Master (slide 18) is a little bit different.
A Transfer from Master forces the DNS server to check if the
stub zone has expired. It looks at the SOA record and asks, "Has
this stub zone expired?" If it has expired, it will transfer the
zone from the master. The master is basically where we're
getting the copy of our zone from. We're taking a copy of the
master zone, we're making it read only, and of course we're only
using specific records from that master zone.
Because the stub zone only stores SOA, NS, and A records,
those are the only records that are transferred from the master.
We'll talk a little bit more about this. Again, the key here
with a Transfer from Master is if the stub zone has expired, it
will transfer those NS, SOA, and A records from the master and
reload the zone with them.
The next one on our list is Reload from Master (slide 19).
Reload from Master asks the DNS server to transfer the zone from
the master unconditionally. We're not checking if anything has
expired, we're not checking whether the zone has expired. We're
simply telling it to reload this zone, from the master,
unconditionally. I don't care if it's expired or not, just
reload the zone; and that's what happens.
One of the other features that has been changed from Windows
2000 is the Dnscmd.exe command-line utility has also been
updated with new features (slide 20). This utility is used to
administer DNS from the command line within batch file scripts,
and so on. You can run some of these commands, as you see on the
slide here: dnscmd /ZoneReload, /ZoneUpdateFromDS,
/ZoneRefresh. If we use a /ZoneReload that's the
same as a Reload command, it will reload a zone from a .dns
file. If we use /ZoneUpdateFromDS, that will reload from
Active Directory, or what they call directory services. A zone
refresh is basically Transfer from Master.
The dnscmd command supports the Reload and Transfer
from Master functions. It is noteworthy that it does not support
Reload from Master. It supports the Reload function and the
Transfer from Master function, but not the Reload from Master
function.
Let's talk a little bit more about masters and how these zone
transfers work (slide 21). Stub zone data is transferred to the
DNS server hosting the stub zone from a master server, as I
mentioned earlier. The master server can either be a primary or
secondary for the zone.
Here on the next slide (slide 22) there's a graphic of the
General tab under the properties of a stub zone. So if you
were in the Windows Server 2003 DNS MMC, and you right-clicked
on a zone and selected Properties, you would see this
dialog box. And there is a General tab there. You can add
multiple DNS servers to the list of master servers for a stub
zone. That list that you see with those three IP addresses in it
identifies which servers are masters for the stub zone that this
particular DNS server is hosting. It's going to start at the top
of the list and try to contact that master first, and then do
the zone transfer from that master. If that fails, it's going to
use the next one on the list. Then if that fails, it's going to
use the next one on the list, and so on. You can re-order this
list using those Up and Down buttons, and I think
I'll mention that a little bit later as well.
Stub zones that are Active Directory integrated have an
option called Use the list above as local list of masters
(slide 23). This can kind of be a little confusing, but
hopefully I can shed some light on this. This check box appears
below the list of master servers for a stub zone, just like the
one we saw in the last slide. Basically, it's just a little
check box down there, and you're only going to see that dialog
box when the stub zone is Active Directory integrated. So in a
standard stub zone, you're not going to see this check box.
If you check the check box, you're going to see that you have
the ability to fine-tune our list of masters (slide 24). What
does this mean? By default the list of masters is stored in the
Active Directory. Every DNS server that hosts the same stub zone
uses the same masters. You have this list of masters; it's in
the Active Directory. If you have a stub zone for reskit.local,
every DNS server that hosts that stub zone for reskit.local is
going to use that same list of masters that's stored in the
Active Directory.
The local master's list option that I just mentioned allows
administrators to specify a list of masters on a DNS
server-by-server basis. This way, matches can be specified that
are in the same site as a DNS server hosting the stub zone. What
does this mean? We have Active Directory, we have this list of
masters stored in Active Directory, and all the DNS servers that
host that stub zone for reskit.local, for example, use the same
list of masters.
I can go to one of those DNS servers now, hosting that stub
zone, and I can check that box that says "use this local
master's list," and I can specify a different list that's
specific just to that DNS server, so that the DNS server can use
a different list of masters to reload the stub zone from all of
the other masters. Again, this gives the administrator
flexibility, so that they can specify, let's say, DNS servers
that are close to this particular DNS server hosting the stub
zone, so that we're not doing transfers across WAN links,
satellite links, or something like that.
When this check box is selected, this location in the
registry is checked for a local list of masters (slide 25). Two
values are used for master list management:
LocalMasterServers and MasterServers. The check box
basically toggles this registry value. The MasterServers
value contains a list of masters (slide 26) that all servers
hosting the stub zone use. Stub zones that have the local list
of masters option set will use the list of masters specified in
the LocalMasterServers list value. The local list of
masters option can also be set using Dnscmd.exe, which we
mentioned earlier.
That's it for stub zones. Next, I will give you an overview
of conditional forwarding (slide 27). Of course, you'll probably
have questions at the end of this, so just write down your
questions concerning stub zones, and we'll get into conditional
forwarding right now.
Windows 2000 DNS supports forwarding, what we'll call
standard forwarding or conditional forwarding. What does this
mean? This feature allows the DNS server to forward queries that
it can't answer to a specified DNS server or a list of specified
DNS servers. Basically, with Windows 2000, if a client sends a
query to a Windows 2000 server, and that Windows 2000 server
can't answer that query, and he's been configured with
forwarders, he's going to forward that query to the first
forwarder in the list. Then, he's going to wait for an answer.
That functionality is very important, as we mentioned
earlier, in namespace design, because when we do delegations,
typically we use forwarding as well. If you have, for instance,
a DNS server that hosts a domain for your Active Directory, it
probably knows about names within your domain. So it knows, for
example, that reskit.local is the root of your Active Directory
domain. So it knows all about reskit.local. But does it know
anything about another domain called mydomain.local, or does it
know anything about names out on the Internet? Probably not, and
that's where forwarders come into play.
When it's asked to resolve names in a different domain that
it has no knowledge of, it forwards a query to one of these
forwarders on this list. To illustrate this a little bit more
clearly, here we have a list, and this is from a Windows 2000
DNS MMC (slide 28). Here you can see you select the Enable
forwarders check box. Incidentally, this is underneath the
properties of a DNS server object in the MMC. So you right-click
the DNS server and select Properties, and you see this
Forwarders tab and property sheet. You select Enable
forwarders, and then you enter IP addresses into the list
box.
You can see that you have an Up and Down
button, so that you can change the order of the forwarders. This
is basically the most functionality you have with Windows 2000
forwarding, is this ability to change the order of the
forwarders that you use. So you can select a server closer to
you to be at the top of the list, and the server across a WAN
link to be at the bottom of the list. This is the type of
functionality we have in Windows 2000.
Conventional forwarding or standard forwarding (slide 29) has
a few drawbacks. The forwarders are typically under a heavy
load, because they are asked to resolve recursive queries. When
we looked at our recursive query graphic earlier, it showed the
client sending a recursive query to this server, and then that
server had to perform many iterative queries to find that answer
to send back to the client. That's basically what's happening
here. We have a DNS server that can't answer a query, so it
sends a recursive query; it forwards a recursive query up to the
forwarders. Now the forwarder that forwarded that query has to
do all the heavy lifting, and all the iterative queries to try
to resolve that name. Then it's going to return the answer back
to our DNS server, who will in turn return it back to the
client.
Forwarders can be under a heavy load, because they're
handling all these recursive queries. Also, this type of
forwarding does not provide administrators with much
flexibility. As I mentioned, you can basically change the order
that the list of forwarders is used in, but that's sort of the
extent of it.
This can be limiting when you are trying to design a
complicated namespace. And we're going to talk a little bit
about this later, but many customers have demilitarized zones,
DMZs, basically a network between a couple of firewalls. If they
want, for example, Active Directory replication into and out of
that private network, that can be a problem, because they have
to have these firewalls configured to allow queries through
replication to go through. A lot of times conditional forwarding
will solve design problems within a DMZ, where traditional
forwarding is limited. We'll talk a little bit more about this
later.
This type of forwarding can be limiting when trying to design
a complicated namespace. Conditional forwarding is a new feature
in Windows 2003 DNS (slide 30). Many of our customers have been
asking for this feature, and here it is. Basically it allows
forwarding based on the domain name that is being queried. We
can configure a DNS server to forward queries to let's say one
DNS server, one queried for reskit.local, and forward to a
different DNS server, one queried for AD.reskit.local. So we
have some flexibility here.
Now, when my DNS server is asked about reskit.local, it
forwards to DNS Server A. When it is asked about AD.reskit.local,
it forwards to DNS Server B; so we have a little bit of
flexibility here when we get into complicated namespace
planning.
Again, each domain name can be forwarded to a different set
of DNS servers (slide 31). If a DNS server can't resolve a name,
using its zone data or from its cache, it will still forward the
query to the specified DNS servers for that domain name. Again,
each domain name can have a different forwarders list. This
graphic (slide 32) shows you what the conditional forwarders
list looks like. You can see that queries for resources in the
reskit.local domain are forwarded to a DNS server with an IP
address of 10.0.0.1.
On this next slide (slide 33) you can see that a different
set of DNS servers are specified for the AD.reskit.local domain.
So we have three other DNS servers, none of which are the
10.0.0.1 that we saw in the last slide. This means that when
this DNS server gets a query for reskit.local, it's going to
forward that query to 10.0.0.1. When it gets a query for
AD.reskit.local, it's going to start at the top of this list,
169.254.33.9, and forward the query there.
When the DNS server forwards a query to a forwarder on the
list, it waits for an answer. If it doesn't receive a response,
it tries the next forwarder in the list. The amount of time it
waits is specified in the bottom-right corner of the
Forwarders tab, as you can see. The number 5 that's circled
on the slide shows you this is set for five seconds. The
forwarders list can be re-ordered using the buttons you see
beside it, the Remove, Up, and Down
buttons.
As we've seen, queries for reskit.local and queries for
AD.reskit.local are forwarded to different sets of DNS servers.
Queries for all other DNS domains can be forwarded to another
completely different set of DNS servers (slide 34). Here we can
see that All other DNS domains is highlighted in the
DNS domain box, and below we have yet another different DNS
server from the other two domain names. This one is
192.168.1.100.
To determine which list of forwarders to use (slide 35), the
DNS server compares the queried name to the domain name
conditions in this list. It uses the longest matching domain
name condition in the list. To give you an example of what I'm
talking about here, we have an example query (slide 36),
host.na.ad.reskit.local. In our conditions list we have
reskit.local and ad.reskit.local, so we're going to compare our
query, host.na.ad.reskit.local, to these two conditions,
reskit.local and ad.reskit.local. The longest matching domain
name condition is ad.reskit.local. It matches most of the
queried name. The query is forwarded to the list of forwarders
for that condition. In this case, I believe it was 169.254.33.9.
Again, you can set the forwarder time-out and reorder the
forwarder's list for each domain name condition in the list
(slide 37). You can see the five seconds and the Up and
Down buttons again.
One note, if an administrator disables recursion on the
server (slide 38) — so what would you do is start up the DNS
server's MMC, right-click the DNS server in the MMC, and select
Properties. Under Properties there is an
Advanced tab, and there's a check box that says Disable
recursion. If you select that check box and disable
recursion on that DNS server, all of these Forwarders tab
options will be unavailable; you won't be able to add any
forwarders, you won't be able to delete any forwarders, it's all
unavailable. I just wanted to point that out, because some
administrator somewhere is going to do this, and then ask, "Why
are my forwarders all dimmed?" It's because recursion has been
disabled on the server.
In the registry, each zone basically has its own key (slide
39). If you have a look you can see it's in the
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\DNS
Server\Zones, and then the zone name. So we'd have, for
example, reskit.local there. Underneath that key you will
see a lot of related values. For instance, ForwarderSlave
toggles recursion for a domain; ForwarderTimeout sets the
forwarder time-out for the domain; MasterServers is
basically your list of ordered forwarders for the domain. There
are a lot of different values under that key.
You know all about conditional forwarding now, except when to
use it. When should we use conditional forwarding? We recommend
that you use conditional forwarding sparingly (slide 40). Use it
to solve problems that traditional methods can't solve. Again,
traditional or standard forwarding is still going to be used in
the enterprise, absolutely. The only time you should be using
conditional forwarding is when you have a problem that can't be
solved using normal forwarding or traditional/standard
forwarding.
For instance, environments with disjointed namespaces could
benefit from this new feature. As I mentioned earlier, many
customers have DMZs implemented, and they have expressed
interest in this feature, because it will help namespace design
in environments with tight security constraints. When we're
trying to streamline name resolution, let's say within a DMZ
again, instead of, for example, a domain controller inside your
DMZ, that domain controller would have to be able to send
queries inside the actual network to find the Active Directory,
and so on.
Using forwarding, if that domain controller also had to go
inside the network to Internet names, that wouldn't be a good
thing, because now the DNS server sends them right back out the
Internet, gets name resolution, and then sends it back within
the DMZ. It would be nice if conditional forwarding was enabled,
so that server, that domain controller within the DMZ, can find
the Active Directory using DNS inside the network. And then for
all other queries that end up being out on the Internet, just
forward them off to the ISP or some other DNS server upstream,
so that we don't forward them back inside our network. It's just
a more optimized design.
That's conditional forwarding 101. Thank you for listening to
the presentation.
Otto Cate: Excellent. Thank you very much. Before we
jump into the Q&A, I'd like to share a couple of quick program
notes with our audience.
The Q&A portion of the Support WebCast is intended to
encourage further discussion of the topic that we discussed
today. In addition, one-on-one product support issues are
outside the scope of what we're able to address. If you do need
some more complex technical assistance, please contact a support
professional, either through an online incident or by phone.
Let's get rolling into the first questions.
Are stub zones checked first, then after that anything that
is not in the stub is where the iterative takes over? Is that
how the flow works?
Tim: Right. If I understand the question, the answer
would be yes. This may turn out to be a source of confusion for
administrators. Suppose you put a stub zone on a machine that
also has a delegation, so let's say we have a DNS server and we
delegate a child zone down to a child DNS server, let's call it
AD.reskit.local. If I also put a stub zone on that server, on
that parent server for AD.reskit.local, so for the child, that
stub zone is going to handle queries to the parent server for
AD.reskit.local before the delegation actually works. When the
query goes to the server, data from the stub zone is going to be
used to answer the question, as opposed to the delegation. That
could definitely be confusing to administrators when they try to
troubleshoot problems or figure out what's going on. It's
important to note that the stub zone data is used first. I hope
that answers the question.
Otto: Are stub zones basically a standard that's
used by other DNS vendors as well, or is this something that's
only found in Windows Server 2003?
Tim: Good question. The concept of stub zones has
been around for a while. They have been available in BIND DNS
for quite some time. Any administrators who have worked in
UNIX-based shops or who have used BIND DNS before are probably
already familiar with the concept of stub zones. Our customers
have been asking us about this feature for a long time, and
we're happy to finally be able to offer it to them. I guess I
should point out that is an RFC-based standard, if that's what
they're asking.
Otto: Next question: Using root hints in the child
domain for the parent is an accepted practice, along with the
use of private root hints if the parent doesn't hold the root
zone. Is that accurate?
Tim: Okay. I think I see what they're asking. Is this
an accepted practice? Any time that you can go back up to the
root, you're actually using DNS the way it was intended to be
used. You're using the top-down flow of DNS to resolve your
query. A lot of customers bypass or short circuit that by using
forwarders. We delegate down to the child, the child would
forward back up to the parent, and then the parent would have
the ability to use root hints, let's say, so everybody is happy.
The recommended method is to use root hints whenever possible,
because you're using the top-down flow of DNS.
Altering root hints is completely acceptable. I guess I
shouldn't say we don't have very many customers who do it. We
have some customers who do it. Sometimes they run into problems
doing that. But certainly any time you can use DNS the way it
was intended, using it top-down, that is good method.
Otto: Is there a standard TTL, I assume that's
"time to live," for the stub zone? And how would we update
that on individual records?
Tim: I'm looking at the console of a Windows 2003 DNS
server right now. If I take a look at the standard TTL of a stub
zone, it is set to one hour, which is basically the TTL for all
our zones, by default, if I'm not mistaken. All of this property
sheet here that I'm looking at, which has the SOA details for
the stub zone, they're all unavailable options, because the stub
zone is a read-only copy of the original zone.
If you wanted to change the TTL for the zone, you'd probably
do that on the original parent that's hosting the zone. You go
to the original zone and change the properties there. If you go
into individual records within the stub zone, again, it's all
read only. If you look at the properties of any of the records,
you're simply looking at the same properties of the stub zone
that I mentioned earlier. Again, if you want to change
individual TTLs on records, you do that at the original master
that hosts the primary for the zone.
Otto: Would that also apply if I wanted to modify
the TTL for cached DNS queries?
Tim: You bet.
Otto: Excellent. Thank you. Moving on to the next
question: Can't you use stub zones to keep the delegation
records updated between the parent and child DNS servers?
Tim: No. Unfortunately, you can't. These are two
different mechanisms. That was my first impression, when I first
started playing around with stub zones. It was, "These actually
replace delegations. This is great news. I don't have to keep
the delegations up to date anymore."
The reality is, as I mentioned earlier in the presentation,
there are two dangers here: one is the stub zone data gets used
before the delegation does. And two, if you don't have a
delegation, if you use a stub zone instead of a delegation, if
you're doing zone transfers because you don't have any
delegation information in the parent zone, then for everyone you
perform zone transfer to, none of them are going to understand
that there's a child zone and that there's a delegation in
place. You'd have to make stub zones on every single one of
those servers that have secondary copies of the zone, which can
be an administrative hassle as well.
There are two different mechanisms; the stub zone is a
completely different zone from the parent zone, and therefore
delegation records are actually kept in the parent zone,
separate from the stub zone. So they are completely different
mechanisms.
Otto: There is a follow up on the root hints question
that we asked a little bit earlier: Rather than setting up
child.parent.tld to forward to parent.tld, you're saying that
it's preferred to add or modify the root hints for parent.tld?
Tim: Yes, that's the preferred method. In that
scenario, the KB article I wrote all that time ago,
255913, which I mentioned earlier, walks you through the
step-by step method of forwarding back up to the parent.
Realistically, if you wanted to use DNS top-down, every single
time, which is the way you're supposed to do it, you wouldn't
forward back up to the parent, you would actually use root
hints, which then would leverage the power of top-down DNS.
That's the preferred way to do it.
Forwarding it is completely valid, and that's the way the
vast majority of our customers do it. If you call into a PSS
engineer and tell them, "I have this problem, Active Directory
is not replicating" or something like that, that's the way
they're going to try to help you fix your DNS to get everything
to work. That doesn't necessarily mean that it is the best and
only way to do things. Certainly using root hints can also be a
valid way of configuring the network.
Otto: I believe I need to set permissions to allow
the DNS that hosts the stub zone to transfer from the master. Is
that correct?
Tim: They might be talking about how they want to
limit zone transfers to servers that have stub zones on them.
One of the things that is a little different about stub zone
zone transfers is that it's not really a zone transfer at all.
The mechanism that the zone transfer uses is not the same as a
normal zone transfer.
Because a stub zone only contains the SOA record, NS records,
and glue records, an entire zone transfer is not necessary.
Inside a zone, let's say reskit.local, we would have an SOA
record, maybe some NS records, and some glue records, but we'd
also have all the host records, MX records, and all the other
types of records that are normally used in a network. Because we
don't need any of those records in a stub zone, we don't
transfer them.
In fact, if you were to do a network monitor trace of a zone
transfer from a master to a DNS server hosting a stub zone, the
first thing that would happen would be the DNS server hosting
the stub zone would query its configured DNS server to find out
who is authoritative for that stub zone. If it's already
configured, it will just ask for the SOA record to make sure
that it's authoritative for that stub zone. The answer will come
back "yes" on authoritative.
Next what it will do, typically, is it will use TCP. It will
connect to port 53 through TCP. And then it will send a series
of queries, after it is connected. First it will query for the
SOA record for our stub zones, so let's say reskit.local. It
will get the SOA record back. Then it will send a query for NS
records for reskit.local. It will get the list of NS records
back. Typically, because this is a Microsoft DNS server, we
should get the glue records, along with those NS records in the
additional record section of the packets. Then all the NS
records come back, all the glue records for those NS records,
the TCP session is shut down with a four-way handshake, and
we're done.
It's not really the same type of zone transfer that you have
between a primary master and a secondary server, because we're
not getting all the same records. Because of this, the security
around zone transfers to stub zones is quite a bit different.
We're sending individual queries, and really there's no way
to secure your server from individual queries. It was designed
to answer queries, and that's what it's doing in this case. We
have three queries, a query for an SOA record, a query for NS
records, and a glue record query, if it's necessary.
Otto: Excellent. Can you explain the difference
between a secondary and stub zone?
Tim: It's a good question. A secondary zone is a
read-only copy of a primary zone. Let's say we have a primary
zone on DNS Server A for reskit.local. A secondary zone is a
read-only copy of that zone, of that entire zone. All of the
records in that zone, MX records, all of the A records, records
for your Web servers, records for all your hosts on your
network, and so on; there are many different record types that
our customers use. All of that data is in a secondary zone. One
of the differences between a secondary zone and a stub zone is
that the stub zone only contains a subset of those records, as I
mentioned earlier. It only contains the NS records, the A
records, and the SOA records, and that's it. It's quite a bit
different, in that it only contains a subset — just enough
information to identify authoritative servers.
However, the secondary copy of the zone holds all the records
and can answer queries authoritatively for that zone. The stub
zone simply refers clients to authoritative servers. It helps
the name resolution process, and it doesn't resolve the names
itself. Although it can lead to that.
Otto: Great. We have a follow up to one of the
time-to-live questions that we addressed earlier, about
individual records. They're wondering if we can provide a little
more detail on the methods that should be used. Is there a
registry key, for instance, that can be edited?
Tim: The time to live on the zone, maybe what they're
asking is: Is there any way to change the TTL on the stub zone
as opposed to doing it on the primary zone? The answer is, I
don't know.
The stub zone is supposed to be read only, and it is
refreshed from the master. Most of the properties are
unavailable, because it is read only. Any changes should be made
up at the master. Now, if you're asking about TTLs and that type
of thing up in the master, you can either use the GUI, or yes,
there are keys underneath the zone for TTL and that sort of
thing. I think those are documented in the Knowledge Base.
Otto: Great. Thank you very much for the extra
information there.
The next question: Can a stub zone use a dynamic master
server list, using NS records in the stub zone as a list of
master servers?
Tim: Right. That's a good question. Basically, the
person is asking, "I have this list of NS servers that may
change from time to time, and I have this list of masters that
has set all my stub zone properties. It would be nice that if
the NS records for this zone changed, the list of masters for
the stub zone would change as well." I believe that they're all
static. You go in there and you change the order manually, you
can remove and you can add, but that list is not dynamic, as far
as I know.
Another thing to note along the same lines is with the DNS
client, it does some optimization. If it detects that on one of
the servers, the Round Trip Time (RTT), is faster when querying
one DNS server and slower on another one, it will re-order the
list dynamically. That doesn't happen here with the list of
masters. It's a static list and doesn't change, to my knowledge.
Otto: What sort of load necessitates the use of
stub zones? It would seem that stub zones are used to avoid the
cost of zone transfer to the querying server. Is that correct?
If the environment was truly multimaster, then there would be no
need for stub zones, because every zone to all resources would
be on each server. Then you could just configure each server to
be recursive. Is that pretty much accurate?
Tim: It's actually a really good question, and the
person is making some good points here. It's true that you could
have secondary zones all over the place, but typically customers
in an enterprise environment don't want to do that. They want to
have their own autonomous namespaces. Even if you have a massive
namespace and it's going to be divided up into smaller chunks,
typically you have administrators for each one of those chunks.
They don't want to be dealing with another administrator,
because of zone transfer issues, or the issues to set up a zone
transfer, or something like that.
Plus, the other aspect of this is security. With secondary
zones you can set up a list of servers that you'll do zone
transfers to, and you'll only do zone transfers to those
particular servers. If you had a small enough environment, you
could have secondary zones transferred all over the place. That
would really defeat the purpose of top-down name resolution. You
want to minimize the amount of administrative overhead and make
DNS work for you.
Any chance you get to go up to the root and work your way
down, and find out what servers are authoritative, and resolve
the name that way, it's going to beneficial, because that will
lead to the least amount of administration on your network.
Where stub zones come in, and this person pointed it out, is
it does in some cases reduce the cost of name resolution, where
we are doing fewer queries to resolve a particular name. We
don't have to chase around and find out who's authoritative for
a zone; we already know who is authoritative for the zone, and
we just go ask them.
Otto: How does netmask ordering affect conditional
forwarding?
Tim: That's a good question. I don't think it does. I
haven't read anything on that yet, but the netmask ordering
typically is done on the client, and there is some optimization
on the server as well, when the client queries for a name and we
get a list of IP addresses, let's say a referral list. That list
can be optimized so that the DNS server that's on the same
subnet as the client is at the top of the list, and the client
is smart enough to use that DNS server, as opposed to any other
ones in the list.
That type of optimization is already in the product in some
places. But to my knowledge, I don't think it's related to
conditional forwarding. I could be wrong, but I just don't know
at this point.
{Follow-up answer: Netmask ordering does not affect
conditional forwarding. There is no relation between these two
features.}
Otto: The next question, this is kind of a scenario
question: We have a client running Windows XP on a small
corporate network with Windows 2003 Server DNS, and it has
access to the Internet through ISA or some other application.
The Internet ISP has DNS servers as well. We're wondering when
opening the client network connection and looking at the network
connection details, which DNS servers should be listed? And what
kind of order should be expected?
Tim: It actually turns out to be a fairly complex
question, because it depends what they have on the client. Let's
say that they're using ISA Server. ISA Server is going to handle
some of the name resolution for you, in some cases. For
instance, you have the firewall client or Winsock proxy client
installed on the client, and we try to resolve the name that has
more than one dot in it, so something like AD.reskit.local,
which has two dots in it. That name is sent to the ISA Server,
and the ISA Server is going to do name resolution, to try to
resolve that name, and then send a response back to the client.
If we're just talking about a Web query, again it depends how
many dots are in the name, what the exceptions list on the
browser looks like, and all of that. ISA takes care of a lot of
the Internet name resolution for us. Now, I think the key here
is that your clients are probably a member of a domain. If
they're a member of a domain, they have to be able to find
domain controllers and other resources: LDAP servers, Kerberos,
and all that.
Those clients are going to have to use a DNS server that's
capable of finding all the records used for your Active
Directory infrastructure. Those four underscore zones that are
kept for your forest — _TCP, _UDP, _sites, and _MSDCS — your
clients have to be able to find those records. Typically, the
clients point to an internal DNS server, and that internal DNS
server hosts those records. And they're able to query that
server and find the answers.
Typically, when they want to go out to the Internet they ask
the same server, and that server, either using root hints or
forwarders, goes out to the Internet, resolves the name, brings
it back, and gives it back to the client. Where stub zones may
be an effective tool is if we had a disjointed namespace within
our environment.
Some clients are members of reskit.local and some clients are
members of mydomain.local. Let's say we merged companies, and
they're both within our namespace. It's just completely
disjointed. It makes sense for us to just go ask the server
that's authoritative for the other domain about resources within
that domain, as opposed to going all the way up and trying to
find who is authoritative, and then going to ask that server
anyway.
Stub zones and conditional forwarding can lead to some
optimizations there. Under normal circumstances, in the
environment that they described, there are a lot of things going
on there. ISA is doing some name resolution for you. And it can
lead to a complex environment. What you want to do is keep
things simple. With the clients, if they can continue to use the
DNS server they always used, and that DNS server can resolve
Internet names and can resolve internal names, it's very simple.
Unless you have some performance issues or something like
that, you probably won't use conditional forwarding or stub
zones in that situation.
Otto: Next question. Do you support views in BIND
9?
Tim: Not that I know of.
Otto: Can you give us a little bit more detail
regarding recursion and iteration? It looks like they're
just asking for some more detail on those subjects, in a
nutshell.
Tim: In a nutshell, if you have a Windows client,
your Windows client will send out a query. Let's say you open up
Internet Explorer and you type in a name, www.microsoft.com,
that name has to be resolved to an IP address so that the http
connection can be established to their Web server.
What happens is your client sends a recursive query to its
locally configured DNS server. The recursive query tells the DNS
server, "Look, I want an IP address for this name. Don't come
back with a partial answer. I don't want to know where the .com
root servers are. I don't want to know where any partial answers
are. I want the full IP address of this destination that I want
to go to."
The DNS server then could use iteration to find the answer.
Meaning now he's going to go up to the root of the DNS and ask,
"Who's authoritative for .com?" It will get a list of DNS
servers. "Who's authoritative for Microsoft?" It will get a list
of servers, and will go to those servers. "Can you tell me what
IP address www.microsoft.com resolves to?" It will get the IP
address and then send that back to the client.
The difference is, recursion really means give me a completed
answer, do not give me a partial answer. Iteration is a way that
we find a complete answer, so we find it one step at a time.
Iterative queries are typically issued by DNS servers that are
trying to resolve names for clients. Clients rarely send
iterative queries. I can't think of an instance where our
clients send an iterative query. Maybe there are some
third-party applications or something that sends iterative
queries. I wrote a utility called DNSLint that ships with the
Windows Server 2003 Support Tools. In some instances I used
iterative queries there. But for the most part, clients don't
send iterative queries. I hope that answers the question.
Otto: Overall, it sounds like conditional
forwarding in stub zones might provide the same features, but
the conditional forwarding is easier to configure. Why would I
use stub zones instead of conditional forwarding?
Tim: That's a really good question, and I think that
question will be asked a lot. One of the big differences there
is that conditional forwarding obviously is going to be
processor intensive. Every time a query comes in, it's compared
to the conditions in that list. If you really load up that list,
if you create lots of conditions, you're going to start running
up the processor utilization on your DNS server. Typically, you
don't want to do that, you want to avoid that. In cases where
you're asking, "Should I use stub zones or should I use
conditional forwarding," stub zones are probably going to be a
little bit easier on the DNS server, and your DNS server is
going to be a lot easier for it to process, using stub zones
rather than conditional forwarding.
Really, it comes down to if you have a need to use these
features, as I mentioned, we sort of recommend that in
disjointed namespace situation, in DMZs, in situations where
conditional forwarding doesn't work effectively, or where stub
zones can provide optimization, that's when you should use them.
But just because they're in the product doesn't mean you should
run out and just start using them without a specific problem to
address.
Otto: Given the changes in Windows Server 2003
Kerberos to create transitive cross-forest trusts, and the
acquisition and merger of companies, it's foreseeable there that
there will be increasing amounts of disjoined name spaces in the
enterprise. What are the possibilities of going to a truly
multimaster Active Directory/DNS configuration where each server
is authoritative for all zones contained within the
organization? Is there a point where the incremental transfers
of resources would be too intensive, possibly necessitating the
use of delegation?
Tim: It's a good question, and it's a complex one. I
think that we've taken a good first or second step toward that,
in that with Windows 2003 DNS we now have the ability to use
application partitions. Application partitions allow us to
replicate DNS zone information outside a domain boundary.
I wrote a KB article a while back that kind of describes
this. With Windows 2000 DNS, when you have an Active
Directory-integrated zone, that zone only gets replicated to
other domain controllers within that domain. If we have an
Active Directory domain called AD.reskit.local, and that is the
root of my Active Directory forest, that zone AD.reskit.local
gets replicated to all the other DNS servers in the same domain,
AD.reskit.local. But they don't get replicated to, for example,
reskit.local or child.AD.reski.local, it's only within that
domain. In Windows 2000 a domain is a replication boundary and a
security boundary.
With Windows 2003 DNS and Windows 2003 Active Directory, you
now have the ability to make application partitions. Your DNS
records are going to be in a DNS partition within a system
partition, and that gets replicated around a domain. Now you can
move those records out into an application partition, and then
you can pick and choose which domain controllers you want that
partition to replicate to. So that if you don't want them to
replicate to all domain controllers within a domain, you don't
have to. You can specify replicating them to the machines that
you want to replicate to.
I think that application partitions are the first big step
toward doing what this customer is asking about.
Otto: Can I configure a stub zone pointing to a
Windows 2000 SP3 DNS Server? The stub zone itself would reside
in a Windows Server 2003 environment.
Tim: The answer is, yes, you can. Because the zone
transfer basically works with a series of queries — a query for
the SOA record, a query for the NS records, and typically the
glue records come across with them — you can do that against a
Windows 2000 DNS server, you bet.
Otto: The next question: Is that a good practice,
to use both stub and delegation on the same server for fault
tolerance?
Tim: It's a good question. I think I mentioned this a
couple times. You can do that, you can add a stub zone onto a
server. Let's say we had a DNS server and we've delegated a zone
down to a child domain. We delegate AD.reskit.local from the
parent down to the child. We could also add a stub zone on the
parent for the child domain. We add a stub zone for
AD.reskit.local on the parent domain. So now we have a
delegation and the stub zone. You can do that, and that will
work. Really, it's overkill, because you have two mechanisms to
identify the authoritative servers that are really only one hop
away.
Our recommendation is to continue using delegations, because
it will be less administrative work for you. Do the delegation
any time that parent zone is transferred. The delegation goes
with the parent zone and the secondary server now knows about
the delegated servers, whereas with the stub zone you have to
create the stub zone on every DNS server that has a secondary
copy, so that they know about the child.
We recommend continuing to use the delegations as you have in
the past, and only use stub zones when you have a situation
where delegations won't work.
Otto: Do we currently support automatically
updating or populating delegation information?
Tim: No, we don't. It would sure be nice if we did.
That would be another administrative burden taken off the
shoulders of our DNS administrators. The DNS development team is
looking at all of these features, they prioritize them, and they
slowly but surely get them into the product. So you never know,
in the future they may do that.
Otto: How can you leverage conditional forwarding,
understanding the enterprise DNS servers are UNIX BIND? Compare
Windows 2000 base forwarding configuration versus using Windows
Server 2003 DNS stubs and conditional new features, if possible?
Tim: They want to compare BIND?
Otto: That's what it sounds like.
Tim: With our DNS server, it's been my experience
that when customers call in with problems when they're
implementing, let's say, Active Directory within an
organization, a lot of our customers use BIND servers, and BIND
servers are very popular on the Internet. It's been my
experience that the flavor and the version of the BIND kind of
dictates how successful you're going to be. A lot of our
customers use other products as well, like QIP or products from
Cisco or Nortel, and everyone seems to be making a DNS server
product these days.
Really, in my experience, your Active Directory
implementation goes a lot smoother if you use Windows 2000 DNS
and now Windows Server 2003 DNS. I can't really compare and
contrast the BIND implementation of stub zones and conditional
forwarding to our new implementation at this time. I haven't
seen enough of our customers using conditional forwarding and
stub zones within BIND to really talk about it intelligently.
That doesn't mean they're not using it. They very well may be
using it, but typically when they call in and they have
problems, there are other problems that we look at, like
interoperability problems between BIND servers and our own
servers. We had zone transfer problems, and we worked those out.
And when Active Directory first came out there were a lot of
BIND flavors and versions that didn't support SRV records or
support dynamic updates and secure dynamic updates, and so on.
We've been working out all these interoperability problems,
and now the two DNS servers play very well together. Really,
most of our customers who call in with problems rarely talk to
us about their implementations on BIND, as far as stub zones and
conditional forwarding go.
Otto: Is conditional forwarding also an RFC
standard like stub zones are, and if so, do you know what the
RFC number is?
Tim: That's a good question. I don't know, off the
top of my head. I can follow up with that one, if it's RFC
defined.
{Follow-up answer: This is not RFCed. This type of feature is
outside the scope of RFCs.}
Otto: Next question: Would a stub zone be
preferred over a large secondary zone?
Tim: Possibly. It depends, if you want to avoid using
up bandwidth, or if they're across a WAN link or something. What
you're doing is your deferring the traffic. So if you do a
secondary zone — let's say we're talking about across a WAN
link. You have two sides of the WAN link, and if you have a
secondary zone, the WAN link is going to be utilized by the DNS
server once in a while to do the zone transfers and keep the
zone up to date. They can do incremental zone transfers or full
zone transfers, if it's necessary.
Typically zone transfers won't take that long. Even the
larger zones can be transferred in a few minutes. If you decide,
"I don't want to do the zone transfer anymore, I want to stub
zones," then anybody who asks about that zone is going to be
referred to the DNS server across the WAN link. Now you're going
to have queries going across the WAN link. And depending on how
many queries you expect, the traffic might be more or less than
actually just doing the zone transfer every once in a while.
What I would recommend in specific cases is to do some
profiling and use Network Monitor, put it on the network and
check, when you have a secondary zone there, just what
percentage of the traffic in a given hour or a given day is
actually DNS zone transfers. Then try some stub zones over
across the WAN link and then check it out. Now how much is my
network being utilized by DNS queries?
I suspect that having a large zone transferred, using a
secondary zone across that link, is probably a better idea,
because now the zone is local, if you have a lot of queries. If
you have very few queries, it's probably a marginal difference.
But if you have a lot of queries and a lot of traffic, you
probably want to save that WAN link. So the secondary zone is
probably the way to go.
Otto: What's the recommended order of use: cache,
local zone, stub zone, delegation, forwarding, then route hints?
Tim: I think the way it works is when a DNS server
receives a query, it's going to check its cache first, then it's
going to check its zone data, and if it doesn't do any of that
stuff, I believe it's going to use the forwarders, and then it's
going to end up going to root hints.
Otto: Does any failover function implement in the
stub zone? For example, we have two name servers for one stub
zone, and one name server fails because of a hardware problem,
let's say. If the Windows Server 2003 DNS can function in a way
to avoid sending a query to a root name server, is that
possible?
Tim: There is some logic built in. If we're talking
about stub zones or if we're talking about conditional
forwarding, both those mechanisms have a list. In the case of
stub zones, we have a list of masters. And that list exists
basically for that reason, for failover. If we try to go to the
first master and get information, get a zone transfer from it,
and that master fails to answer, we're going to go to the next
master in the list, and then to the next master, and so on,
until we find one that's working, or else we won't be able to
transfer the zone. There is that optimization there.
If they're talking about clients, a client can query a
server. And if the server doesn't respond, it's going to go to
the next server in its list as well. The client code is a little
different, in that it can optimize the server list. Whereas if
some servers answer more quickly than others, it can put those
servers at the top of the list for the best performance.
Otto: I was hoping that one of these new features
would permit me to selectively transfer some of the records in a
zone, sort of a partial zone transfer. I want to do this to
control the public exposure of records to only a limited subset
of all the records in my production zone. The only way I can
think of to do this is to create and administer a separate
standard primary zone on a stand-alone server with subsequent
zone transfers to standard secondaries. Are partial zone
transfers possible at all?
Tim: I don't think our product has a feature that
allows a zone transfer through the standard zone transfer
methods that we've been discussing to do that, to transfer a
user-specified subset of records. One possibility is to write a
script using Dnscmd.exe, where from a list you could export or
create a zone using a particular set of records. Of course, that
would be static, so you could refresh it every once in a while.
It's just an idea off the top of my head. But our product right
now doesn't support, to my knowledge, zone transfers using a
specified subset of records.
Otto: We have a follow up to a question that we
addressed earlier, about what sort of load necessitates the use
of stub zones. The follow up is as follows: You replied that
using stub zones would theoretically reduce the amount of
querying because local DNS will know the authoritative server to
query, two hops maximum. However, if all DNS were a multimaster
for all zones in the organization, clients would never need more
than one hop to get an authoritative answer. Is that correct?
Thus a multimaster DNS would be the most efficient way to go,
barring administrative boundaries as a function of delegation.
Tim: Sure. If every DNS server had all zones for an
infrastructure for a given namespace on them locally, you would
simply query those servers and you'd get the information that
you want. Certainly, that's true.
Like the person said, barring administration, which is sort
of one of the biggest costs in this whole enterprise, that would
be true. Again, I think that application partitions will address
a lot of this issue, where you can actually replicate DNS
information across domains now. I think that's really what this
person is asking. I agree with them. Again, there are going to
be some costs with replication. A lot of replication is already
being done through Active Directory anyway, so I guess it will
be up to each individual admin, and what kind of network
infrastructure they have, to see whether or not they have the
infrastructure to handle something like that.
Otto: The order of name servers listed on the Name
Servers tab changes. Can you explain this and how that list
affects answers to queries it receives?
Tim: They must be talking about on a particular zone,
if we have a list of name servers on a particular zone. So if
you went to the properties of a forward lookup zone on a server,
and looked at the Name Servers tab, those are the name
servers that are supposed to be authoritative for that zone.
They're stating that that list changes, or the order of the list
changes.
The order of that list may change based on roundtrip time. So
if we're contacting these servers and we find out that some
servers are faster than others, by looking at the roundtrip time
between those servers, that list may be optimized.
The other thing is name servers have a funny way of appearing
and disappearing on a network. Name servers may very well fall
out of a zone. And if they fall out of a zone, obviously you
can't contact them. If the glue records go missing, if there's
an NS record in a zone for a name server but the IP address, the
glue record for that NS record is unavailable, we're not going
to be able to contact that server. So some optimization is
possible based on that roundtrip time, and whether these servers
are even available. I don't know off the top of my head what the
algorithm is to optimize the servers in this list.
Otto: Do you know the order of resolution for the
DNS client when the PC is configured with WINS and DNS servers?
Tim: Sure. It depends on what type of query we're
sending out onto the wire and what operating system we're using.
Is it a NetBIOS name we're trying to resolve, or is it a DNS
host name that we're trying to resolve? Are we on Windows NT
4.0, Windows 2000, or Windows XP?
Generally, Windows 2000 is going to try DNS first, unlike
Windows NT 4.0, which would typically try NetBIOS first. The key
to which mechanism it's going to use is really the length of the
name. If the name is longer than 15 characters, and they also
take a close look at whether there are any dots in the name — if
the servers sees dots in a name or it is longer than 15
characters, it must be a DNS host name. They use the DNS
resolver to try to resolve the name, as opposed to using WINS or
a NetBIOS method. If the name is below 15 characters, it depends
again what type of resolution we're looking for.
If I were to go to the command line on a machine and type
ping, ping is like a Winsock application, it typically tries
DNS name resolution first. If I were to go to the command line
and use, let's say, a netuse command, here it uses a
NetBIOS name. So it's going to try NetBIOS methods first, like
WINS, Broadcast, LMHOSTS, and all that.
Otto: We're down to the last couple of questions
here. Is there a list of DNS changes in Windows Server 2003,
perhaps an enhancements versus Windows 2000 article, or
something of that nature?
Tim: We can definitely follow up on that. There are
DNS papers written, and they do have a list up there of some of
the new features in Windows Server 2003. It definitely exists,
it's just a matter of finding it on the
http://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2f&FR=1
Web site.
{Follow-up answer: The new DNS features list can be found at
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/windowsnetserver/proddocs/server/sag_DNS_ovr_NewFeatures.asp.}
Otto: Do you know off the top of your head if
there are any really good white papers, for instance, in
reference to DNS and Windows Server 2003, or possibly some
information on TechNet that we can easily find?
Tim: Right. I'm now in the process of writing several
new KB articles for Windows Server 2003 DNS that discuss
everything from stub zones and conditional forwarding to
application partitions and how all that new partitioning stuff
works. Obviously, there are other people on the networking team
who are working on DNS-centric content as well.
As far as a white paper goes, I'm not sure if the DNS white
paper has been rewritten or updated for Windows 2003 DNS yet, or
if it has been posted. Probably not, but we can certainly,
again, follow up with this customer as well, and find them good
information, if it's available yet.
{Follow-up answer: The are no public KB articles or white
papers yet, but the link above (http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/windowsnetserver/proddocs/server/sag_DNS_ovr_NewFeatures.asp)
may provide some details.}
Otto: I'm not sure if you've already addressed this.
I'm going to ask it just in case: What problems do stub zones
solve that couldn't be solved using secondary zones in
delegation?
Tim: It's a very good question. Again, I think that
the best example that comes to mind is disjointed namespace. If
we have reskit.local, and we have mydomain.local, typically an
administrator of mydomain.local is not going to be able to
delegate any kind of authority for his mydomain.local zone over
to the administrator in reskit.local. You could conceivably use
a secondary zone. But it depends on the infrastructure and all
sorts of things there. Typically, companies that merge already
have secure infrastructures, they already have firewalls in
place, and they already have their Active Directory forest in
place, so they're not in the same forest to begin with. There
are all sorts of issues involved here.
Again, stub zones are going to be really useful in the
disjointed namespace situation where all we want to do is avoid
iteration, trying to find who is authoritative for a zone, when
it's right beside us. We know where it is, we know who the
servers belong to, let's just specify their IP addresses in a
stub zone, and that way we can take a little bit of the load off
of our DNS servers and optimize this a little bit.
You have to remember, there's still caching going on here as
well. So when one of these servers, even when it does host a
stub zone, gets a query and answers a query for another zone, it
puts that into cache, and it remains in cache for a TTL period.
That also helps caching in all these servers, on the client and
server; it typically helps.
Otto: All right. Thank you. With that, it appears
that we've answered all the questions that were submitted today,
so I'm going to wrap up the session. I want to thank you all for
joining us, and hope that the information was useful. I
certainly want to thank Tim for coming out and giving us a great
presentation.
You can always e-mail us at
supweb@microsoft.com.
Feel free to submit any content suggestions, comments about the
shows, what you'd like to see, and so on. That feedback is
absolutely important to us, and we love hearing from you.
I hope that everyone has the opportunity to tune in again
soon. Thanks, and have a great day. |