我正在尝试使用 VirtualBox 建立一个由两台虚拟机组成的实验室环境,它们都是 Ubuntu 18.04 Bionic Beaver。
- 我希望其中一个可以充当带有 Node.js 和 Express 的服务器。
- 另一台机器将充当客户端,主要向服务器发送数据。
目前,它们位于同一个 NAT 网络中,因此可以成功 ping 通对方。问题是,如果我在一台机器上设置 Express 服务器,它会监听,比如说,在 中localhost:3000
。但是,正如预期的那样,我无法从客户端机器访问该地址。
我在想也许需要某种端口转发方式,但我不知道从哪里开始。我了解从主机到客户端的转发技术,但即使经过研究,我也不知道该技术是什么从客人到客人,如果可能的话。
答案1
如果“远程”服务仅连接到远程机器的本地主机适配器,则 SSH 隧道是一种简单的连接方法。
对于您的情况,将服务绑定到连接到虚拟局域网子网的以太网适配器会更合适。在“现实世界”中,如果这些机器在互联网上,那么您将锁定远程框以仅接受来自其他 IP 地址的连接
答案2
NAT 可能不是最佳选择。NAT VM 通常无法通信(至少在 VirtualBox 中没有特殊配置的情况下无法通信)。
如果您希望虚拟机仅相互通信并与主机通信,则应该使用仅主机适配器;如果您希望虚拟机能够访问主机外部的任何内容,则应该使用桥接网络适配器(桥接虚拟适配器与您的真实世界的网卡绑定)。
这VirtualBox 官方文档(第 6.2 节)有一个方便的图表,列出了您可能会觉得有用的不同的 VM 网络适配器模式。