KVM/virt-manager

KVM/virt-manager

我正在运行一个 Linux Fedora 工作站 (Fedora 31),其中托管着 Windows 10 VM 和 docker 中的 Jenkins 服务器(在 Linux 上)。我需要 Jenkins 服务器 (Linux) 连接到 Windows 10 VM 上的 Jenkins 代理,这样我就可以构建一个需要 Linux 和 Windows 的项目。

我正在使用 KVM 和 virt-manager 来管理我的 Windows VM。

有人可以指导我如何做到这一点吗?

图片:

答案1

KVM/virt-manager

似乎有一个相关的教程这里。有两个步骤,总结如下:(1)为虚拟机分配静态 IP 地址;(2)配置防火墙以进行端口转发。

为虚拟机分配静态 IP 地址。

  1. 列出可用网络

    $ virsh net-list
    Name                 State      Autostart     Persistent
    ----------------------------------------------------------
    xhubnet              active     yes           yes
    

    这将为您提供您想要的名称。

  2. 列出网络信息(xhubnet本例中为网络)

    $ virsh net-dumpxml xhubnet
    <network>
    <name>xhubnet</name>
    <uuid>2ba36c4f-46c9-4767-a9fc-6808cf001a19</uuid>
    <forward mode='nat'>
        <nat>
        <port start='1024' end='65535'/>
        </nat>
    </forward>
    <bridge name='virbr1' stp='on' delay='0'/>
    <mac address='52:54:00:8e:b5:88'/>
    <domain name='xhubnet'/>
    <ip address='192.168.111.1' netmask='255.255.255.0'>
        <dhcp>
        <range start='192.168.111.120' end='192.168.111.254'/>
        </dhcp>
    </ip>
    </network>
    

    这会告诉您 DHCP 范围,以便您可以选择合适的地址。

  3. 获取虚拟机的 MAC 地址。

    $ virsh dumpxml VM_NAME | grep -i '<mac'
    <mac address='52:54:00:e2:95:c6'/>
    
  4. 编辑网络配置以请求虚拟机的静态 IP 地址。运行virsh net-edit <DOMAIN_NAME>(在本例中为virsh net-edit xhubnet),并在该部分后添加以下行<range ...>

    <host mac='52:54:00:e2:95:c6' name='VM_NAME' ip='192.168.111.36'/>
    
  5. 通过重启网络来请求静态IP地址:

    $ virsh net-destroy xhubnet
    $ virsh net-start xhubnet
    
  6. 如果这不起作用,请尝试libvirt-bin在 Linux 主机上重新启动该服务:

    $ virsh shutdown VM_NAME
    $ /etc/init.d/libvirt-bin restart
    $ virsh start VM_NAME
    $ ping -a 192.168.111.36
    

在防火墙上配置端口转发

  1. 允许来自 WAN 的连接。在主机上,iptables按以下方式更改规则。假设您使用上面设置的静态 IP 地址将主机上的端口 9867 转发到 Windows 客户机上的端口 22(192.168.111.36):

    # connections from outside
    $ iptables -I FORWARD -o virbr1 -d  192.168.111.36 -j ACCEPT
    $ iptables -t nat -I PREROUTING -p tcp --dport 9867 -j DNAT --to 192.168.111.36:22
    
  2. 伪装本地子网

    # Masquerade local subnet
    $ iptables -I FORWARD -o virbr1 -d  192.168.111.36 -j ACCEPT
    $ iptables -t nat -A POSTROUTING -s 192.168.111.0/24 -j MASQUERADE
    $ iptables -A FORWARD -o virbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    $ iptables -A FORWARD -i virbr1 -o eth0 -j ACCEPT
    $ iptables -A FORWARD -i virbr1 -o lo -j ACCEPT
    
  3. 使更改持久化

    $ service netfilter-persistent save
    $ service netfilter-persistent reload
    

这应该使虚拟机上的指定端口可通过主机的公共 IP 地址使用。如果您的主机位于路由器后面并使用路由器的公共 IP,则可能需要配置路由器端口转发规则,以将流量转发到正确端口上的主机私有 IP。

还可以在 Windows VM 上的 Windows 防火墙中配置任何必要的入站流量规则。

Oracle VirtualBox

如果您使用带有 NAT 网络接口的 Oracle VirtualBox,则可以选择设置端口转发规则。

请参阅此处的屏幕截图

将主机 IP 设置为空白(或0.0.0.0)以监听本地子网上所有计算机的连接,或127.0.0.1仅接受来自同一台计算机的连接。要查找客户操作系统的私有 IP 地址,请使用ipconfig或 之类的命令ip addr

您还可以设置Attached to:Bridged Adapter,这样您的虚拟机就会在网络上显示为其自己的设备。然后,您可以配置客户操作系统和主机路由器的防火墙设置,以启用访问,而无需通过主机操作系统。

相关内容