我有一个 Ubuntu 9.04 桌面 64 位客户操作系统,运行在 Ubuntu 9.04 桌面 64 位主机操作系统上(是的,同一个操作系统)。我想在客户机上运行一个 Web 服务器,并使其可通过主机上的 NAT 进行访问。
我(我想我)关注了VirtualBox 端口转发说明,但是我完成配置后,客户机/VM 无法启动。
这是我运行的配置:
VBoxManage setextradata "<Guest Name>" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP
VBoxManage setextradata "<Guest Name>" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80
VBoxManage setextradata "<Guest Name>" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 8080
<Guest Name>
客户虚拟机映像的名称在哪里。
错误如下:
无论我在虚拟机运行时还是不运行时运行配置,都会发生同样的错误。
已安装来宾添加功能。
如何正确配置 NAT 端口转发?是什么导致了此错误?
答案1
使用命令获取为此 WM 执行的所有参数:
VBoxManage.exe getextradata "Name_of_VM" enumerate
您应该看到传输到 VM 的所有值。
Key: GUI/SaveMountedAtRuntime, Value: yes
Key: GUI/ShowMiniToolBar, Value: yes
Key: GUI/MiniToolBarAlignment, Value: bottom
Key: GUI/LastCloseAction, Value: save
Key: GUI/LastWindowPostion, Value: 345,133,640,522
Key: GUI/Fullscreen, Value: off
Key: GUI/Seamless, Value: off
Key: GUI/AutoresizeGuest, Value: on
Key: GUI/MiniToolBarAutoHide, Value: on
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort, Value: 22
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort, Value: 22
通过复制并粘贴该行来删除所有以 VBoXInternal 开头的行,如下所示
VBoxManage.exe setextradata "Name_of_VM" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort"
到最后都没有值。最后你应该再次枚举,并且看不到 VBoxInternal 的更多行。
现在您可以再次制定 NAT 规则,并使用不同的规则名称。
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort, Value: 2222
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort, Value: 22
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol, Value: TCP
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol, Value: TCP
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort, Value: 80
Key: VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort, Value: 8080
在 Linux 下,您应该记住不应重定向端口 <1024。对 guestsh 使用 2222,对 guesthttp 使用 8080(示例)为了易于使用,我个人在 WINDOWS 下使用 <1014 端口。
希望这对你有帮助。
(抱歉,我说的是英语!我是法国人:P)
雅克·根舍里安
答案2
我遇到了同样的问题——我认为 Oracle 改变了 NAT 的设置方式。现在更简洁了。这是从用户手册中复制过来的,该手册仍然位于:http://www.virtualbox.org/manual/UserManual.html
VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,127.0.0.1,2222,,22"
“这会将通过端口 2222 到达本地主机接口 (127.0.0.1) 的所有 TCP 流量转发到客户机中的端口 22。”在客户机中。”
答案3
当我在 VirtualBox 中设置端口转发时也出现了同样的症状。
当我在 VirtualBox 中创建新的虚拟机时,默认网络适配器是e1000
,不pcnet
符合您遵循的说明。
如果您将配置设置修改为:
VBoxManage setextradata "<Guest Name>" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guesthttp/Protocol" TCP
VBoxManage setextradata "<Guest Name>" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guesthttp/GuestPort" 80
VBoxManage setextradata "<Guest Name>" "VBoxInternal/Devices/e1000/0/LUN#0/Config/guesthttp/HostPort" 8080
这应该可以解决你的问题。
上述配置选项将适用于第一个e1000
适配器,因此e1000/0在设置中。仔细检查您尝试端口转发到的虚拟机正在使用哪个网络适配器。
在我的安装中,可用的网络适配器是两个“PcNet”和三个“Intel Pro 1000”。
适配器由下列关键字引用:
- 第一个PCNet:
pcnet/0
- 第二个PCNet:
pcnet/1
- 第一个英特尔 PRO/1000:
e1000/0
- 第二台 Intel PRO/1000:
e1000/1
- 第三个英特尔 PRO/1000:
e1000/2
例如,如果您的适配器是列表中的第二个“PRO/1000”,那么您需要将上述配置修改为 e1000/1(ETC)。