我可以让我的 KVM 客户机与主机位于同一子网上吗?

我可以让我的 KVM 客户机与主机位于同一子网上吗?

使用虚拟网络“默认”,我让访客进入他们自己的子网,并通过 NAT 连接到主机的子网。

使用单独的桥接器,似乎可以让访客与主机位于同一子网上,但显然这需要主机上专用的物理网卡?

我曾尝试过 macvtap vepa 或 bridge,但无法通过这种方式获取链接。

是否可以让客户机看起来就像主机所在子网上的其他物理机器一样?如果可以,该怎么做?我需要这个,因为我的应用程序使用广播通信。

我在 rhel 和 ubuntu 上使用 QEMU/KVM。Guest 也是 rhel 或 ubuntu。我使用 virt-install、virsh(以及用于测试/调试的 virt-manager)定义/管理虚拟机。服务器没有可用于这些目的的额外网卡,只有主机本身使用的网卡。

答案1

进程Ubuntu 20.04

在主机上设置逻辑网桥

创建/etc/netplan/01-kvmbridge.yaml。例如:

network:
  ethernets:
    enp2s0f0:
      dhcp4: false
  bridges:
    br0:
      interfaces: [enp2s0f0]
      dhcp4: true
      mtu: 1500
      parameters:
        stp: true
        forward-delay: 15

笔记: NIC 名称将根据驱动程序而有所不同。地址分配不必由 DHCP 进行。

运行sudo netplan try以测试配置,并sudo netplan apply在您满意其工作后应用它。请注意,通过 ssh 更改网络配置可能不是一个好主意。

告诉 KVM 如何访问连接

创建一个文件 ~/kvmbridge.xml,内容如下:

<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

启用桥接:

virsh net-define ~/kvmbridge.xml
virsh net-start host-bridge
virsh net-autostart host-bridge

现在您应该能够host-bridge为您的虚拟机选择网络,以使它们与主机共存于同一网络上。

答案2

非常感谢。刚开始使用 KVM。效果很好,只是想知道为什么没有更多记录,因为这应该是家庭或企业中非常常见的用例,其中 DHCP 服务器是一个单独的设备(如家庭中的路由器),并且您希望从网络上的其他计算机访问它(例如作为 Web 服务器)。

在此,我想根据我的经验为那些完成该程序的人添加一些内容:

  1. 按照上述方法启用网桥后,重新启动服务器。请注意,物理网卡将不再可通过网络访问(例如通过 SSH)。新的(网桥)接口“br0”将具有与网卡不同的 IP 地址。

  2. 要使用桥接器更改虚拟机(这里是 ubuntu-guest):

virsh edit ubuntu-guest

只需将源更改为 br0

<interface type='bridge'> <mac address='52:54:00:f9:71:d5'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'> </interface>

  1. (重新)启动虚拟机

  2. 要查找虚拟机的 IP,请使用 virsh console 。然后运行 ​​ifconfig 来查找其 IP(我还没有找到其他查找虚拟机 IP 的方法)

顺便说一句,关于通过 SSH 更改网络配置,我使用的是服务器和客户端之间的“NULL 调制解调器”串行连接。

答案3

我们希望 QEMU/KVM 客户虚拟机与主机位于同一网络子网上。

在此示例中,网络上的主机 IP 为 192.168.0.10。主机只有一个且仅有一个 NIC。
断开或关闭(最好的方法是删除)现有的有线网络连接。
这非常重要,以便现有连接不会干扰以下设置。

设置是使用 nmcli(用于控制 NetworkManager 的命令行工具)和 brctl(以太网桥管理)进行的。一个方便安装的工具是 nm-connection-editor,它非常适合设置或删除连接。
在使用 nmcli 提交之前,始终可以使用 brtcl 命令创建桥接以进行测试。在下面的示例中,brtcl 命令的唯一用途是显示桥接连接,而不是创建桥接进行测试。我们正在使用 nmcli 创建并提交桥接连接。

sudo nmcli con show
NAME    UUID                                  TYPE    DEVICE
virbr0  c42932ae-be14-4b8e-9c70-69868d093483  bridge  virbr0

我们忽略 virbr0,因为它是由 VirtualBox 创建的,然后创建一个新的

sudo brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.52540066413b       yes

同样,在这种情况下,我们忽略 virbr0,因为它已经由 VirtualBox 创建。

在主机上添加新的桥接接口并调用它br0

sudo nmcli con add type bridge ifname br0
Connection 'bridge-br0' (0ac8ba53-3ae8-4241-b464-ec0671aa0239) successfully added.

ip a
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d8:bb:c1:47:1b:bb brd ff:ff:ff:ff:ff:ff   <---
    altname enp5s0
6: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 66:bb:79:6b:bb:67 brd ff:ff:ff:ff:ff:ff   <---

将新添加的网桥 br0 连接到主机上的物理接口,在本例中为 eth1:

sudo nmcli con add type bridge-slave ifname eth1 master br0
Connection 'bridge-slave-eth1' (4696cbda-1002-469c-9893-c085e726ebd5) successfully added.

sudo nmcli con show
NAME               UUID                                  TYPE      DEVICE 
bridge-br0         0ac8ba53-3ae8-4241-b464-ec0671aa0239  bridge    br0   <---
bridge-slave-eth1  4696cbda-1002-469c-9893-c085e726ebd5  ethernet  eth1   <---
virbr0             c42932ae-be14-4b8e-9c70-69868d093483  bridge    virbr0

ip a
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether d8:bb:c1:47:1b:bb brd ff:ff:ff:ff:ff:ff   <---
    altname enp5s0
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d8:bb:c1:47:1b:bb brd ff:ff:ff:ff:ff:ff   <---
    inet 192.168.0.10/24 brd 192.168.0.255 scope global dynamic noprefixroute br0
       valid_lft 86071sec preferred_lft 86071sec
    inet6 fe80::291e:4838:6d3b:6620/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
   

请注意,br0 现在已连接到物理接口 *eth1。
这也将反映在“brctl show”中:

sudo brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.d8bbc1471bdb       yes             eth1   <---
virbr0          8000.52540066413b       yes

使用 ip 命令检查br0是桥接连接:

ip link show type bridge
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether d8:bb:c1:47:1b:bb brd ff:ff:ff:ff:ff:ff

要使用 IP 命令检查主机到 br0 的情况:

ip link show master br0
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000
    link/ether d8:bb:c1:47:1b:bb brd ff:ff:ff:ff:ff:ff
    altname enp5s0

配置虚拟机管理器 (QEMU/KVM) 使用网络源作为“桥接设备”和“设备名称”:br0

启动客户虚拟机并运行'知识产权' 命令:

VirtMachine1:~> ip a
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:e8:ba:ce brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.192/24 brd 192.168.0.255 scope global dynamic noprefixroute enp1s0
       valid_lft 86392sec preferred_lft 86392sec
    inet6 fe80::5054:ff:fee8:bace/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

希望这可以帮助。

相关内容