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

Posted

技术标签:

【中文标题】VirtualBox 端口转发不适用于 NAT 适配器【英文标题】:VirtualBox port forwarding not working with NAT adapter 【发布时间】:2013-03-12 21:51:25 【问题描述】:

我正在尝试使用 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 端口转发相对简单。

谢谢!

【问题讨论】:

【参考方案1】:

对于 GNU/Linux 用户,不要忘记the first 1024 ports are restricted to the root user...

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

我像这样连接到我的 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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

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

    注意:确保 vm 处于停止模式。

    选择“设置”

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

    提供

    姓名:随便你。例如 ssh,说“ssh” 协议:协议类型 [用于 ssh:TCP] 主机 IP:提供您要连接的主机的主机名 [此处:127.0.0.1] 主机端口:您要在该主机的哪个端口上连接到远程端口 [例如:60022] 访客 IP:留空 Guest Port:从上述主机连接到哪个端口。 [对于ssh,默认22]

【讨论】:

我的问题是我试图在主机上使用端口 22。当我将其更改为更高的端口(8080)时,它起作用了。 8.在适配器类型中:选择“半虚拟化网络(virtio-net)”[这很重要]你是绝对正确的——当我从默认的“英特尔 PRO/1000 MT 桌面”模拟器切换到 virtio-net 模拟器时,端口转发神奇地开始工作。不过,我在任何地方都找不到这方面的记录 - 你是怎么知道的? @JoshuaDavies ppl 有时也有同样的想法。那正是我在想:) 问他或知道。我和你的情况一样。 也许我来晚了。我有一个类似的问题,这仅适用于 VM 从 DHCP 获取其 IP 地址的情况。有谁知道为什么? 我和约翰一样。不要为主机端口设置22,它不起作用。当我将其更改为2222 并点击保存时,我立即可以连接到端口 2222。不需要重新启动机器或任何东西。【参考方案7】:

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

【讨论】:

我也在 VBox.log 中看到了这些消息,但这不是原因。我签署了那些 ProxyCap dll,但 NAT 仍然无法正常工作。以下是 VirtualBox NAT 无法与 ProxyCap 一起使用的解释:forums.virtualbox.org/…【参考方案8】:

不清楚您使用的是哪个客户操作系统。

我也遇到过同样的问题。

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

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

要修复它,我必须将 firewalld 服务设置为允许端口 80 连接。

【讨论】:

你开始吧!我有完全相同的问题。 Firewall-cmd 为我工作。 遇到完全相同的问题,运行以下命令停止防火墙,一切正常! >systemctl stop firewalld.service 同样的问题...同样的解决方案:当我禁用防火墙时...端口转发开始正常工作(MAC 主机 y CentOS 访客)【参考方案9】:

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

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

也许这是你想做的事情。 (请look here for more details)

【讨论】:

这似乎解决了问题。我的意图是将 [localhost:8081 on host] 转发到 [localhost:8081 on guest]。正如 wlevchenko 所说,转到“端口转发”对话框并简单地删除两个 IP 列中的“127.0.0.1”(并将其留空)即可修复它。我确实需要重新启动虚拟机才能进行端口转发。 实际上端口转发更改不应该要求 VM 重新启动,在 pf 规则更改后,来宾显示任何网络活动真正需要的是。

以上是关于VirtualBox 端口转发不适用于 NAT 适配器的主要内容,如果未能解决你的问题,请参考以下文章

使用ssh连接VirtualBox虚拟机

Chrome DevTools 端口转发不适用于高端口号

搭建VirtualBox虚拟机集群

iptables nat 技术转发

iptables转发技术(NAT)

Ubuntu下virtualbox nat网络模式下 实现宿主机访问虚拟机