我在 Windows 10 操作系统上进行 WEB 开发。为此,我正在运行Debian Linux
。QEMU
我想使用SSH
连接到虚拟机,可能putty
同时通过像http://192.168.1.1/index.html
在 Internet 浏览器中一样输入 URL 来测试我的服务器。
我的虚拟机配置如下:
nginx
在端口 80 和 443 上HTTP
:HTTPS
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 地址似乎是正确的),但我认为它们可能存在冲突,也许是DHCP
MAC 地址混乱了,我完全不知道。
我观察到了两件事:
观察 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
是否可以从QEMU
Windows 上的虚拟机上使用?
答案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
命令无法正常工作。