Although DNS services are fundamentally simple, certain problems frequently appear. Quite often, unclear wording or poorly documented options in various Windows dialog boxes can cause these problems. Let's look at some common DNS annoyances that plague administrators and how you can deal with them.

Dynamic Updates Won't Update
Windows allows clients to dynamically update A and PTR records with DNS servers to help simplify DNS management across a domain. Thus, in an AD-integrated zone, when you assign IP addresses in your organization, client machines can dynamically update AD with their new IP address. Sometimes, however, you might notice that client systems aren't properly updating their DNS records with the new address. To make updating work, you must configure the DNS server to allow dynamic updates. To do so, open the properties for the DNS zone and select Secure only for the Dynamic updates setting, as Figure 1 shows.

Next, on the client, open the network adaptor's Advanced TCP/IP Settings dialog box, select the DNS tab, as Figure 2, shows, and make sure that Register this connection's addresses in DNS option is selected.

Finally, the DHCP client service—not just the DNS client service—handles DNS registration and must run on each system. Even if you don't use DHCP to assign IP addresses, you need the DHCP client service to run on each machine to dynamically update DNS records.

By default, a client will update DNS records upon start-up, or when an IP address or name changes, or when you force it to update by using the ipconfig /registerdns command. Furthermore, the client will reregister its IP address every 24 hours.

DNS Client Service Causes Performance Hits
When the DNS client service starts, it loads all entries in the hosts file to its cache. If you use a very large hosts file to block access to unwanted host names, you might find that this service significantly slows system performance. In such a case, you might want to disable the service.

However, typically, disabling the DNS client service will have no effect on DNS lookups. You might wonder, then, why anyone would need this service in the first place.

The answer is that the DNS client service isn't necessary for name resolution; it just makes name resolution smarter and more efficient. The main purpose of the DNS client service is to provide local caching of DNS entries. The service is, in effect, a DNS server itself. Instead of publishing a database of DNS records, it simply caches previously resolved DNS records to speed up future lookups. Besides caching, the service optimizes network connections by prioritizing resource records based on network location, speed, and availability.

The DNS client service also manages the list of DNS servers configured on a system. As it does with resource records, the service selects the best DNS server from the server list, based on network location, speed, and availability.

Firewall Rules Need to Be Optimized
When you configure a firewall to allow public requests to a DNS server, you want to build rules that won't let others exploit your configuration. DNS queries typically come in on UDP port 53 from a source port greater than 1023. The DNS server responds from source port 53 to the same port used by the client. Most stateful firewalls can handle DNS responses, so a single rule governing requests should be enough.

If a query response is greater than 512 bytes, the DNS server indicates to the client that the response is truncated. The client can resubmit the query using Extended DNS, which allows for larger UDP responses, or the client can resubmit the response by using TCP. If you allow TCP queries, you'll need a rule that allows packets coming in on TCP port 53 from a source port greater than 1023. If you know that your DNS server won't return query responses larger than 512 bytes, you can leave this port closed. Some DNS servers use UDP or TCP port 53 as both their source and destination port for server-to-server queries, so you might also need to configure your firewall to allow this.

How Windows Queries Multiple DNS Servers
By default, Windows first queries the first listed DNS server on the primary network adaptor. If this server doesn't respond within one second, Windows sends the query to the first listed DNS server on any other network adaptors on the system. If it receives no response within two seconds, Windows sends the query to all DNS servers listed on all network adaptors on that system. If none of these servers respond in two seconds, Windows sends the query to all servers again and waits four seconds. If necessary, it resends the query to all servers and waits eight seconds.

Windows adjusts the list of DNS servers it queries depending on network conditions. If none of the DNS servers on an adaptor reply to queries, Windows assumes a network failure has occurred and doesn't query any servers on that adaptor for 30 seconds. If one DNS server on a network adaptor returns a negative response to a query, Windows won't resubmit that query to any other DNS servers on that adaptor. Furthermore, Windows might adjust the order in which it queries DNS servers to favor a server that responds more quickly than others.

GUIs Slow Configuration
If you do a lot of DNS server configuration for client systems, you'd probably like a quicker, easier method than using the Windows GUIs. Try these commands at a command prompt. To list all of a client's DNS servers, type
c:\>netsh interface ip
  show dns

To clear the list of DNS servers for a network adaptor where "Local Area Connection" is the name of that network adaptor, type

c:\>netsh interface ip <br>   set DNS "Local Area Connection"
   static none

To add a DNS server for a network adaptor where "Local Area Connection" is the name of that network adaptor, type

c:\>netsh interface ip <br> set DNS "Local Area Connection"
 static 192.168.0.1

Domain DNS Problems
Misconfigured DNS settings are a common source of problems with Windows domains. A quick way to check your settings is to perform a lookup for the domain name itself, which you can do with this command:

c:\>nslookup <yourdomain>

The command should return a list of IP addresses that point to each of your DCs. If you get anything else, check your DNS configuration.

You can also test your DNS configuration by performing a quick network configuration test on any Windows XP or Windows Server 2003 system. From a command prompt, type

c:\>netsh diag show test

This test pings all DNS servers and gateways in your TCP/IP configuration. If you have the Microsoft Windows Server 2003 Resource Kit, you can use the netdiag or dnsdiag commands instead, as follows:

C:\>netdiag /test:dns

or

C:\>dnsdiag

If you want to test your public DNS servers from the outside, you can use either one of these URLs: http://www.dnsreport.com or http://www.dnsstuff.com. To test to see if a remote DNS server allows zone transfers, use this command:

c:\> echo ls -d <targetdomain>
| nslookup - <nameserver>

If the name server allows zone transfers for that domain, it will return all records in the zone. Otherwise, it will return an error.

BIND Is an Acronym, Not a Verb
In a DNS server's properties dialog box, you'll find the BIND Secondaries setting. BIND isn't a verb—it's an acronym for Berkeley Internet Name Domain, which is an implementation of DNS used for handling DNS requests on the Internet.

When performing zone transfers, the DNS server uses a faster zone transfer method that utilizes compression and can transfer multiple records per TCP message. This format isn't compatible with older versions of BIND. You need to select the BIND Secondaries option if you use a version of BIND earlier than 4.9.4. This option tells the Windows DNS server not to use the faster zone transfer methods.

When to Disable Recursion
Recursion is the process that DNS uses to track down the authoritative server for a domain. If you query a DNS server for a host in a domain and the server isn't authoritative for that domain, nor does the server have a cached copy of the requested host record, the server recursively queries other servers on the Internet on your behalf to track down the DNS server with the correct answer. If a server doesn't do recursion, it either tells the client it doesn't know that record or it tells the client where it might find the record.

To determine when you should disable recursion, you need to look at what types of records the DNS server will hold. If the DNS server for a domain knows all the records for a domain, it should never provide recursion. Your DC, for example, knows about every host in your domain, so there's no need for it to send a request elsewhere. The same is true for a public DNS server that holds published domain records.

You should typically allow recursion on servers that provide DNS lookups for local users. That is, if you provide Internet access to a user, you should also provide that user with a recursive DNS server that can resolve any Internet host name.

It's important not to make recursive DNS servers available outside of your organization. A server could be attacked and used as an amplifier for Distributed Denial of Service (DDoS) attacks.

Internet Host Blocking
Here's a problem that DNS isn't responsible for but that it can partially help you solve. You can block user access to undesirable Internet hosts by using a firewall or a proxy server, but those solutions don't work well for all situations. An ISP, for example, might want to block certain host names without requiring customers to use a proxy server and without putting too much of a load on the firewall. Blocking host names at the DNS server is one alternative.

To do this, you first need a list of hosts to block. You can get a malware block list formatted for Microsoft DNS servers from Malware Block Lists at http://www.malware.com.br/#blocklist. You can directly import this block list into your DNS server. If you're willing to do some reformatting, you can also get block lists from hpHosts Online at http://www.hosts-file.net or Spamassassin Blacklists at http://www.sa-blacklist.stearns.org/sa-blacklist.

Another alternative is OpenDNS (http://www.opendns.com), a free DNS service that provides filtering by blocking known phishing hosts. To use OpenDNS, you just place its DNS server IP addresses in your network configuration.

Keep in mind that using DNS for blocking only prevents name lookups for hosts on these lists. It doesn't prevent users from accessing hosts by entering their IP address, and it can't block new hosts that haven't yet been listed.

Learn the Fundamentals
DNS problems generally have simple solutions, but you do need to have a good understanding of how DNS works. Expand your knowledge of DNS—for any IT professional, it's certainly time well spent.