Windows 10 上的名称解析问题

Windows 10 上的名称解析问题

我有一个小型办公室网络,其中有几台不同版本的 Windows / Ubuntu 机器。几天前,一台 Windows 机器无法通过主机名访问 Ubuntu 机器上的任何服务。

使用 DNS 解析 Ubuntu 主机名:

C:\>nslookup gruit
Server:  router.asus.com
Address:  192.168.73.1

Name:    gruit
Address:  192.168.73.152

但是我不能使用诸如pingftpssh等来表示主机名。例如:

C:\>ping gruit
Ping request could not find host gruit. Please check the name and try again.

使用以下任一命令成功使用 IP 地址:

C:\>ping 192.168.73.152

Pinging 192.168.73.152 with 32 bytes of data:
Reply from 192.168.73.152: bytes=32 time<1ms TTL=64

.还可以使用以结尾的主机名:

C:\>ping gruit.

Pinging gruit [192.168.73.152] with 32 bytes of data:
Reply from 192.168.73.152: bytes=32 time<1ms TTL=64

这有点像 NetBIOS 问题。事实上,NET VIEW 失败

C:\>net view \\gruit
System error 53 has occurred.

The network path was not found.

有趣的是,NBT 确实解析了主机名适当地

C:\>nbtstat -c

Ethernet0:
Node IpAddress: [192.168.73.104] Scope Id: []

                  NetBIOS Remote Cache Name Table

        Name              Type       Host Address    Life [sec]
    ------------------------------------------------------------
    GRUIT          <20>  UNIQUE          192.168.73.152      592

出于实际目的,我并不关心 Ubuntu 上的 NetBIOS/Samba/等;我只希望我的“正常”TCP/IP 东西能够正常工作(即 Postgres)。但不知何故,这台 Windows 10 机器上的每个客户端似乎都使用 NetBIOS。例如,如果我使用 清除缓存nbtstat -R,然后使用某个 TCP/IP 客户端(例如sshpsql...),NBT 缓存会立即再次显示 Ubuntu 主机名和 IP 地址。

[编辑:有些命令不会触发 NBT 缓存中的条目。nslookup永远不会。ping当我用点结尾主机名时,常见的违规者(例如)也不会触发。]

当然,真正的问题是,尽管通过两个都DNS 和 NBT,我实际上无法在任何客户端应用程序中使用主机名。我读过许多关于 Windows 上的名称解析顺序的相互矛盾的文档页面、博客和论坛帖子 - 以及客户端是否在确定解析方法方面发挥了作用。我不确定什么是正确的/最新的。

[nslookup先前编辑中的行为表明客户端在选择名称解析方法时发挥一定作用。不确定它是明确的还是偶然的 - 例如,它们恰好调用了几个 API 函数中的哪一个。]

上下文:

  • 问题机器是 Windows 10;它没有hostslmhosts文件
  • Ubuntu 机器是 14.04 和 18.04
  • 所有其他 Windows 计算机(所有 Windows 7)都可以通过主机名访问 Ubuntu 服务器,包括直接 TCP/IP 服务和 Samba 类型的服务
  • 在整个过程中,我修复了大量其他问题(例如 DHCP/DNS 重新配置、操作系统升级、反恶意软件/防火墙升级和卸载、samba/systemd-resolved 重新配置……);除了这个遗留问题之外,网络状况比以前更好

有任何想法吗?

答案1

我以前发生过类似的错误,是 WINS/NBT 数据库损坏错误,而 DNS 解析正确。

重新启动主浏览器服务器,它对我来说就成功了。

wireshark 可能会识别出对 Windows 10 的 NBT 请求回复错误数据的罪魁祸首。

相关内容