我在运行 Ubuntu 9.04 Desktop 的计算机上配置了 Samba 和 LAMP 服务器,并希望确保我们网络上的其他计算机始终可以通过其名称访问该计算机上的 Samba 和 Web 服务。假设主机的名称是“buildmachine1”。我希望 Windows 客户端能够使用“\buildmachine1\developersproject1”访问 Samba 共享或“http://buildmachine1/websvn“
buildmachine1 连接到我们的 LAN,它是更大的 Windows 网络的一部分。这个更大的网络由居住在无法到达的星系中的超能力生物管理,并将他们的网络管理任务外包给居住在另一个无法到达的星系中的超能力生物。总之,buildmachine1 或任何生物/用户均无权加入 Windows 域。
我的经验有限,这个问题也说明,一台机器必须是域的成员,才能通过其名称进行访问。所有开发人员都可以通过其 IP 地址访问该机器,但该地址会定期更改,因此,如果我们将驱动器号映射到 IP 地址,或将我们的 subversion 客户端配置为通过以下方式访问存储库http://192.168.99.99/svn,当 IP 改变时,我们显然必须重新配置一切。
考虑到情况和平台,我们如何才能通过机器名称而不是不断变化的 IP 地址可靠地访问机器?
答案1
不,它不需要是 Windows 域的成员。但由于它是内部服务器,因此简单的步骤如下:
- 为其保留和/或分配一个静态 IP,以便它通常不会改变
- 在本地 DNS 系统中获取该 IP 的 A 记录,并使用您选择的名称
这两种方法都会让你向超级强大的人请求这种改变 - 事实就是这样。然而,没有一种是 Windows 独有的。
另一种方法是让机器在收到动态 IP 租约时注册自己的名称,尽管这需要很多事情才能正确……大多数已在这个问题。
作为最后的手段,您可以将机器 IP 输入到每个人的主机文件中,并在 IP 更改时不断更改它。听起来很棒,不是吗?;)
所以最终,你总是需要有超级强大的人来遵循政策,而政策应该包括如何批准(或拒绝)和实施变更……制定可行的政策最终是管理层的责任。或者无论如何都是与此有关的事情。
答案2
您无需将计算机加入域即可通过其名称(NetBIOS 名称)引用它。NetBIOS 能够通过协商谁将成为子网上的主浏览器来独立于服务器运行。为了使大型网络中的情况不那么不稳定,通常使用 WINS 服务器 --- WINS 有点像 NetBIOS 名称的 DNS。
Samba 使用 NetBIOS 广播并使用主机名作为 NetBIOS 名称。因此通常您要查找的内容会起作用。
问题是,除非涉及 WINS 服务器,否则 NetBIOS 仅限于本地子网。因此,您可以安装数据库(Linux WINS 服务器)在您的服务器和 Windows 客户端上添加一个辅助 WINS 服务器...但这里的问题在于您需要在您的机器上有一个静态 IP 才能在客户端上添加 WINS 服务器 :-)。
因此,除非您可以从上级处获取静态 IP 或强制使用静态 IP,否则您就完蛋了。
答案3
由于您提到您的客户端是更大的 Windows 网络的一部分。我假设其中包括 WINS 服务器。我会要求该框的服务器管理员在其中为 Linux 服务器添加一个静态条目。如果只有几个客户端,您也可以作弊并编辑 hosts 文件。
答案4
Windows 机器使用 NetBIOS 来处理这个问题。我对 Linux 了解不够,无法为您调查,但谷歌可能会为您找到一个可以在 Linux 机器上运行的 NetBIOS 兼容服务。
不过,NetBIOS 名称解析并不是很优雅。它只是进行广播以询问谁拥有该名称,因此它只能在一个子网上工作。如果您可以遵循 @Oskar 的建议,那么这将是一个更优雅的解决方案。
编辑:虽然您的构建机器有一个 DHCP 地址,但您可能会发现它不会经常更改。通常,只有在服务器的 DHCP 租约到期时关闭时,它才会更改。我在这里假设这个盒子不会经常关闭……如果它的地址不经常更改,那么您可能会发现 hosts 文件是一个可接受的解决方案。在 lmhosts.sam 中,您可以指定
#include <文件名>
其中 filename 可以是 UNC 路径。因此您只需要在单个文件中维护单个条目。
我仍然认为,寻求网络管理员的帮助,为你的构建机器提供一个 DNS 条目 (@Oskar) 是更好的选择如果你可以找到某种方法来获得他们的帮助。