如何在 virt-manager 中端口转发 SSH?

如何在 virt-manager 中端口转发 SSH?

我已经在 virt-manager 中设置了 Gentoo 来宾,但无法从主机通过 SSH 连接到它。我读过,使用 qemu 我需要进行一些端口转发才能访问来宾计算机中的端口。我在 virt-manager 中找不到任何选项。怎么可能做到这一点?

我在 Ubuntu 16.10 上使用 Virt Manager 1.3.2。

答案1

只是为了将其记录在网络上的某个地方:

大约两年后,我通过手动将相关的 QEMU 参数添加到 KVM XML 文件(该文件在幕后保存了所有奇特的虚拟化 foo 的配置)成功地做到了这一点。

以下是我为向用户网络授予端口转发权限而执行的步骤;就我而言,将主机的端口 22222 转发到访客的端口 22:

我的模拟机器在这里将被称为ubuntu18.04。

  1. 打开 xml 配置以通过 virsh 进行编辑

    $ virsh -c qemu:///session edit ubuntu18.04
    
  2. 找到并删除“用户”类型界面的配置,它可能看起来像这样:

    <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>
    
  3. 将 QEMU 命名空间添加到(根)域标记:

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    
  4. 手动将现在缺少的接口配置添加为域标记内某处的 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>
    
  5. 保存配置并启动/重新启动虚拟机。

  6. 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>

详细用法和示例请参见上游文档

相关内容