我不确定如何配置我的 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 设置桥接网络的步骤:
物理设备 - 真实的东西。它唯一知道的是它是一个以太网设备,并且有一个 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
VLAN 设备 - 我的 VLAN 编号为 144。YMMV。您只需在设备名称后添加一个点和一个数字即可告诉 CentOS/Redhat 的网络;脚本
ifup
会查找该名称并从字符串中提取 VLAN ID。然后使用指令告诉它这是一个 VLANVLAN=yes
:(文件 == /etc/sysconfig/network-scripts/ifcfg-em1.144)
DEVICE=em1.144 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes VLAN=yes BRIDGE=br0 NM_CONTROLLED=no
桥接设备 - 桥接器是 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
因此我很高兴!