我已经在 virt-manager 中设置了 Gentoo 来宾,但无法从主机通过 SSH 连接到它。我读过,使用 qemu 我需要进行一些端口转发才能访问来宾计算机中的端口。我在 virt-manager 中找不到任何选项。怎么可能做到这一点?
我在 Ubuntu 16.10 上使用 Virt Manager 1.3.2。
答案1
只是为了将其记录在网络上的某个地方:
大约两年后,我通过手动将相关的 QEMU 参数添加到 KVM XML 文件(该文件在幕后保存了所有奇特的虚拟化 foo 的配置)成功地做到了这一点。
以下是我为向用户网络授予端口转发权限而执行的步骤;就我而言,将主机的端口 22222 转发到访客的端口 22:
我的模拟机器在这里将被称为ubuntu18.04。
打开 xml 配置以通过 virsh 进行编辑
$ virsh -c qemu:///session edit ubuntu18.04
找到并删除“用户”类型界面的配置,它可能看起来像这样:
<interface type='user'> <mac address='52:54:00:52:35:ff'/> <model type='rtl8139'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
将 QEMU 命名空间添加到(根)域标记:
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
手动将现在缺少的接口配置添加为域标记内某处的 QEMU 参数(例如,作为 的最后一个子级
<domain>
):<qemu:commandline> <qemu:arg value='-netdev'/> <qemu:arg value='user,id=mynet.0,net=10.0.10.0/24,hostfwd=tcp::22222-:22'/> <qemu:arg value='-device'/> <qemu:arg value='rtl8139,netdev=mynet.0'/> </qemu:commandline>
保存配置并启动/重新启动虚拟机。
ssh 离开:
ssh myusername@localhost -p 22222
答案2
我的理解恰恰相反。如果 libvirt VM 的网络设备配置为连接到virbr0
,您应该能够从主机访问它。
libvirt 称之为“桥接”网络。网络设备的另一个选项(此选项不起作用)称为“用户”网络。如果这不是您的问题,您将必须提供更多信息。
更多详细信息请参见此处:http://xkahn.zoned.net/blog/2013/11/26/networking-and-gnome-boxes
Arch Linux 维基建议虚拟交换机^Wbridgevibr0
是libvirt守护进程默认配置的一部分,因此您只需确保VM配置为使用它即可。他们还链接到详细指南。对于virbr0
,请参阅“基于NAT的网络”
答案3
libvirt 用户网络能够使用通过传输后端而不是默认的 SLIRP。
使用此后端时,可以使用该元素直接在 VM 域 XML 文件中配置端口转发。
要编辑虚拟机的 XML,请使用virsh edit name_of_your_vm
它将在编辑器中打开文件。
例如,要将主机 TCP 端口 4022 转发到客户机端口 22,可以使用以下语法
...
<devices>
...
<interface type='user'>
<backend type='passt'/>
<mac address='00:11:22:33:44:55'/>
<portForward proto='tcp'>
<range start='4022' to='22'/>
</portForward>
</interface>
...
</device>
...
还支持转发多个连续端口
<portForward proto='tcp'>
<range start='31200' end='31300' to='6000' />
</portForward>
转发udp端口
<portForward proto='udp'>
<range start='15055' to='5055' />
</portForward>
详细用法和示例请参见上游文档