您好,我有两台笔记本电脑,分别运行 Ubuntu 16.04 和 Ubuntu 14.04。每台笔记本电脑都有一个运行 Solaris 11 的虚拟机。我想在一台虚拟机上运行服务器程序,在另一台笔记本电脑的另一台虚拟机上运行客户端程序。可以这样做吗?
我尝试谷歌搜索,但找到的都是关于在同一台计算机上连接虚拟机的信息。请建议如何做到这一点。
谢谢
编辑:我正在尝试在虚拟盒上执行此操作并使用我的家庭 WiFi。
答案1
从网络角度来看,您有两种选择:
大量 NAT。默认情况下,我假设您的虚拟机设置为使用 NAT 模式,无论您拥有什么虚拟化解决方案,这都会让事情变得有点棘手。可行,但很棘手。
将虚拟机“桥接”到主机系统所在的实际网络,从而消除 NAT 问题。这是更简单的选择。
选项 1:NAT 模式下的虚拟机网络
注意:我从来没有让它可靠地工作,我一直使用更可靠的桥接模式。
VMware 和 VBox 都设置为允许 NAT 和端口转发。这一切都很好,但也带来了一些麻烦。
虚拟机
除非您有 VMware Workstation Pro,否则无法轻松设置 NAT 端口转发。这是因为 NAT 端口转发的虚拟网络编辑器是未发货使用 Workstation Player 或旧版 VMware Player 软件。
假设您有虚拟网络管理器/编辑器,请在具有将作为“服务器”的虚拟机的系统上执行以下操作:
(1)打开虚拟网络管理器/编辑器,选择带有“NAT”的适配器作为“外部连接”列表。它看起来如下图所示:
(2)选择“NAT设置”,你将看到如下窗口:
(3)在“端口转发”区域下,单击“添加”。您将看到如下窗口:
设置信息如下:
主机端口:可能与服务器在虚拟机中监听的端口相同,但能如果你愿意的话可以做点别的事。
类型:TCP 或 UDP 取决于您的服务器及其监听方式。这里可以安全地假设为 TCP,但大多数主动连接服务器都是 TCP。
IP 地址:虚拟机的 IP 地址。您可以
ip -4 addr list
在虚拟机内部通过命令行获取此地址。虚拟机端口:服务器应用程序将监听的端口。
描述:此端口转发的用途的描述。
您可能需要暂时关闭您的虚拟机,然后重新启动 VMware 服务,sudo systemctl restart vmware
以便重新加载所有端口转发/桥接规则。
(4)启动带有服务器的虚拟机。从客户端虚拟机,确保告诉客户端连接到运行服务器虚拟机的计算机的 IP 地址(因此,如果带有服务器虚拟机的笔记本电脑的 IP 地址为 192.168.250.20,则客户端虚拟机的应用程序应尝试连接到 192.168.250.20。)
请注意,这并非在所有情况下都有效,我强烈建议使用桥接模式。
虚拟盒
我有绝不使 VBox NAT 网络端口转发正常运行。如果您正在使用 VBox,我强烈建议您使用桥接模式而不是 NAT。(虽然这不能清楚地回答 VBox 的问题,但我尝试从 VBox 测试这些端口转发,但根本无法使其工作)。
并不是我没有尝试,而是在 16.04 上,VirtualBox 无法连接到任何东西,并且从未设置任何用于 NAT 功能的虚拟网络接口;我当时假设它在没有 Bridged 的情况下无法正常工作,但我找不到为什么它从未启动 NAT 容量。
选项 2:虚拟机网络:桥接模式
您需要在“桥接”模式下运行虚拟机,然后使用分配给虚拟机的您自己的 LAN/Wifi 网络的 IP 地址(“桥接”的结果允许虚拟机连接到主机计算机的实际网络并看起来像是在主机计算机的实际网络上)。
首先,将两个系统上的虚拟机配置为使用“桥接网络”模式。不同虚拟机解决方案的显示方式会有所不同,但始终会显示“桥接”或类似内容(至少在 VMware 或 VBox 中)。确保“桥接”到的设备是您首选的网卡(wifi 或以太网),这样您就可以正确地将虚拟机连接到正确的网络以获取 IP 地址。
其次,如果虚拟机已经在线,请重新启动它们。这应该会为它们获取一个与主机位于同一网络的全新 IP 地址。(它甚至应该在同一子网范围内)。
第三,将一个虚拟机的客户端指向另一个虚拟机上的服务器 IP。由于网络是桥接的,因此应该可以连接。不过,您可能需要调整客户机上的虚拟机以确保它允许连接。
对于虚拟机来说,情况应该就是这样了,它们应该能够顺利互连。