我有一个小型网络,其中的 Windows 和 Linux 机器连接到 D-Link DIR-825 路由器。
网络上的 Windows 机器可以通过名称访问所有其他机器,而 Linux 机器只能通过 IP 地址访问其他机器。
我可以在路由器 Web 管理界面的 DHCP 客户端状态列表中看到所有列出的机器的名称及其 DHCP 分配的地址。
为什么 Linux 机器无法通过名称找到任何其他机器,而 Windows 却能毫无问题地找到 Linux 机器?
答案1
我目前的发现是:
Windows 使用 NetBIOS 名称,这种协议是一种广播协议,允许它们无需任何中央服务器即可相互找到。
现代发行版中的 Linux 机器本身使用一种称为阿瓦希,这也是一种独立于服务器的广播协议。本地网络机器的后缀为
.local
,因此你可以使用以下命令从 Linux ping 到 Linuxping hostname.local
或者使用avahi-discover
包查看它们。Gnome 中的某些应用程序使用 avahi 列出网络中的机器(例如,远程桌面查看器)安装桑巴在 Linux 机器上会为其分配一个 NetBIOS 名称(或者,更准确地说,会让 Linux 机器在广播请求中使用其 NetBIOS 名称(默认情况下是其主机名)来宣传自己),并且允许 Windows 机器找到 Linux 机器。
问题:虽然装有 Samba 的 Linux 机器会回复 NetBIOS 协议请求,但 Ubuntu 等发行版中的默认设置它不会使用 NetBIOS 作为解析名称的方法,这就是为什么 Linux 机器无法“看到”彼此或 Windows 机器的原因。为此,您需要编辑
/etc/nsswitch.conf
文件并将wins
以下行添加到列表中:hosts: files mdns4_minimal [NOTFOUND=return] dns wins mdns4
你可能需要安装
winbind
(如果没有自动安装,则安装libnss-winbind
)包以使上述功能正常工作。因此,对于可见性问题,您可以在所有 Linux 机器上安装 Samba(并且编辑
/etc/nsswitch.conf
以启用 NetBIOS 名称解析),或者在 Windows 机器上安装 Avahi 支持。至于文件共享,Samba 为 Linux 机器提供了与 Windows 的文件共享功能。无需编辑 /etc/nsswitch.conf,Linux 机器便可在 Nautilus 的“网络”部分中查看彼此和 Windows 的共享文件夹(反之亦然)
答案2
默认情况下,如果没有 DNS 服务器,Windows 可以使用 NetBIOS(Microsoft 名称解析协议)来发现其网络本地的其他 Windows 系统的名称。如上所述在这个答案中,看来您需要在 Linux 端设置 SAMBA(或至少是 winbind)。下面是基本指令集:
要从 Linux 计算机启用 Windows netbios 名称解析,请确保已安装 Samba(尽管 smb 服务不需要运行)。Samba 套件包括 winbind,它允许解析 Windows 主机名。然后编辑 /etc/nsswitch.conf 并更改此行:
hosts: files dns
更改为:
hosts: files dns wins
然后通过ping局域网上的Windows机器的计算机名进行测试:
$
ping windowsbox
顺便说一句,这与 WINS 没有直接关系。WINS 是一种 NetBIOS 服务器,通常用于较大的网络,以减少广播流量,提供传统的集中式名称解析平台,并最终使不同网络上的系统能够了解彼此的 NetBIOS 名称到 IP 的映射。
SAMBA 的替代方法是设置 DNS 服务器并确保配置了动态 DNS 更新或 DHCP 可以注册 DNS 记录。
答案3
最可能法律硕士。
答案4
尽管默认情况下未安装必要的软件,但 Linux 可以解析本地名称......
大多数 Linux 发行版除了内核之外,对你的软件需求都做了一些假设……Debian 参考DNSMasq
apt-cache 搜索 dnsmasq ...