VirtualBox 端口转发不适用于 NAT 适配器

问题描述 投票:0回答:11

我正在尝试使用 VirtualBox 进行简单的端口转发,看起来 VirtualBox.exe 正在主机上侦听端口,但实际上并未将连接转发到来宾。我尝试了多个端口,并且重新启动了 VirtualBox 好几次。另一方面,来宾到主机的连接很好。信息如下:

Host: Win7 x64
Guest: Win7 x64
VirtualBox version: VirtualBox 4.2.10
Firewalls: All firewalls on host and guest disabled.

Virtual Box > Machine Settings > Network
 Adapter 1: 
  Attached to: NAT
  Cable Connected : True
  Port Forwarding:
   Rule 1: TCP, HostIP=127.0.0.1, HostPort=8081, GuestIP=127.0.0.1, GuestPort=8081

On Host:
[VirtualBox.exe]  TCP    127.0.0.1:8081         IBM-6KT5OPCF76P:0      LISTENING

On Guest:
I never get the connection request on port 8081 or any others I've tried.

有什么想法吗?由于多种原因,我想避免使用 VirtualBox 的桥接适配器。我的印象是,使用 VirtualBox 进行 NAT 端口转发相对简单。

谢谢!

networking port virtualbox forwarding nat
11个回答
48
投票

半虚拟化网络*(virtio-net)是关键

  1. 选择您想要进行端口转发的虚拟机。

    • 注意:确保虚拟机处于停止模式。
  2. 选择“设置”

  3. 选择“网络”
  4. 选择任何免费的适配器。让我们说“适配器 2”
  5. 启用“启用网络适配器”
  6. 在附加到下拉列表中,选择“NAT”
  7. 选择“高级”
  8. 在适配器类型中:选择“半虚拟化网络(virtio-net)”[这很重要]
  9. 选择“端口转发”
  10. 在“端口转发”对话框的右侧部分,选择“+”
  11. 提供

    • 名称:任何你想要的。以 ssh 为例,说“ssh”
    • 协议:协议类型 [ 对于 ssh:TCP ]
    • 主机 IP:提供您要连接到的主机的主机名[此处:127.0.0.1]
    • 主机端口:您要在该主机的哪个端口上连接到远程端口[示例:60022]
    • 访客IP:留空
    • 访客端口:您要从上述主机连接到哪个端口。 [ 对于 ssh,默认 22 ]

21
投票

您以错误的方式指定了访客 IP,它应该是访客的 IP(如果您静态分配 IP 地址给访客)或将其留空。请注意,您将主机 IP 指定为 127.0.0.1,这意味着您转发的端口只能从端口访问(如果不是您想要的,它也应该为空)。

VBoxManage modifyvm "win" --natpf1 ",tcp,,8081,,8081"

也许这是您想做的事情。 (请查看这里了解更多详情


11
投票

不清楚您正在使用哪个客户操作系统。

我也遇到过同样的问题。

我的主机是 MAC PC,来宾是 VirtualBox 上的 CentOS 7。
我在 VirtualBox 级别为 ssh 端口 22 和 http 端口 80 启用了从访客到主机的 NAT 端口转发。

但是我发现我无法通过 http 连接从我的 MAC PC 主机连接到 Centos 7 guest 上的 Apache HTTP 服务器。

要修复此问题,我必须将防火墙服务设置为允许端口 80 连接。


5
投票

在 Mac 主机、Fedora 来宾设置上遇到类似的问题。正在尝试从主机访问在访客计算机的端口 8000 上运行的 http Web 服务器。在来宾计算机上使用firewall-cmd 打开端口 8000/tcp 解决了问题。

sudo firewall-cmd --zone=public --add-port=8000/tcp

2
投票

我遇到了类似的问题,事实证明是一些名为 proxycap 的公司代理拦截软件安装的网络堆栈中未签名的驱动程序导致 virtualbox 在设置端口转发时出错。在设置端口转发并列出未签名的驱动程序并卸载相应的应用程序时,请检查虚拟机日志中是否有错误消息。


2
投票

如果其他人遇到与我同样的问题,我在这里写下我的错误:

我使用 CentOS 7 作为主机,Windows 作为访客。

阻碍我的唯一问题是:我忘记在访客计算机中禁用Windows 防火墙设置。一旦禁用它,一切正常。


2
投票

如果有人遇到同样的问题,请尝试卸载重定向器,例如 ProxyCap、proxifier 等。VirtualBox NAT 不适用于它们。如果您尝试跟踪 VirtualBox 网络,您不会在日志中找到任何错误消息,也不会在 pcap 文件中看到任何内容。禁用 ProxyCap 是不够的,必须将其卸载,或者您需要使用“netsh Winsock Reset”重置网络配置,但 ProxyCap 将不再为您工作。


2
投票

对于GNU/Linux用户,不要忘记前1024个端口仅限root用户使用

如果您尝试转发低于 1024 的端口,它甚至不会显示为带有

netstat
的“正在监听”。


1
投票

我像这样连接到我的 Centos7:

Virtual Box > Machine Settings > Network
Adapter 1: 
Attached to: NAT
Cable Connected : True
Port Forwarding:
  Rule 1: TCP, HostIP=127.0.0.1, HostPort=8081, GuestIP=10.0.2.15, GuestPort=8081

$> ssh -p8081 [更改]@127.0.0.1


0
投票

在我的例子中,客户操作系统是CentOS8,主机操作系统是Ubuntu 22.04,主机上的转发端口是1022,我将其更改为10022然后它就工作了。


0
投票

就我而言,代理禁用了我的连接,我必须运行

unset http_proxy
© www.soinside.com 2019 - 2024. All rights reserved.