使用虚拟网络“默认”,我让访客进入他们自己的子网,并通过 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 服务器)。
在此,我想根据我的经验为那些完成该程序的人添加一些内容:
按照上述方法启用网桥后,重新启动服务器。请注意,物理网卡将不再可通过网络访问(例如通过 SSH)。新的(网桥)接口“br0”将具有与网卡不同的 IP 地址。
要使用桥接器更改虚拟机(这里是 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>
(重新)启动虚拟机
要查找虚拟机的 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
希望这可以帮助。