访问安装在父服务器上的无头虚拟盒 Web 服务器

访问安装在父服务器上的无头虚拟盒 Web 服务器

我在我的服务器 A 上安装了一个无头虚拟盒,这个虚拟盒包含另一个 ubuntu 服务器 B。我可以从我的笔记本电脑 ssh 到服务器 A,也可以从服务器 A ssh 到服务器 B,但是我如何才能从我的笔记本电脑直接 ssh 到服务器 B 呢?

我的目标是从我的笔记本电脑访问服务器 B 上的 Web 服务器。

以下是我当前的网络设置。

  • 服务器 A 上的 ifconfig 服务器 A 上的 ifconfig

  • 无头 VirtualBox 设置(VB 位于服务器 A 上) VirtualBox:偏好设置 VirtualBox:服务器 B 设置:适配器 1 VirtualBox:服务器 B 设置:适配器 2

  • 服务器 B 上的 ifconfig 服务器 B 上的 ifconfig

答案1

从无头系统网络配置的屏幕截图中我可以看出,您有一个仅主机适配器和一个连接到服务器 B 的 NAT 适配器。除非您设置从服务器 A 到服务器 B 的端口转发,否则它们都不允许外部机器直接访问服务器 B。

按照Virtualbox 手册第 6 章

仅主机网络是 VirtualBox 2.2 版中增加的另一种网络模式。它可以被认为是桥接网络模式和内部网络模式的混合:与桥接网络一样,虚拟机可以相互通信并与主机通信,就像它们通过物理以太网交换机连接一样。同样,与内部网络一样,不需要存在物理网络接口,并且虚拟机无法与主机外部通信,因为它们未连接到物理网络接口。

对于 NAT:

启用 NAT 的虚拟机就像通过路由器连接到互联网的真实计算机一样。在这种情况下,“路由器”是 VirtualBox 网络引擎,它透明地映射来自和到虚拟机的流量。在 VirtualBox 中,此路由器位于每个虚拟机和主机之间。这种分离最大限度地提高了安全性,因为默认情况下虚拟机无法相互通信。

NAT 模式的缺点是,就像路由器后面的专用网络一样,虚拟机在外部互联网上是不可见的,也无法访问;除非您设置端口转发(如下所述),否则您无法以这种方式运行服务器。

因此,根据手册的第 6 章,让无头机器轻松面对外部网络的最佳方法是给机器一个桥接适配器:

使用桥接网络时,VirtualBox 使用主机系统上的设备驱动程序来过滤来自物理网络适配器的数据。因此,此驱动程序称为“网络过滤器”驱动程序。这允许 VirtualBox 拦截来自物理网络的数据并将数据注入其中,从而有效地在软件中创建一个新的网络接口。当客户机使用这种新的软件接口时,主机系统会认为客户机使用网络电缆物理连接到接口:主机可以通过该接口向客户机发送数据并从中接收数据。这意味着您可以在客户机和网络的其余部分之间设置路由或桥接。

为了实现此功能,VirtualBox 需要主机系统上的设备驱动程序。VirtualBox 2.0 和 2.1 完全重写了桥接网络的工作方式,具体取决于主机操作系统。从用户的角度来看,主要区别在于,在任何受支持的主机操作系统上都不再需要复杂的配置。[31]

通过为无头服务器提供桥接适配器,它将能够连接到服务器 A 实际连接到的更广泛的网络,并从 DHCP 或静态 IP 获取自己的 IP 地址(如果需要)。

但是,如果您在某些托管服务上将服务器 A 作为虚拟专用服务器 (VPS) 运行,那么这可能不是一个可行的选择。在这种情况下,我建议让服务器 B 保留一个已设置端口转发的 NAT 适配器,转发 HTTP/HTTPS 端口 80 和 443 的流量,以便您可以使用 Web 服务器。

要配置端口转发,您可以使用图形端口转发编辑器,该编辑器位于配置为使用 NAT 的网络适配器的网络设置对话框中。在这里,您可以将主机端口映射到客户机端口,以允许网络流量路由到客户机中的特定端口。

或者也可以使用命令行工具 VBoxManage;有关详细信息,请参阅第 8.8 节“VBoxManage modifiedvm”。

有关端口转发方面的更多信息(如果需要)或有关 Virtualbox 网络的更多信息,我强烈建议您阅读相关部分Virtualbox 手册第 6 章

编辑:我误解了您直接通过 SSH 进入服务器 B 的意图,认为实际上需要访问网页,而不是 SSH。但是,上述信息仍然有效。只需打开端口 22(或您希望用于 SSH 的任何端口),作为服务器 A 的 Virtualbox 配置上的 NAT/主机的端口转发,或设置桥接适配器。

答案2

我会将服务器 A 的 IP 地址更改为 192.168.100.2 之类的地址。当前 IP 地址的第三和第四个八位字节会将其置于基于服务器 B 的子网掩码 255.255.255.0 的不同子网中。或者,您可以将服务器 B 的 IP 地址更改为与服务器 A 相同的子网掩码。服务器 B 需要一个唯一的 IP 地址(这意味着第四个八位字节不应为 171)。

对于服务器 B,转到 VirtualBox 的设备 -> 网络 -> 网络设置 -> 适配器 1,然后转到“附加到:”并将其设置为“内部网络”。展开“高级”,然后将“混杂模式”设置为“全部允许”。单击“确定”。

使用此解决方案,服务器 B 将无法访问互联网。但您应该能够直接从笔记本电脑连接到它。

对于其他故障排除:我将验证从您的笔记本电脑到服务器 B 的端口是否打开。如果您使用的是 Windows,则根据 Windows 版本,您可以使用 PowerShell 脚本或命令来测试对服务器 B 开放的端口。您可以尝试从 Windows 笔记本电脑到服务器 B 进行 tracert。如果您的笔记本电脑不是 Windows 的,您可以使用 traceroute 查看是否存在中间防火墙阻止连接。

答案3

使用端口转发。

在服务器 A 上,转到 NAT 适配器的设置(本例中为适配器 2)。单击那里的端口转发按钮。现在输入 22(或者如果您仍需要通过 ssh 访问服务器 A,则输入其他非标准端口)作为主机端口,输入 22 作为来宾端口。我认为您需要指定 IP,但如果您想要精确的话也可以。但是,如果您不指定它们(我认为),VBox 将尝试将这些端口转发规则应用于服务器 A 上的每个接口。

设置这些选项后,您应该能够通过您指定的任何端口 ssh 到服务器 A 的 IP 地址,然后您将被转发到服务器 B。

这个答案解释得很好。

相关内容