Python 简单 http 服务器和虚拟机 - 无法连接。IP 已更改?

Python 简单 http 服务器和虚拟机 - 无法连接。IP 已更改?

我有时使用python -m SimpleHTTPServer一行代码将文件从我的虚拟机中下载到我的主机。今天我尝试在 NAT 网络设置下的 virtualbox 虚拟机中使用它 - 我在控制台中输入了这个 python 一行代码,然后在 knetworkmanager 中检查了我的虚拟机的 ip(我在客户机上使用带 kde 的 debian),然后在主机上我尝试通过端口 8000 连接到该 ip,但我无法连接...

我的访客经常被暂停、保存等……也许 IP 应该改变,但由于访客被保存然后恢复,出现了问题?有什么想法可以解决吗?

我正在使用 debian linux guest 和 debian linux host。

答案1

要获取端口重定向,请尝试以下操作

VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/HostPort" 8080
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/GuestPort" 8000
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/Protocol" TCP

此配置适用于虚拟 Intel 网卡。对于 PCnet,请尝试pcnet而不是e1000。我假设虚拟机中的端口是 8000。请记住更改NAME_OF_VM为虚拟机的名称!

此后,您可以访问主机系统上的 Web 服务器,通过http://localhost:8080/该服务器将重定向到端口为 8000 的虚拟机。

您可以使用 检查配置VBoxManage getextradata "NAME_OF_VM" enumerate。要删除配置,请键入不带值的命令。

VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/HostPort"
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/GuestPort"
VBoxManage setextradata "NAME_OF_VM" "VBoxInternal/Devices/e1000/0/LUN#0/Config/pythonhttp/Protocol"

答案2

如果您的虚拟机是 NAT 的,那么它们在私有网络 (RFC1918 IP 范围) 中有一个虚拟 IP,因此它们无法从外部路由和访问。

为了使 NAT 机器可以从外部访问,您必须在虚拟网关上实现 PORT REDIRECT,将给定端口上的请求映射到给定端口或其他端口上的虚拟 IP。

这不是虚拟化绑定的问题,这是 NAT 的工作方式。因此,您在网上找到的有关该主题的任何指南都适用。

相关内容