You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,可优先排查前两种情况。

验证方法

  1. 用nslookup直接测试:

    nslookup poopyface
    

    若返回的Name字段是带域名后缀的poopyface.yourdomain.com,且Address为10.221.33.79,即可确认是通配符记录导致。

  2. 指定权威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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:52:53