QEMU 配置用于在 Windows 上使用 SSH 和 HTTP 托管 Linux

QEMU 配置用于在 Windows 上使用 SSH 和 HTTP 托管 Linux

我在 Windows 10 操作系统上进行 WEB 开发。为此,我正在运行Debian LinuxQEMU我想使用SSH连接到虚拟机,可能putty同时通过像http://192.168.1.1/index.html在 Internet 浏览器中一样输入 URL 来测试我的服务器。

我的虚拟机配置如下:

  • nginx在端口 80 和 443 上HTTPHTTPS
  • SSH用于笔记本电脑和虚拟机之间的文件传输

我对网络不是很熟悉QEMU,我读了很多关于这个主题的东西,但我不了解技术细节。我只需要进行基本的 WEB 开发,我尝试了以下配置:


> *Attempt 1*
qemu-system-x86_64 -m 512 -drive format=qcow2,file=hard-drive-4G.qcow2 -accel hax -nic tap,ifname=TAP-WIN32

在这里,我之前安装了一个 TAP 设备Windows并创建了一个Network Bridge。使用此解决方案,我相信QEMU用作桥接网络。这个解决方案一开始似乎有效,但实际上并不稳定。我每天离开办公室时都会关闭虚拟机,第二天早上重新启动它。非常奇怪的是,使用几天后,网络不再工作,SSH 中断,HTTP 也中断了。

我一直没能弄清楚这里出了什么问题(IP 地址似乎是正确的),但我认为它们可能存在冲突,也许是DHCPMAC 地址混乱了,我完全不知道。

我观察到了两件事:

观察 1:当它不工作时,我尝试从 Debian ping 一个网站,我收到一个unable to resolve host错误,并且DHCP在我的虚拟机上给出了与我的 Windows 计算机相同的 IPv4 地址。

观察-2:当虚拟机工作时,ifup请求DHCP新的 IP,虚拟机获得的 IP 地址与我的笔记本电脑的本地 IP 地址不同。我只是不知道这种工作状态会持续多久。


> *Attempt 2*
qemu-system-x86_64 -m 512 -drive format=qcow2,file=hard-drive-4G.qcow2 -accel hax -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22

这里,SSH可以通过putty(端口 5555)访问,但如果我http://10.0.2.15/index.html在互联网浏览器中输入,就会出现连接超时。


有什么简单的方法可以得到SSH HTTP是否可以从QEMUWindows 上的虚拟机上使用?

答案1

我找到了一个解决方案,将文档的不同部分合并在一起。在这个惊人的Stackoverflow 问题中,我们了解了几种网络设备的区别:

  • 虚拟
  • e1000
  • rtl8139

总结一下,virtio 是最快的,但是驱动程序可能不容易获得。rtl8139 速度很快,而且大多数操作系统都可以轻松获得驱动程序。e1000 是三者中最慢的,但是大多数操作系统都可以获得驱动程序,甚至一些奇怪的操作系统也可以。

因此,虽然 virtio 具有最佳性能,但 e1000 具有最佳兼容性。我将选择该virtio设备。

在里面评论部分在另一个网站上,我们可以看到如何链接多个端口重定向:

-netdev 用户,id=ethernet.0,hostfwd=tcp::5555-:1522,hostfwd=tcp::9999-:9,hostfwd=tcp::17010-:17010,hostfwd=tcp::17013-:17013


将所有内容放在一起,我们有一个看起来非常强大和稳定的配置:

qemu-system-x86_64 -m 512 -drive format=qcow2,file=hard-drive-4G.qcow2 -accel hax -netdev user,id=net0,hostfwd=tcp::8022-:22,hostfwd=tcp::8080-:80 -device virtio-net-pci,netdev=net0

港口似乎实际上在主机和虚拟机之间共享。因此,如果想要使用SSH在虚拟机的端口 22 上运行的,则需要选择另一个端口(例如 8022)并将其重定向到虚拟机的端口 22。

对端口 80 也进行同样的操作。

最后:

  • SSH虚拟机的user@localhost:8022
  • HTTP虚拟机的http://localhost:8080

请注意,虚拟机可以使用互联网,但是ICMP它似乎不起作用,因此ping命令无法正常工作。

相关内容