禁用 Samba 中的 IP 缓存或处理动态 IP

禁用 Samba 中的 IP 缓存或处理动态 IP

我们想要挂载已提供给我们的外部存储。我们在 Ubuntu 18.04 上的 /etc/fstab 文件中使用类似以下内容。

//external/storage /mounting/point cifs noperm,cred=/home/user/.smbcredentials,domain=WORK,iocharset=utf8,vers=3.0,sec=ntlmv2i,uid=user,gid=WORKGROUP,dir_mode=0770,file_mode=0770 0 0

和 .smbcredentials

user=user
password=pass

不幸的是,我们遇到了越来越多的问题,有时共享无法访问。奇怪的是,我们可以使用 smbclient 访问它,甚至可以在其他操作系统(MacOS、Windows)上安装。在向存储的系统管理员征求反馈后,我们被告知这是由数据中心的设置方式引起的:IP 可以动态更改。我们还被告知,这对 Windows 或 MacOS 来说不是问题,但在 Linux 上,这会导致深远的问题,因为远程存储的 IP 被缓存了。因此,如果其主机的 IP 发生变化,则在客户端上无法再找到共享,因为缓存的 IP 不正确。

那么我的问题是:我们如何处理我们的设置?我们被建议只在需要时使用 smbclient 访问共享,但从不实际安装它们。我绝对不想朝这个方向发展,因为我们使用该远程存储作为正在运行的程序任务的数据存储。所以它应该随时可用。理想情况下,我正在寻找一种方法来完全禁用 IP 缓存,但也欢迎其他建议。目前我关注的是自动文件系统,虽然我没有使用过它,而且我不确定它是否还缓存了它应该连接的共享的 IP。

附言:对我来说这也很奇怪 - 如果系统管理员的分析是正确的 - 在 IP 更改后共享变得不可用(Host is down)但卸载和重新安装不起作用。sudo mount -av只是挂起。

(最初是在 Ask Ubuntu 上询问的,但似乎更适合这里。)

答案1

如果我正确理解了设置,您可以通过名称引用存储主机,并且该主机名的 IP 会经常更改。

名称到 IP 的映射是 DNS 的功能。DNS 是您需要解决缓存问题的地方。我建议经常刷新缓存以解决此问题。虽然这可能会影响主机上的其他服务,而且确实看起来有点疯狂。

首先,检查缓存的统计信息:

sudo systemd-resolve --statistics

您可以使用以下命令刷新缓存:

sudo systemd-resolve --flush-caches

然后再次检查统计数据以确保缓存已被刷新。

如果可行,我会将刷新缓存的命令添加到脚本中以安装驱动器。这样,脚本将首先刷新缓存,然后在尝试安装驱动器时向 DNS 查询当前 IP。

相关内容