IMPORTANT: This article contains information about editing the registry.
Before you edit the registry, make sure you understand how to restore it if
a problem occurs. For information about how to do this, view the "Restoring
the Registry" Help topic in Regedit.exe or the "Restoring a Registry Key"
Help topic in Regedt32.exe.
MORE INFORMATION
WARNING: Using Registry Editor incorrectly can cause serious problems that
may require you to reinstall your operating system. Microsoft cannot
guarantee that problems resulting from the incorrect use of Registry Editor
can be solved. Use Registry Editor at your own risk.
For information about how to edit the registry, view the "Changing Keys
And Values" Help topic in Registry Editor (Regedit.exe) or the "Add and
Delete Information in the Registry" and "Edit Registry Data" Help topics
in Regedt32.exe. Note that you should back up the registry before you edit
it.
To change these parameters, use the following procedure:
- Start Registry Editor (Regedt32.exe).
- From the HKEY_LOCAL_MACHINE subtree, go to the following key:
\SYSTEM\CurrentControlSet\Services
- From the Edit menu, click Add Value and add a value to the key described
in the appropriate entry below. Type in the value, and use the
"Data Type" check box to set the value type.
- Click OK.
- Quit Registry Editor.
- Restart the DNS Server for the above changes to take affect.
Server Parameters
Several registry parameters determine behavior of the entire server. Each of these is a registry value under
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\DNS\Parameters
NOTE: These registry keys are read only at startup. Some may be reset and, in some cases, the server behavior dynamically changed, through the DNS Administrator. But if manually reset, the DNS server must be restarted to pick up the new value.
All of the DNS parameters are registry values located under subkeys of:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\
SecureResponses
Value: SecureResponses
Added: SP4 (April 1998)
Type: DWORD (Boolean)
Default: NoKey = OFF (Non-secure data is kept)
Function: Determines whether server attempts to clean up
responses to avoid cache pollution.
With the Service Pack 4 (April, 1998) release, the SecureResponses flag is off. Create the SecureResponses value and set it to 1 to enable it. Responses from other DNS servers may contain records whose validity are open to question.
Examples: DNS server makes MX query for domain.samples.microsoft.com to
samples.microsoft.com's DNS server. The samples.microsoft.com DNS server responds but includes A record for A.ROOT-SERVERS.NET giving its own address. The rogue DNS server has then gotten itself set up as a root server in your DNS server's cache. Less malicious, but more common, are referral responses (or direct responses from BIND, see WriteAuthorityNs for discussion) that contain records for the DNS of an ISP:
Authority section:
new.samples.microsoft.com NS ns.new.samples.microsoft.com.
new.samples.microsoft.com NS ns.isp.samples.microsoft.com.
Additional section:
ns.new.samples.microsoft.com. A 1.1.1.1
ns.isp.samples.microsoft.com. A 2.2.2.2
NOTE: The address record for the ISP happens to be old\stale.
If SecureResponses is on, records that are not in a subtree of the zone queried are eliminated. For example, in the example above, the samples.microsoft.com. DNS server was queried, so the all the samples.microsoft.com records are secure, but the ns.isp.microsoft.com. A record is not in the sample .microsoft.com. subtree, and is not cached or returned by the DNS server.
RecursionRetry
Value: RecursionRetry
Added: Windows NT 4.0
Type: DWORD
Default: NoKey (Retry is three seconds)
Function: Set the interval before retrying a recursive lookup.
To resolve recursive client queries, the DNS server queries remote DNS
servers. When no response comes back, the server must retry (to the same
and/or other DNS servers). This key allows override of default retry
timeout. If the RecursionRetry key does not exist or is zero, retries are
made after three seconds. If the RecursionRetry key is nonzero, its value
(in seconds) sets the retry interval. Users should not alter this key.
RecursionTimeout
Value: RecursionTimeout
Added: Windows NT 4.0
Type: DWORD
Default: NoKey (Timeout is 15 seconds)
Function: Set the timeout before DNS server gives up recursive query.
To resolve recursive client queries, the DNS server queries remote DNS
servers. When no response comes back, the server from any of the remote
servers contacted, the DNS server must eventually give up on the query and
report to the client that it was unable to answer it (response code is
SERVER_FAILURE). This key allows override of default retry timeout. If the
RecursionTimeout key does not exist or is zero, the DNS gives up after 15
seconds. If the RecursionTimeout key is nonzero, its value (in seconds)
sets the retry timeout. In general the 15-second timeout allows any
outstanding response from anywhere to get back to the DNS server. Users are
discouraged from altering this key.
RoundRobin
Value: RoundRobin
Added: SP4
Type: DWORD (Boolean)
Default: NoKey (Round robin A records)
Function: Determine whether server round robins multiple A records.
By default, the Microsoft DNS server round robins A records when multiple A
records exists for a name. This is a primitive load balancing mechanism.
If the RoundRobin key does not exist or is nonzero, the DNS server round
robins A records. If the RoundRobin key is zero, the DNS server returns A
records in a fixed (file load) order.
LocalNetPriority
Value: LocalNetPriority
Added: SP4
Type: DWORD (Boolean)
Default: NoKey (Give local net records priority)
Function: Determine the priority of multiple A records given in
response.
By default, the Microsoft DNS server gives priority to the "closest" A
record to the client's IP address when there are multiple A records for a
name. This is designed so that the client application will attempt to
connect to the closest (and fastest) IP available.
Example: www.samples.microsoft.com has three A records: 198.27.1.1,
20.23.25.1, and 131.21.31.7. Client at 131.21.198.25 queries DNS server for
www.samples.microsoft.com. Instead of returning in database order or round
robin, the DNS server notices that the client's 131.21 address matches the
network (class B) portion of the 131.21.31.7 address. The DNS server then
reorders the addresses in the response:
131.21.31.7
198.27.1.1
20.23.25.1
If the client query comes from 12.123.248.12, then none of addresses
matches in the network portion of the address and NO local net priority
reordering is done.
If more than one address matches in the network portion, then the matching
addresses are ordered with the closest match first so that the result is
most likely to be correct regardless of any subnetting.
Example: www.samples.microsoft.com has four A records: 198.27.1.1,
20.23.25.1, 131.21.31.7, and 131.21.196.8. Client at 131.21.198.25 queries
DNS server for www.samples.microsoft.com. Now both 131.21 addresses are
returned at the top, but the 131.21.196 address is first because it matches
the client's IP address down through the 131.21.192 subnet (that is, it
would match even if subnetting down to a 255.255.248 mask). So the response
is ordered:
131.21.196.8
131.21.31.7
198.27.1.1
20.23.25.1
NOTE: Having LocalNetPriority supersedes round robining. However, if
RoundRobin is on, the records continue to be round-robined, and are
returned in the current round-robin order when no LocalNetPriority match
can be made.
AddressAnswerLimit
Value: AddressAnswerLimit
Added: SP3
Type: DWORD
Default: NoKey (No limit)
Function: Limits number of A records put in answer to query.
The AddressAnswerLimit registry key puts a limit on the number of A records
that are actually written to the answer section in a response to an A
record query. This has two benefits:
- Allows Windows 95 clients to operate correctly, even when a DNS name is configured with more than 28 A records.
- Keeps remote DNS servers resolving a name from retrying with TCP when
they receive a truncated response. (In general, client resolvers will
not retry with TCP, whether the truncation bit is set or not.)
If the AddressAnswerLimit registry key is nonzero, it specifies a limit on
the number of A records written into an answer for a name. The limit itself
is bounded 5 < x < 28. So an AddressAnswerLimit value greater than 28, will
result in a limit of 28, and a value 0 < x < 5, will result in a limit of
five. (The bottom limit of 5 is there so that, if multiple addresses are available, at least enough is given back so that one computer is likely to be found.) In
addition, when AddressAnswerLimit is set, the truncation bit is not set on
a response, even if the packet space is exhausted before the limit for
writing A records is reached (see benefit 2 above).
NOTE: These restrictions are only for simple A record queries to the name.
They do not affect other query types.
If the AddressAnswerLimit registry key does not exist or is zero, A record
responses are not limited. All A records for a name are written to the
packet. If all the records do not fit in a UDP DNS packet, the truncation
bit it set.
LooseWildcarding
Value: LooseWildcarding
Added: SP4
Type: DWORD (Boolean)
Default: NoKey (prior to SP4 loose; after SP4 RFC wildcarding)
Function: Set server to do wildcarding loosely.
Example:
Zone sample.microsoft.com.
*.sample.microsoft.com. MX 10 mailserver1.sample.microsoft.com.
sample.microsoft.com. MX 10 mailserver2.sample.microsoft.com.
host.sample.microsoft.com. A 1.1.1.1
Host.sample.microsoft.com, type MX
According to RFC, the host.samples.microsoft.com.com query is looked up and
no MX record is found at host.samples.microsoft.com, but an A record does
exist. Hence, no wildcard matching is done. The query responds with an
authoritative empty response (no error and no records). Smart mail programs
would then requery for an A record for host.samples.microsoft.com and use
the A record to send mail directly to host.samples.microsoft.com.
Before Service Pack 4 (SP4), the Microsoft DNS server finds no MX record at
host.samples.microsoft.com, notes that MX is a wildcard type, and notes
that samples.microsoft.com is the parent of a wildcard name. It checks that
wildcard name *.samples.microsoft.com for MX records, finds a match and
returns it. The mail program would then send mail to
mailserver1.samples.microsoft.com.
The advantages of each approach should be apparent. The RFC approach is
easier if your hosts are capable of receiving mail directly. However, if
you advertise hosts that are not mail servers, you also need to explicitly
add MX records at each host. The Microsoft DNS approach allows you to set
up just two MX records and cover queries to the entire zone. However, if
you have individual hosts that should receive there own mail, you need to
put MX records at each of these hosts.
If the LooseWildcarding key does not exist or is zero, the server (after
SP4) will follow the RFC specified wildcarding behavior. The administrator
is advised to put MX records in for all hosts that are not capable of
receiving mail.
If the LooseWildcarding key is nonzero, the server aggressively seek out
the closest wildcard node (equivalent to shipped Windows NT 4.0 behavior).
The administrator should put MX records at both the zone root and in a
wildcard node (*) directly below the zone root. The administrator should
also put self-referent MX records on hosts that are to receive their own
mail.
BindSecondaries
Value: BindSecondaries
Added: Windows NT 4.0
Type: DWORD (Boolean)
Default: NoKey (Send uncompressed transfers to non-MS secondaries)
In Admin: No.
Function: Determine AXFR message format when sending to non-MS DNS
secondary.
BIND did not implement the RFC specified zone transfer protocol.
Specifically, BIND sends one zone record in every DNS message. This adds
the unnecessary overhead of a message header with every record; it also
eliminates any possibility of name compression. BIND servers prior to 4.9.4
will refuse zone transfer messages that properly buffer multiple records in
each DNS message, and some implementations may fault. More recent BIND
versions (4.9.4 and later) will both accept and send the faster compressed
format, but may be configured with a list of servers that must receive the
old format.
The Microsoft DNS server can send (and receive) messages in either format.
To allow Microsoft to Microsoft transfers to use the faster format, a
Microsoft DNS secondary appends two characters (MS) to its AXFR request
packet. When a Microsoft master receives a request with this signal, it
then sends the transfer using the fast compressed format. If the request
does not contain this signal, the transfer is sent using the slower one
record per message format, to avoid causing problems if the secondary is an
old BIND implementation.
If the BindSecondaries registry key does not exist or is nonzero, the
server uses the paradigm described above and will always send transfers to
non-Microsoft DNS secondaries in the uncompressed BIND compatible format.
If the BindSecondaries registry key is zero, the server will send all
transfers in the fast format. Note that the default behavior is adequate to
transfer to any DNS server. The only reason to use the BindSecondaries key
is when you have NEW BIND servers (or non-BIND, non-Microsoft servers) that
are secondaries to an Microsoft DNS server and you want to get the fastest
possible transfer performance.
As the fixed BIND servers replace older versions, the defaults to this key
may be altered so that the efficient transfer is the default even to non-
Microsoft servers.
WriteAuthorityNs
Value: WriteAuthorityNs
Added: SP3
Type: DWORD (Boolean)
Default: NoKey (Do not write unnecessary NS records)
Function: Write NS records to authority section on successful response.
By default, Microsoft DNS server uses the authority section only as
outlined by RFC1034:
- For NS records when making a referral.
- For an SOA record to allow caching of a NAME_ERROR response. (In
compliance with dnsind clarify draft.)
If the WriteAuthorityNs registry key is nonzero, the server will write NS
records for the zone into the Authority section when making a successful
authoritative response. If the WriteAuthorityNs registry key does not exist
or is zero, the server use the default RFC compliant behavior and only
write to the Authority section in the two cases noted above.
NOTE: This key exists only for those who need Authority data for some
programmatic reason.
WriteAuthoritySoa
Value: WriteAuthoritySoa
Added: SP3
Removed: SP4
Type: DWORD (Boolean)
Default: NoKey (Do not write unnecessary SOA record)
Function: Write NS records to authority section on successful response.
The use of this key is deprecated. Use WriteAuthorityNs (see above) if
mimicking of BIND authority section behavior is desired.
ListenAddresses
Value: ListenAddresses
Added: Windows NT 4.0
Type: BINARY
Default: NoKey (Use all IP interfaces)
Function: Determines IP addresses bound to DNS server.
Some DNS resolvers (including Windows 95) require that the IP source
address of a DNS response be the same as the IP address they sent the query
to, or they reject the response. Accommodating these resolvers means that
the DNS server must explictly bind sockets to IP addresses on the computer.
The ListenAddresses key is a list of IP addresses for the DNS server to
listen on. The list is not dotted IP strings, but a counted array of raw
addresses in net byte order. It should be configured through the Server
Properties, Interfaces dialog box in the Administrator tool. Editing the
registry key is discouraged. If the ListenAddresses key does not exist, the
DNS server attempts to bind to every IP address on the computer. This is,
in general, desirable behavior.
However, there are a few reason why using the listen address key may be
desirable:
- For administrative reasons, you do not want to use some interfaces.
- Computer contains lots of IP interfaces, binding to all of them is
expensive.
- If greater than 35 IP interfaces, the DNS server will not detect and
bind to all IP interfaces properly. Because of limitations in Winsock's
GetAddressByName(), only the first 35 interfaces are returned to the DNS
server. If your DNS should be bound to any addresses beyond the first
35, whether all the addresses on the computer or some subset,
ListenAddresses is required to get the correct binding.