我在这里设置了几台虚拟机,全部运行 Linux(大部分是 CentOS,但有一台是 Ubuntu)。我通过 SSH 连接到它们,但必须返回虚拟机服务器检查 IP 地址,这很烦人。此外,由于这里的网络设置,它们在重新启动时通常会获得不同的 IP,而我无法控制。
对于我来说,追踪我的虚拟机正在使用的所有 IP 的最简单方法是什么?
答案1
是否要求您使用桥接模式而不是 NAT 模式?当然,如果您启用了 NAT,那么您可以转发各种不同的端口以进行 ssh 访问,并且 IP(当然还有端口)在重启后将保持不变。
您可以在 VirtualBox 3.1.2 用户手册第 6.3.1 节“使用 NAT 配置端口转发”中找到有关此内容的详细信息。
另一个想法:我不禁注意到我的 IP 地址出现在我的虚拟机的 XML 文件中:
<GuestProperty
name="/VirtualBox/GuestInfo/Net/0/V4/IP"
value="10.0.2.15" timestamp="1261587087753023000"
flags=""/>
(在 Linux 上,您可以在 ~/.VirtualBox/Machines/MyVMName/MyVMName.xml 中找到它)
因此,特别是如果您使用 vboxmanage 来启动/停止虚拟机,您可以 grep 机器的 xml 并更新“某些内容”——比如网页或文本文件?——这样您就始终知道每个虚拟机的 IP 地址。我猜无论您使用的是 NAT 还是桥接网络,这都会起作用,尽管我个人还没有尝试过……我的虚拟机中有一个静态 IP。我不知道谁/何时/在哪里更新了 XML 文件中的这个值。大概 VBox 在检测到需要重定向到虚拟机的 DHCP 回复时会更新它。
答案2
很多选项取决于您的具体网络配置。大多数简单选项都涉及一些网络修改,但您指出情况并非如此。以下是考虑到这一限制的一些选项:
- 如果您使用与 Active Directory 集成的 Microsoft DHCP 服务器,那么您可能能够向 Active Directory 注册主机名并继承 DNS 名称。查看http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-dhcp-configuring-client.html 我认为需要设置 DHCP_HOSTNAME。我从来没有真正这样做过,因此在 Microsoft 环境中可能需要采取其他步骤才能实现此目的(可能让所有计算机都加入域等)。
- 如果您正在寻找纯 Linux 解决方案,您可能需要查看 avahi 守护进程。它使用多播 DNS 在本地网络上推送主机名和服务。假设 avahi 在您的所有机器上运行,您应该能够编辑 /etc/nsswitch.conf,验证 mdns4 或 mdns4_minimal 是否包含在主机行中,并且应该能够直接解析所有服务器的主机名。同样,我没有在生产环境中设置它,因此可能需要其他配置。
这两种方式都很麻烦,所以最好与管理网络的人合作,获取静态 IP 和 DNS 名称,正如 Chopper3 提到的那样。您甚至可以使用静态 DHCP 分配,然后修改主机文件,但这同样需要您的网络团队的合作。
答案3
设置一个 cronjob,使 wget 到一个 .php 文件,该文件告知机器的主机名和 ip,然后就完成了。
答案4
静态 IP 和文本编辑器