我有一台在 VMWare player v6 中运行的虚拟机。网络类型为 NAT。虚拟机中的应用程序将 UDP 包发送到主机网络中的服务器,并需要从联系的服务器接收 UDP 应答。
所描述的用例在我的安装中不起作用 - 仅当我切换到网络桥接模式时才起作用。
我测量了 NAT 模式下的网络流量,发现 UDP 包离开虚拟机,并使用转换后的 IP 地址发送到服务器。服务器向主机 IP 发送了一个更新包,但虚拟机没有收到任何包
所以我的问题是 NAT vm 通常是否可以接收 UDP 流量?
答案1
你的情况与普通用户使用小型家用路由器的体验并无不同。NAT 的工作就是提供路由器来执行此操作:在真实互联网和内部网络之间转换网络地址(“网络地址转换”)。但是,唉,就像普通用户使用小型家用路由器的体验一样:对于进入 NAT 网络的连接,你必须明确告诉路由器某些传入端口将被转发到哪里(“端口转发”)。你可以在“Vmware 网络编辑器”中设置端口转发,查看图片以了解要查找的内容:
除此之外:请查看官方 vmware 文档和相关网站:
答案2
正如您所怀疑的,问题出在 NAT 上。这是一种黑客行为,而不是一种设计合理的技术。
具体来说,问题在于 TCP 是面向连接的,而 NAT 会对每个连接进行调整。使用 UDP,没有连接,也没有像样的 NAT 解决方案。有一些启发式方法可以使某些事情正常工作,特别是基于端口的猜测,但 UDP 与 NAT 失败并不罕见。在您的例子中,VMWare NAT 只是没有猜测返回的 UDP 数据包是针对 VM 的。
答案3
如果您有私有局域网(是的,WiFi 就是局域网),您应该考虑将虚拟机的网络适配器切换到bridged
。然后虚拟机将像您网络上的普通 PC 一样运行(使用主机的以太网接口)。