KVM:需要多个虚拟机共享一个 VLAN 接口

KVM:需要多个虚拟机共享一个 VLAN 接口

我不确定如何配置我的 Linux 服务器,该服务器只有一个 VLAN 接口,以支持我想桥接到我的网络的多个虚拟机(以便它们的所有服务看起来都来自我网络上的多个真实机器)。我是否只需创建一个br0与现有 VLAN 设备绑定的桥接网络接口,然后让所有虚拟机使用该接口?还是我需要为每个虚拟机设置br0、、br1等?我甚至可以将这些桥接接口绑定到 VLAN 接口吗?我想我需要在桥接的 ifcfg 文件中br2说明?VLAN="yes"

没错,我可以简单地尝试一下看看,但目前我还不太确定这一切是如何结合在一起的,所以我想在理智崩溃之前进行一次理智检查:-)。

我已经设置了一个CentOS7主机:

# uname -a
Linux cha028 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 

它有一个带有 VLAN 的单一接口。因此硬件接口 em1 具有:

# cat ifcfg-em1
NAME="em1"
DEVICE="em1"
ONBOOT="yes"
TYPE="Ethernet"
BOOTPROTO="none"
HWADDR=14:fe:b5:d6:07:cc
NM_CONTROLLED=no

...我有一个 ifcfg-em1.144,里面有所有的 IP 地址等。我在盒子上安装了多个虚拟机。现在我需要让网络正常工作。

我该怎么做?只需按照以下方法创建 ifcfg-br0 即可https://www.banym.de/linux/centos/setup-bridge-device-on-centos(具有自己独特的 IP 地址),然后只需在我的 ifcfg-em1.144 文件中添加一行,内容是BRIDGE=br0

并且,这样做之后,我可以将所有虚拟机连接到 br0 设备吗?

谢谢您的宽容和帮助。

这是我的ifcfg-em1.144文件。请注意,其中/etc/sysconfig/network包含 GATEWAY 行:

VLAN="yes"
DEVICE="em1.144"
PHYSDEV="em1"
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
ONBOOT="yes"
IPADDR="10.144.101.28"
PREFIX="24"
NM_CONTROLLED=no

答案1

如果您桥接到 VLAN 接口(而不是硬件接口),则来自虚拟机的桥接数据包在桥接到线路上时将被标记。如果您桥接到硬件接口,则所有流量都将被桥接,无论标记如何,并且您必须将 VLAN 接口移出桥接(基本接口 VLAN 现在毫无意义)。任意数量的虚拟机都可以共享一个桥接。

通常,您会在主机上处理 VLAN,这样来宾就不必手动配置 VLAN。听起来,许多不同的排列组合都适合您。

答案2

以下是我在主机上通过 VLAN 设置桥接网络的步骤:

  1. 物理设备 - 真实的东西。它唯一知道的是它是一个以太网设备,并且有一个 MAC 地址。哦,把那个该死的网络管理器从它面前拿开:

    (文件 == /etc/sysconfig/network-scripts/ifcfg-em1)

    DEVICE="em1"
    TYPE=Ethernet
    HWADDR=14:fe:b5:d6:07:cc
    BOOTPROTO=none
    ONBOOT="yes"
    NM_CONTROLLED=no
    
  2. VLAN 设备 - 我的 VLAN 编号为 144。YMMV。您只需在设备名称后添加一个点和一个数字即可告诉 CentOS/Redhat 的网络;脚本ifup会查找该名称并从字符串中提取 VLAN ID。然后使用指令告诉它这是一个 VLAN VLAN=yes

    (文件 == /etc/sysconfig/network-scripts/ifcfg-em1.144)

    DEVICE=em1.144
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    VLAN=yes
    BRIDGE=br0
    NM_CONTROLLED=no
    
  3. 桥接设备 - 桥接器是 IP (tm) 的守护者。它保存第 3 层(IP 地址)信息...即 DNS、网络掩码等。对我来说,我喜欢将默认网关放在 /etc/sysconfig/network 中。而且我喜欢将 ZEROCONF(169.254.xy)IP 寻址排除在我的路由表之外。因此我们有:

    (文件 == /etc/sysconfig/network-scripts/br0)

    DEVICE="br0"
    TYPE="Bridge"
    BOOTPROTO="static"
    DEFROUTE="yes"
    ONBOOT="yes"
    IPADDR="10.144.1.12"
    NETMASK=255.255.255.0
    DNS1="10.144.1.101"
    DOMAIN="example.com"
    NM_CONTROLLED=no
    DELAY=0
    

    (文件 == /etc/sysconfig/network):

    GATEWAY=10.144.1.1
    NOZEROCONF=true
    

请注意,网络启动后,交换机可能需要 30-60 秒才能真正接受数据包(即 Cisco 可能配置为这样做)。因此,如果您在 ping 网关时看到“目标主机无法访问”,请稍等片刻。可能需要一段时间才能启动。

一旦主机设置完毕并开始工作(即,您可以 ping 本地网关,然后 ping 网络上的其他主机,然后 ping 您基础设施中的其他主机...请注意全部通过 IP...然后您可以通过主机名 ping/traceroute/telnet-into-port-22),然后您就可以在您的虚拟机上创建网络了。

这非常简单。你只需要确保他们使用 br0 作为网络设备。如果你像我一样使用 virt-install,你可以这样做:

virt-install --name monitor0 --memory 2048 --disk /dev/vm_group0/thin_lv_monitor0  --cdrom ./CentOS-7-x86_64-Everything-1511.iso --network bridge=br0

请注意--network bridge=br0

如果您使用 qemu 并且构建虚拟主机时没有网络,或者使用 NAT,则可以更正它。只需关闭主机即可。然后编辑/etc/libvirt/qemu/<vm name>.xml。查找名为 的部分interface。将其更改为遵循以下示例:

<interface type='bridge'>
  <mac address='52:54:00:22:29:cc'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

...也就是说,您可能需要仅更改第一interface行和该source行(这就是我所做的,在构建机器后没有指定网络[它默认设置 NAT])。

保存文件,然后使用您喜欢的方法重新启动 libvirtd:systemctl restart libvirtd

使用 重启虚拟机virsh start <vm name>。使用虚拟机控制台进入虚拟机,并根据需要编辑网络。请记住,您的虚拟机现在是网络的真正成员,因此您将为其分配与桥接接口位于同一子网中的 IP 地址br0

我已经设置了两个共享 VLAN 的虚拟机,br0因此我很高兴!

相关内容