在 Centos 6 上为 KVM 客户机设置绑定桥的正确方法是什么?

在 Centos 6 上为 KVM 客户机设置绑定桥的正确方法是什么?

在 Centos 6 上为 KVM 客户机设置绑定桥的正确方法是什么?

我目前正在尝试设置两个 KVM 主机,每个主机将承载多个客户机。我有两个 HP DL380:每个都有 4 个网卡。出于故障转移原因,我想将两个网卡(eth0、eth1)置于主动-备份(模式 = 1)绑定中,面向互联网。然后,我想将另外两个网卡(eth2、eth3)也置于主动-备份绑定中,面向管理/后台网络。

除了绑定之外,我还需要一个桥梁,以便 KVM 客户机可以访问前端或后端网络。

在互联网上,我发现了许多不同的配置方法。有些只是提到了绑定,有些只是桥接,有些则试图将其结合起来。我发现没有一种方法提到如果我使用带有许多主机的前后网络会发生什么。

我的一些问题/疑问是。

  • 我对正确的配置文件有了一定的了解,开发人员认为它们应该是这样的,而不仅仅是有效的配置文件。
  • 我收到错误“内核:bond0:收到以自身地址作为源地址的数据包”。bond0 和 bond1 均出现此错误。
  • 流量会自动从后网转发到前网吗?我应该使用 ebtables/iptables 或其他东西来禁用转发流量吗?
  • 我需要使用生成树协议 (STP) 吗?
  • 我需要任何特定路线吗?

这是一张漂亮的图片,显示了环境的状况(至少是其中的一部分)。

网络模式

这是我的相关配置文件。

/etc/sysconfig/网络

NETWORKING=yes
HOSTNAME=host1
GATEWAYDEV=br0
NETWORKING_IPV6=no

/etc/sysconfig/network-scripts/ifcfg-eth0 --ifcfg-eth3

DEVICE="ethX"
NM_CONTROLLED="no"
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
SLAVE=yes
MASTER=bondX
HOTPLUG=no
BOOTPROTO=none

/etc/sysconfig/network-scripts/ifcfg-bond0 --ifcfg-bond1

DEVICE=bondX
BONDING_OPTS="miimon=100 mode=1"
ONPARENT=yes
BOOTPROTO=none
BRIDGE=brX

/etc/sysconfig/网络脚本/ifcfg-br0

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
DELAY=0
BOOTPROTO=none

/etc/sysconfig/网络脚本/ifcfg-br1

DEVICE=br1
TYPE=Bridge
ONBOOT=yes
DELAY=0
BOOTPROTO=static
IPADDR=10.0.1.100
NETMASK=255.255.255.0

更新 1

  • 添加了 /etc/sysctl.conf
  • 从 ifcfg-br0 中删除了 ip。主机不应从互联网访问,而只能从管理网络访问。

* 更新 2*

  • 删除了对 /etc/sysctl.conf 的更改。无需启用 iptables。

答案1

不确定 CentOS 6 是否如此,但在 Fedora 上,绑定模块默认未添加到 Linux 内核,因此你需要创建一个文件/etc/modprobe.d/bonding.conf有内容

alias bond0 bonding

重新启动,您将会看到在启动过程中已加载的绑定模块。

由于您有两个绑定接口,您可能还必须为 bond1 添加另一条别名行。但是我从未尝试过。

建议您先让一个工作,然后再考虑设置第二个。

您提出的有关桥梁的其他问题,其他需要注意的要点,这些配置与网络守护进程,但我不相信它们能与网络管理器. 您正在运行网络或 NetworkManager 守护进程吗?

最后,有多种方式可以配置 netfilter 来处理桥接接口。至少在 Fedora 12+ 上,默认是在桥接上禁用 netfilter。但是,您可以通过编辑/etc/sysctl.conf和设置

net.bridge.bridge-nf-call-iptables=1

对 arp 和 ipv6 执行相同操作,并且在此文件中还需要设置

net.ipv4.ip_forward=1

刷新 FORWARD 链并用 iptables 规则替换

iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT

答案2

  1. 转发到 iptables 是可行的,但是为了什么呢?这肯定会产生额外的开销
  2. 网络架构似乎正确,但为了安全起见,我会尝试让硬件使用模式 4 而不是模式 1,同时也聚合流量
  3. br0 和 br1 上没有 IP 地址,您有其他可以访问主机的 NIC 吗?您真的不想把自己锁在外面(当然,除非您还有 iLO)
  4. 您发布的内核消息通常与使用与桥接不兼容的绑定模式(0 和 6)有关。您能确定您实际上处于模式 1 吗(/proc/net/bonding/...)通常包含指示
  5. 如果没有特定的配置,子网之间的转发就不应该发生,但是,主机的内核应该能够确定哪个数据包的目的地是哪里,因为 br0 和 br1 位于不同的子网上,因此 br0 上的虚拟机应该能够在 br0 网络上通信,如果您希望它也能够在 br1 上通信,请添加另一个虚拟网卡并将其连接在那里

相关内容