DNS Resolution Issue: Ping Succeeds but NSLOOKUP Fails on Windows Server 2008


4 views

I recently encountered a puzzling scenario with a Windows Server 2008 Standard edition where hostname resolution behaved inconsistently:

C:\>ping server01.nmg.local
Pinging server01.nmg.local [192.168.1.15] with 32 bytes of data...

C:\>nslookup server01.nmg.local
Server:  nmgdc1.nmg.local
Address:  192.168.1.10

DNS request timed out.
*** Request to nmgdc1.nmg.local timed-out

The discrepancy occurs because ping and nslookup use different resolution methods:

  • Ping uses the full DNS resolution sequence (DNS cache → hosts file → DNS servers → NetBIOS)
  • NSLOOKUP bypasses the local cache and goes directly to the configured DNS server

Run these commands to gather more information:

ipconfig /all
nslookup -debug server01.nmg.local
dnscmd /info

Try these troubleshooting steps in order:

1. Check DNS Server Configuration

# Verify forwarders are configured correctly
dnscmd /info | find "Forwarders"

2. Test Different Query Types

# Try both forward and reverse lookups
nslookup -querytype=soa nmg.local
nslookup -querytype=ptr 192.168.1.15

3. Examine Firewall Settings

Verify UDP port 53 is open between the client and DNS server:

netsh advfirewall firewall show rule name=all | find "DNS"

4. Clear DNS Cache and Test

ipconfig /flushdns
nslookup server01.nmg.local 8.8.8.8  # Test with public DNS

For persistent issues, consider these advanced steps:

Packet Capture Analysis

Use Wireshark to capture DNS traffic:

filter: udp.port == 53

Check for DNS Server Health

# Test DNS server functionality
dcdiag /test:dns /v /e

Examine Forward and Reverse Zones

# List all zones
dnscmd /enumzones
# View specific zone records
dnscmd /zoneprint nmg.local

In my case, the issue was caused by an incorrect forwarder configuration combined with stale DNS cache entries. The solution involved:

# Correct forwarders
dnscmd /resetforwarders 192.168.1.10 /timeout=3
# Force zone replication
repadmin /syncall /AdeP

In Windows Server environments, it's not uncommon to encounter situations where basic connectivity checks like ping hostname succeed while DNS-specific tools like nslookup fail. This particular scenario where:

ping serverhostname       # works
nslookup serverhostname   # times out

indicates a deeper DNS resolution issue that needs investigation.

The key difference lies in how these commands resolve hostnames:

  • Ping uses multiple resolution methods (DNS, NetBIOS, LLMNR, hosts file)
  • NSLOOKUP is a pure DNS query tool that doesn't fall back to alternative methods

First, check the DNS server configuration:

nslookup
> server 192.168.1.10
> set debug
> examplehostname

This will show you the exact DNS query being made and where it fails.

1. Check DNS server connectivity:

Test-NetConnection -ComputerName 192.168.1.10 -Port 53

2. Verify DNS records exist:

Get-DnsServerResourceRecord -ZoneName "nmg.local" -Name "nmgdc1" -RRType "A"

3. Check for firewall rules blocking DNS:

netsh advfirewall firewall show rule name=all | findstr "DNS"

Here's a PowerShell script that performs comprehensive DNS checks:

function Test-DnsResolution {
    param(
        [string]$Hostname,
        [string]$DnsServer
    )
    
    # Test basic ping
    $pingResult = Test-Connection -ComputerName $Hostname -Count 1 -Quiet
    
    # Test NSLOOKUP
    try {
        $nsResult = Resolve-DnsName -Name $Hostname -Server $DnsServer -ErrorAction Stop
        $nsSuccess = $true
    } catch {
        $nsSuccess = $false
    }
    
    # Return diagnostic object
    [PSCustomObject]@{
        Hostname = $Hostname
        PingWorks = $pingResult
        NslookupWorks = $nsSuccess
        DnsServer = $DnsServer
        Timestamp = Get-Date
    }
}

# Usage example:
Test-DnsResolution -Hostname "nmgdc1.nmg.local" -DnsServer "192.168.1.10"

When dealing with such issues, verify these Windows networking components:

  • DNS client service (dnscache) status
  • Network interface DNS server priority
  • Conditional forwarders in DNS management
  • DNS suffix search list

To check interface DNS configuration:

Get-DnsClientServerAddress -InterfaceAlias "Ethernet" -AddressFamily IPv4