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

我不知道如何configuration我的Linux服务器,它有一个单一的VLAN接口,以支持我想连接到我的networking的一些虚拟机(所以他们所有的服务似乎来自于一些真正的机器上我的networking)。 我是否简单地创build一个单一的桥接networking接口br0 ,绑定到我现有的VLAN的设备,并让所有的虚拟机使用该接口? 或者我需要为每个VM设置br0br1br2等? 我甚至可以将这些网桥接口绑定到VLAN接口上吗? 我想我需要在桥的ifcfg文件中说VLAN="yes"

诚然,我可以简单地尝试一下,但是在这一点上,我很不确定它们是如何组合在一起的,所以我希望在得到一个理智的破坏之前进行一次理智的检查:-)。

我build立了一个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地址。 我已经在盒子上安装了多个虚拟机。 现在我需要使networking工作。

我该怎么做? 根据https://www.banym.de/linux/centos/setup-bridge-device-on-centos (使用自己的唯一IP地址)简单地创buildifcfg-br0,然后在我的ifcfg-em1中添加一行。 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 

如果您桥接到vlan接口(而不是硬件接口),那么来自虚拟机的桥接数据包将被标记为桥接到线路上。 如果你连接到硬件接口,所有的stream量将被桥接,不pipe标签,你将不得不移动你的VLAN接口离开桥(基本接口VLAN现在是没有意义的)。 任何数量的虚拟机都可以共享一座桥。

通常情况下,您将在主机上处理vlans,以便客户不必手动configurationvlans。 这听起来像他们会为你工作的一些不同的排列。

以下是我通过VLAN在主机上设置桥接networking的方法:

  1. 物理设备 – 这是真实的东西。 唯一知道的是它是一个以太网设备,它有一个MAC地址。 噢,让那个该死的networkingpipe理员面对面:

(file == / etc / sysconfig / network-scripts / ifcfg-em1) DEVICE="em1" TYPE=Ethernet HWADDR=14:fe:b5:d6:07:cc BOOTPROTO=none ONBOOT="yes" NM_CONTROLLED=no

  1. VLAN设备 – 我的vlan在这里编号为144. YMMV。 你可以简单地告诉CentOS / Redhat的networking,只需要在设备名称后加一个数字, ifup脚本查找并从string中提取VLAN ID。 并且您使用VLAN=yes指令告诉它它是一个VLAN:

(file == /etc/sysconfig/network-scripts/ifcfg-em1.144)DEVICE DEVICE=em1.144 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes VLAN=yes BRIDGE=br0 NM_CONTROLLED=no

  1. 桥接设备 – 桥是IP(tm)的守护者。 这包含第3层(IP地址)信息,即DNS,networking掩码等。对于我来说,我喜欢将默认网关放在/ etc / sysconfig / network中。 我喜欢保持ZEROCONF(169.254.xy)IP地址不在我的路由表中。 所以我们有:

(file == / 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

请注意,networking启动后,您的交换机可能需要30-60秒才能真正接受数据包(即Cisco可能configuration为执行此操作)。 因此,如果您在ping网关时看到“目标主机不可达”,请等待一分钟。 这可能需要一段时间才能出现。

编辑:一旦主机设置和工作(即,您可以ping本地网关,然后pingnetworking上的其他主机,然后其他主机在您的基础设施…所有通过IP介意你…那么你可以ping / traceroute / telnet-to-port-22 by hostname),那么你就可以在虚拟机上创buildnetworking了。

这非常简单。 你只需要确保他们使用br0作为他们的networking设备。 如果你像我一样使用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,并且在没有networking或NAT的情况下构build虚拟主机,则可以更正此问题。 只要把主机放下。 然后编辑/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行(这就是我没有指定networking(它默认设置NAT)构build机器后所做的)。

保存该文件,然后使用您最喜欢的方法systemctl restart libvirtdsystemctl restart libvirtd

使用virsh start <vm name>重新启动VM。 使用控制台进入虚拟机,并根据需要编辑networking。 请记住,您的虚拟机现在是您的networking的一个真正的成员,所以你要给它在与桥接接口br0相同的子网的IP地址。

我已经build立了两个虚拟机共享VLAN的br0所以我是一个快乐的露营者!

最后,告诉你的老板你已经做了什么,你有多酷。 完成之后,飞往坎昆,在沙滩上喝上一个Pina Colada。 派对一个礼拜。 重新开始工作,并设置您的networking服务器或您的虚拟机上有什么。 你跑到比赛了!

而且…祝你新年快乐!