在Ubuntu主机上使用Virtualbox:通过主机名访问虚拟机

我有几个VirtualBox虚拟机(Windows,Linux),每个虚拟机都配置了两个网络适配器:
- NAT用于访问互联网 - host-only用于主机之间和主机与虚拟机之间的通信
问题是,我只能通过IP地址进行通信。我想通过主机名进行通信,也就是说,我希望能够通过主机名从任何一个主机(或虚拟机)访问到其他任何主机。这种情况是否可能?
我已经在主机上设置了host-only适配器(vboxnet0),网络连接正常,但我希望避免为每个虚拟机分配静态IP地址。
4个回答

我建议你使用多播DNS来解决这个问题。
Ubuntu默认使用Avahi
Windows主机需要安装Avahi客户端才能发现其他Avahi服务。如果你的主机已经使用了一些苹果软件,那么通过一个叫做Bonjour的服务可能已经存在了。然而,如果尚未安装,则可以在此处下载Bonjour的一个小版本:Bonjour打印服务。安装完成后,你应该能够通过.local访问你的客户端。
注意:mDNS系统似乎默认使用.local后缀。因此,如果你的主机名是"dev.myapp.com",那么实际主机名将是"dev.myapp.com.local"。
摘自我在superuser.com上的回答

2mDNS在这里确实是一个不错的选择。我想指出我在UL上发布的这个实际的Ubuntu答案:如何检测本地链接中其他机器的地址? - gertvdijk

根据手册(稍微涉及一个不同的主题):

内部网络没有DNS解析器

因此,您需要在其中一个虚拟主机上安装一个。
相关:VB论坛

这样做行不通,因为VBox主机充当了DHCP服务器,所以虚拟DNS服务器也无法解析名称。我认为只有使用静态IP才能实现这一点。 - StarNamer
我知道我可以禁用VBox的DHCP服务器,所以可能是可行的。 - Miguel Ping
@StarNamer 你说得完全正确,DNS服务器无法解决VB中DHCP服务器引起的问题。然而,虽然不实际,可以配置DNS服务器使用当前分配的地址,但这并不比编辑"/etc/hosts"文件更好。@Miguel可以做的是禁用VB DHCP服务器并在虚拟机中安装一个。我建议你参考Ubuntu服务器指南中的网络和域名服务(DNS)部分。 - lgarzo
@Igarzo 这个方法可能可行。我实际上建议使用dnsmasq,它是一个集合了 DNS 和 DHCP 功能的服务器。问题在于放在哪里;如果放在其中一个虚拟机上,那个虚拟机就会变得“特殊”,而且我不确定是否容易将 DHCP 服务器放在主机上并使其为虚拟机提供服务。我从未尝试过这种方式。 - StarNamer
@StarNamer 我认为一个主机DHCP服务器无法为内部网络主机提供服务。VB内部网络主机与外界不进行通信,除非与同一内部网络连接的主机。然而,Dnsmasq看起来是一个不错的选择。我倾向于建议使用Ubuntu服务器指南中的解决方案,以确保安全。 - lgarzo

你需要一个DNS服务器来将IP地址转换为主机名,反之亦然。不幸的是,在Vbox中不支持这个功能。

允许其他人(Windows客户端,配置的Linux客户端)通过主机名访问您的主机:

  • 安装/配置/启动nmbd服务,由samba提供。

    nmbd - 提供NetBIOS over IP命名服务给客户端的NetBIOS名称服务器

允许您的主机通过主机名访问其他人(Windows客户端,配置的Linux客户端):

  • 编辑/etc/nsswitch.conf

更改该行

hosts: files dns

hosts: files dns wins
  • 安装winbind

    apt-get install winbind