Resolve-DnsName查询无记录主机返回固定异常IP的问题咨询
无效DNS名称总是返回固定IP的原因及解决方法
可能的原因
- 通配符DNS记录:你的DNS服务器上配置了形如
*.yourdomain.com的A/CNAME记录,指向10.221.33.79。任何未在DNS区域注册的子域名都会匹配这条通配符记录,返回对应IP,这是最常见的触发场景。 - DNS后缀自动追加:客户端DNS设置的「DNS后缀搜索列表」会给短主机名自动追加域名后缀(比如把
poopyface变成poopyface.yourdomain.com),拼接后的域名恰好命中了通配符记录。 - (可能性较低)本地DNS缓存或恶意劫持:这类情况通常不会让所有无效名称都返回同一个IP,可优先排查前两种情况。
验证方法
用
nslookup直接测试:nslookup poopyface若返回的
Name字段是带域名后缀的poopyface.yourdomain.com,且Address为10.221.33.79,即可确认是通配符记录导致。指定权威DNS服务器测试:
Resolve-DnsName poopyface -DnsServer <你的权威DNS服务器IP> -ErrorAction Stop若此时抛出「不存在这样的主机」错误,说明是本地DNS服务器的通配符记录在起作用。
兼容PowerShell 5/7的解决脚本
针对通配符记录场景,可在脚本中增加判断,排除无效的通配符解析结果:
function Test-ValidDnsRecord { param( [Parameter(Mandatory = $true)] [string]$HostName, [string]$ForbiddenWildcardIp = '10.221.33.79' ) $isValid = $false $originalErrorAction = $ErrorActionPreference $ErrorActionPreference = 'Stop' try { $dnsResults = Resolve-DnsName -Name $HostName # 过滤通配符IP,同时验证解析名称与查询名称匹配(针对FQDN查询) $validResults = $dnsResults | Where-Object { $_.IPAddress -ne $ForbiddenWildcardIp -and $_.Name -eq $HostName } $isValid = $validResults.Count -gt 0 } catch [Microsoft.PowerShell.Commands.ResolveDnsNameException] { # 捕获NXDOMAIN错误,确认记录不存在 $isValid = $false } finally { $ErrorActionPreference = $originalErrorAction } return $isValid } # 调用示例 Test-ValidDnsRecord -HostName 'poopyface'
补充说明
- 如果DNS服务器的通配符记录是业务必需的,上述脚本通过排除固定IP的方式区分有效记录与通配符解析结果。
- 若查询短主机名(不带域名后缀),可在
Resolve-DnsName中添加-NoHostsFile参数避免本地hosts干扰,同时指定-Type A只查询A记录,减少无关结果。
内容的提问来源于stack exchange,提问作者Tom Salciccia
相关产品推荐
相关产品推荐

