我在 macOS(主机)上运行 VMware Fusion,并在 1 台虚拟机上运行 Windows 10 作为客户机。网络设置为共享(即NAT)。
我想连接到在 Windows 10 VM 上运行的 Web 服务器,端口为 8888。
/Library/Preferences/VMware\ Fusion/vmnet8/dhcp.conf
我通过编辑和添加以下内容为虚拟机指定了一个固定 IP 地址 :
host Windows8x64 {
hardware ethernet 00:0C:29:86:EB:52;
fixed-address 192.168.80.101;
}
接下来我编辑/Library/Preferences/VMware\ Fusion/vmnet8/nat.conf
并添加了:
[incomingtcp]
9888 = 192.168.80.101:8888
使用以下命令重新启动 VMware 网络:
sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop
sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start
在 Windows VM 上,我使用 DHCP 刷新了网络地址,以确保它收到固定地址(超出 DHCP 租约范围)。
Windows 上的所有防火墙都已被禁用,并且网络位置都已设置为私有。
当我尝试telnet 192.168.80.1 9888
从主机操作系统连接客户端计算机时,我预计连接要么建立,要么被拒绝,要么最终超时。为了测试一下,我ncat
在客户端上运行(ncat -4 -l -t -v 192.168.80.101 8888
)。
这是 telnet 命令的输出:
telnet 192.168.80.1 9888
Trying 192.168.80.1...
Connected to 192.168.80.1.
Escape character is '^]'.
过了一段时间……
Connection closed by foreign host.
换句话说:连接已建立,但奇怪的是,我在 Windows 客户端上看不到任何活动。我已禁用主机上的所有其他网络,以确保它连接到 VMware 网络。
/var/log/vnetlib
每当 VMware 网络(重新)启动时,我都会在日志文件中发现以下内容:
VNLNetCfgLookupNATPortFwd - List of NAT forwarded ports is empty
VNLNATReadPortForward - Failed to read TCP port forward config info.
VNL_StartService - Started "NAT" service for vnet: vmnet8
在中/Library/Preferences/VMware\ Fusion/vmnet8/networking
,我发现了以下(自动生成的)行,表明端口转发的配置更改似乎已被正确读取:
add_nat_portfwd 8 tcp 9888 192.168.80.101 8888
到了这一步,我却不知所措。
版本信息
- macOS Mojave 10.14.3
- VMware Fusion 11.0.2
- Windows 10 专业版 1809
结论
“某些东西”正在接受与映射端口的连接,但是尽管所有防火墙都已禁用,流量仍未到达客户虚拟机。
端口转发和固定 IP 分配似乎是正确的,但日志文件显示有错误。
更新
根据@JensEhrich 的建议,我添加了另一个虚拟机(这次是 macOS),并尝试从 MacVM > WinVM 进行连接。没有运气,无法建立连接。看来 WinVM 上的防火墙正在默默地丢弃传入的包。
我在 MacVM 上设置了 netcat,并尝试从主机和 WinVM 连接到它:两者均可行,即使没有为该客户机设置端口映射(似乎由于主机上有一个作为 NAT 一部分的虚拟 NIC,端口映射仅对主机网络上的传入流量是必要的,而不是主机本身的传入流量)。
因此,看起来 VMware NAT 没有问题,但 WinVM 仍然阻止传入连接,即使防火墙已完全禁用。但即使打开防火墙、允许传入连接,然后再次关闭防火墙,问题仍然存在。
答案1
最后发现这个问题与 VMware 无关。事实上,要从主机连接到客户机,根本不需要端口映射(因为主机有一个虚拟网络适配器,它是同一虚拟 NAT 的一部分)。
阻止入站流量到达客户虚拟机的问题是客户机上运行的 VPN 客户端,它尝试通过激活自己的防火墙并阻止任何传入的网络流量来保护 VPN 端点。