fstab 中的 CIFS 挂载在 IP 上成功,在 /etc/hosts 中写入的主机名上失败

Nac*_*ess 16 domain-name-system ubuntu mount cifs fstab

我想知道为什么我的 Ubuntu Server 14.04 LTS 在从 fstab 解析主机名时出现问题。我尝试挂载以下条目:

//NAS-5h2-20/backuppc/  /mnt/backuppc   cifs   auto,user=THEUSER,password=THEPASSWORD,cifsacl,uid=109      0       0
Run Code Online (Sandbox Code Playgroud)

安装失败并出现错误

mount: wrong fs type, bad option, bad superblock on //NAS-5h1-15/backuppc,
   missing codepage or helper program, or other error
   (for several filesystems (e.g. nfs, cifs) you might
   need a /sbin/mount.<type> helper program)
   In some cases useful info is found in syslog - try
   dmesg | tail  or so
Run Code Online (Sandbox Code Playgroud)

和系统日志条目:

Unable to determine destination address.
Run Code Online (Sandbox Code Playgroud)

但是,如果我将主机名NAS-5h2-20交换为其 IP 192.168.1.29,这就像一个魅力。但是,出于可移植性的原因,我想在 fstab 中按主机名映射挂载。

的内容的/ etc /主机是(除其他行):

192.168.1.28    NAS-5h1-15
192.168.1.29    NAS-5h2-20
192.168.1.30    NAS-6h1-04
Run Code Online (Sandbox Code Playgroud)

这些主机名未向本地 DNS 服务器注册。它的目的是在某些情况下能够将不同的 IP(服务器集群/工作站)用于 DNS 和服务器内部使用,因此我无法将它们注册到 DNS。

也没有问题

ping NAS-5h2-20
Run Code Online (Sandbox Code Playgroud)

.

因此我敢肯定,这是一个解析器问题。但是,我想不通,在哪里。我查看 nsswitch.conf,没有什么特别之处:

passwd:         compat
group:          compat
shadow:         compat
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis
Run Code Online (Sandbox Code Playgroud)

并且/etc/resolv.conf看起来也不错:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.1.1
search ourdomain.local
Run Code Online (Sandbox Code Playgroud)

所以,问题: - 为什么在这种特殊情况下解析器无法读取或忽略主机文件
- DNS/WINS/其他一些解析方法是否硬编码到 mount.cifs 中?

小智 13

默认情况下,某些发行版上的 samba (cifs) 包不使用主机文件来解析名称。相反,它使用 NetBIOS 名称来解析 IP。有两种方法可以解决这个问题:

  • 将 samba 设置为使用 hosts 文件进行解析。

在 smb.conf 文件中,找到并修改或创建以下行:

    [global]
    name resolve order =  host lmhosts wins bcast
Run Code Online (Sandbox Code Playgroud)

并重新启动桑巴。这会将 samba 设置为使用标准主机名到 IP 地址解析,使用系统 /etc/hosts、NIS 或 DNS 查找来解析服务器名称。此外,machine-name.domainname在您的主机文件中添加为别名:

    192.168.1.28    machine-name    machine-name.domainname
Run Code Online (Sandbox Code Playgroud)
  • 设置您尝试连接的计算机的 NetBIOS 名称。

在您尝试连接的机器上,在 smb.conf 文件中设置以下内容:

    netbios name = MachineName
Run Code Online (Sandbox Code Playgroud)

并重新启动桑巴。


理想情况下,您希望同时完成这两件事,但是只需将 samba 设置为使用 hosts 文件即可。

参考资料:https : //www.samba.org/samba/docs/using_samba/ch07.html