我有一台运行 Linux 的笔记本电脑,使用 wifi 连接到 LAN。我使用 virt-manager 创建了一个 KVM/QEMU VM,并在其上安装了 Ubuntu。正如预期的那样,它可以连接到互联网以下载更新等。
我想在客户机上运行 Apache 进行 Web 开发,并从主机浏览其上的网站。客户机将运行多个网站,我不想在浏览时指定端口号,因此我希望客户机拥有自己的主机可见的 IP 地址,这样我就可以修改主机的 /etc/host 文件以指向客户机。
我不在乎客户机如何访问互联网。它需要能够访问互联网,但只需要对主机可见,而对其他计算机则不可见。因此,如果客户机通过一个虚拟网卡访问互联网,而主机通过另一个虚拟网卡访问互联网,那就没问题了。
我读到过,主机使用 wifi 这一事实很重要,因为我无法桥接到 wlan0。
考虑到我不是网络/iptables 专家,实现这一目标的最简单方法是什么?
更新: 我忘了说了,客户机是作为非 root 用户设置的,即使用 qemu:///session。我不知道这是否有任何影响,但它似乎意味着我无法看到 libvirtd 为 qemu:///system VM 配置的“默认”虚拟网络。
更新 2: 我刚刚在libvirt 文档这表明用户空间 SLIRP 是非特权用户唯一可用的选项。这是否意味着如果不以 root 身份启动虚拟机,我想要做的事情就无法实现?
用户空间 SLIRP 堆栈
提供具有 NAT 的虚拟 LAN 以连接到外部世界。虚拟网络具有 DHCP 和 DNS 服务,并将为客户虚拟机提供从 10.0.2.15 开始的地址。默认路由器为 10.0.2.2,DNS 服务器为 10.0.2.3。对于需要虚拟机具有传出访问权限的非特权用户来说,此网络是唯一的选择。
答案1
在阅读更多内容后libvirt 网站我得出的结论是 qemu:///session 驱动程序不适合这种用例,这就是为什么我在使用它时遇到网络连接困难的原因。
文档中说,“[qemu:///session] 驱动程序的预期用例是桌面虚拟化,虚拟机将其磁盘映像存储在用户的主目录中,并通过本地桌面登录会话进行管理。”(我强调)。
迁移虚拟机以使用 qemu:///system 驱动程序后,我能够访问“默认”网桥,因此虚拟机和主机都拥有私有 IP 地址,可以相互通信。因此答案很简单,使用 qemu:///system 而不是 qemu:///session。