技术提示: 使用 VBoxManage 在 Virtualbox 中进行端口转发
VirtualBox
Virtualbox 虚拟机操作系统有多种网络模式可以连接到互联网,但在这里我将专门提及网络地址转换 (NAT) 网络。
《VirtualBox 手册》是这样描述 NAT 的优点和缺点的:
网络地址转换 (NAT) 是虚拟机访问外部网络最简单的方式。通常,它不需要在主机网络和虚拟机系统上进行任何配置。因此,它是 VirtualBox 中的默认网络模式。
启用 NAT 的虚拟机就像一台通过路由器连接到互联网的真实计算机。“路由器” 在这里是 VirtualBox 网络引擎,它透明地映射虚拟机来往的流量。NAT 模式的缺点是,就像路由器后面的私有网络一样,虚拟机对外部互联网是不可见的和不可访问的;除非您设置端口转发(如下所述),否则无法以这种方式运行服务器。
因此,您全新的虚拟机可以访问互联网,但对您网络上的其他设备是不可见的。通常这不是问题,但是如果不配置端口转发,就无法 SSH 连接到您的虚拟机或访问机器的任何服务(例如 Web 服务器)。
VirtualBox 中的端口转发端口转发可以通过强大而通用的 VBoxManage 命令行实用程序来启动。VBoxManage 有许多选项,但我们将使用 “setextradata” 功能来配置端口转发。
以下命令将允许您通过 SSH 访问您的虚拟机。为了使此操作生效,我对虚拟机操作系统做出了以下假设:
- 您的虚拟机当前未运行,但已经创建并保存。
- 您的虚拟机操作系统已安装并正确配置了 SSH。
- 您的虚拟机操作系统设置为 VirtualBox 的默认虚拟网络硬件 (PCNET III)。
- sshd 正在默认端口(端口 22)监听传入连接。
- 您的虚拟机操作系统名为 “VM Name Here”,尽管我敢打赌这不是您的虚拟机的实际名称。
如果您不知道虚拟机的名称,验证名称的最简单方法是启动 Virtualbox 并查看主屏幕上列出的机器名称。向下滚动详细信息还可以查看其他信息,例如正在使用的网络适配器。

以下命令会将源自主机操作系统端口 2222 的 TCP 流量转发到虚拟机操作系统端口 22。
$ VBoxManage setextradata "VM Name Here" \ "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP $ VBoxManage setextradata "VM Name Here" \ "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 $ VBoxManage setextradata "VM Name Here” \ "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222
请注意虚拟机名称使用了双引号。如果您决定的虚拟机名称只有一个单词,例如 “VMNameHere”,则从技术上讲,您可以省略这些双引号,像这样:
$ VBoxManage setextradata VMNameHere \ "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP $ VBoxManage setextradata VMNameHere \ "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22 $ VBoxManage setextradata VMNameHere \ "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222
保留它们没有任何坏处,所以做任何让您感到最舒服的事情。
供您参考,NAT 端口转发有一些限制,我将按照 《VirtualBox 手册》中的列出方式列出它们:
用户应该注意 NAT 模式的四个限制:
- ICMP 协议限制:一些常用的网络调试工具(例如 ping 或 tracerouting)依赖于 ICMP 协议来发送/接收消息。虽然 VirtualBox 2.1 改进了 ICMP 支持(ping 现在应该可以工作了),但其他一些工具可能无法可靠地工作。
- 接收 UDP 广播不可靠:虚拟机不能可靠地接收广播,因为为了节省资源,它只在虚拟机在特定端口上发送 UDP 数据后监听一段时间。因此,基于广播的 NetBios 名称解析并不总是有效(但 WINS 始终有效)。作为一种解决方法,您可以使用所需服务器的数字 IP 地址,格式为 \\server\share。
- 不支持 GRE 等协议:不支持 TCP 和 UDP 以外的协议。这意味着某些 VPN 产品(例如 Microsoft 的 PPTP)无法使用。还有其他仅使用 TCP 和 UDP 的 VPN 产品。
- 无法转发低于 1024 的主机端口:在基于 Unix 的主机(例如 Linux、Solaris、Mac OS X)上,无法从非 root 运行的应用程序绑定到低于 1024 的端口。因此,如果您尝试配置这样的端口转发,虚拟机将拒绝启动。
这些限制通常不会影响标准网络使用。但是,NAT 的存在也会产生细微的影响,可能会干扰通常工作的协议。一个例子是 NFS,其中服务器通常配置为拒绝来自非特权端口(即端口不低于 1024)的连接。
VBoxManage 是一个非常强大的实用程序,这篇文章只是触及其功能的冰山一角。《用户手册》的整个章节都专门介绍 VBoxManage,我鼓励您阅读它并发现它可以做的其他事情。
最初发布在我的博客 这里。