You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ping回复主机名来源疑问:为何与DNS PTR记录不一致?

为什么Ping回复的主机名和DNS PTR记录不一致?

这是个典型的解析优先级或缓存导致的问题,咱们一步步梳理可能的原因和排查方法:

可能的原因及排查步骤

1. 本地hosts文件覆盖了DNS解析

系统在解析IP地址对应的主机名时,hosts文件的优先级远高于DNS。如果你的本地/etc/hosts(Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)里存在如下条目:

10.1.128.76    A.test.com

那ping工具会直接用这个映射,完全忽略DNS的PTR记录。

排查命令

cat /etc/hosts | grep 10.1.128.76

2. 本地解析服务的缓存问题

很多Linux系统会用systemd-resolvednscddnsmasq这类服务缓存解析结果,哪怕DNS的PTR记录已经改成了B.test.com,本地缓存的旧记录(A.test.com)还会生效。

排查&修复方法

  • 如果你用的是systemd-resolved
    # 查看当前缓存的反向解析结果
    resolvectl query -x 10.1.128.76
    # 清理缓存
    resolvectl flush-caches
    
  • 如果你用的是nscd
    # 清空主机名缓存
    nscd -i hosts
    # 或者直接重启服务
    systemctl restart nscd
    

3. 系统使用的DNS服务器与dig指定的不一致

注意到你执行dig时指定了DNS服务器10.1.129.9,但系统默认的DNS服务器可能是另一个(比如路由器DNS、本地缓存DNS),这个服务器上的PTR记录可能还没更新,或者存在旧的映射。

验证方法
用系统默认的解析工具查反向解析,对比dig的结果:

# 使用系统默认DNS查询反向解析
host 10.1.128.76
# 或者
nslookup 10.1.128.76

如果这两个命令返回A.test.com,而dig指定10.1.129.9返回B.test.com,说明系统默认DNS和你指定的不是同一个,需要同步PTR记录或修改系统DNS配置。

4. 目标主机的自身主机名配置

目标主机(10.1.128.76)的本地主机名可能是A.test.com,部分系统在处理ICMP回复时,会让ping工具优先读取目标主机声明的主机名(而非DNS反向解析),不过这种情况比较少见。

排查方法
登录目标主机,执行以下命令查看主机名:

# 查看完全限定域名(FQDN)
hostname -f
# 检查本地hosts里的自身映射
cat /etc/hosts | grep $(hostname -i)

总结

最常见的根源是本地hosts文件配置解析缓存未更新,其次是系统DNS服务器与你测试用的DNS服务器不一致。按照上面的步骤逐一排查,应该能快速定位问题。

内容的提问来源于stack exchange,提问作者AngusW

火山引擎 最新活动