我有两台 Ubuntu 机器和一台 Windows PC。如果我在 Windows PC 上创建共享,则任何一台 Ubuntu 计算机都可以使用它来挂载它mount -t cifs -o username=me //computername/sharename /mnt/mountpoint
。如果我在任意一台 Ubuntu 机器上创建共享,则 Windows 计算机可以在网络上的 //computername/sharename 处看到它并正常访问它。
但是,如果我在一台 Ubuntu 计算机上创建共享并尝试将其挂载到另一台计算机上,我会得到mount error: could not resolve address for computername: Unknown error
。使用 IP 而不是 netbios 名称可以顺利挂载它。
更奇怪的是,nmblookup computername
给出了IP地址。
为了通过 netbios 名称而不是 IP 地址挂载共享,我需要在 Ubuntu 共享和挂载计算机上做什么?(除了每次制作一个 bash 脚本从 netbios 名称中检索 IP 地址,或设置静态 IP)。
答案1
系统范围的 NBNS 支持不是 Ubuntu(或大多数其他 Linux 系统)的标准部分。之所以nmblookup
有效,是因为它自己生成和接收 NBNS 数据包,而所有其他工具(包括mount.cifs
)都依赖全局“解析主机名”功能来选择正确的协议。
NBNS 的主机名查找模块称为libnss_wins.so.2
,通常打包为库nss-winbind或者只是一部分客户端一旦安装,Debian 和 Ubuntu 会自动激活它,否则需要将其添加到“hosts”行中/etc/nsswitch.conf
:
- hosts: files dns
+ hosts: files dns wins
为了工作,模块需要温宾德正在运行。(我认为以前它是独立工作的,或者只是与纳米比亚正在运行,但显然不再运行了。)
测试:
getent ahosts ComputerName
对于所有活动模块(列出的模块nsswitch.conf),getent -s wins ahosts ComputerName
为了胜利模块具体(无论是否活跃)。
答案2
对于任何寻找每次查找 IP 地址的脚本的人来说,这应该有效:mount.cifs -o user=USER "//$(nmblookup COMPUTERNAME | head -n 1 | cut -d ' ' -f 1)/SHAREPATH" /MOUNTPOINT
,根据需要替换大写变量。