我在 sysadm 团队中就 linux 桥接发生了争论,更具体地说,是关于创建桥接以添加 vlan 接口的必要性。
我得到(我认为)Linux 网桥允许进行第 2 层数据包路由的理论,尽管在实践中为了创建一个 VLAN:
ip link add link eth0 name eth0.100 type vlan id 100
运行良好,无需创建VLAN,br0
然后将 VLAN 添加到该网桥。
例如,当数据包到达具有多个物理接口的主机时,Linux 内核完全能够确定将数据包路由到何处,即使每个物理接口链接到不同的物理交换机。
那为什么我们还需要linuxbridge呢?
我还想知道为什么在虚拟化方面,虚拟机管理程序需要Linux桥来允许主机和来宾之间的通信?
答案1
在裸机(非虚拟化)主机上,通常不需要创建网桥来添加 VLAN 接口。
但在虚拟机管理程序上,任何网络段本质上都分为两部分:
- 外部世界和虚拟机管理程序之间的物理网络段
- 主机与虚拟机之间的虚拟网段
请注意,不是两个而是三个可以相互通信的东西:虚拟机管理程序、VM、和外面的世界。
您可以使用虚拟机管理程序上的路由来提供虚拟机和外部世界之间的连接,但这很不方便:如果您想使用 DHCP,则至少需要为主机上的虚拟机提供 DHCP 帮助程序。一些集群技术还要求所有节点都在同一个 IP 网段中,因此如果使用路由,此类集群的 P2V 转换将会很尴尬。除非您的虚拟机管理程序是一个非常大的服务器,否则它实际运行的虚拟机数量可能相当小,因此可能需要将已经有限的 IPv4 地址空间分割为低效的小型子网,或者使用点对点连接。
通过桥接,主机及其所有虚拟机可以以这样的方式呈现给外界,即虚拟机管理程序及其虚拟机的网络连接在大多数实际用途中与具有多个完全独立的裸机的交换机的上行链路无法区分连接到它的主机。
为每个 VLAN 创建一个单独的网桥而不是一个支持多 VLAN 的大型网桥的决定本质上是一种设计/表示选择:当虚拟机管理程序网络的实际配置紧密遵循“逻辑”时,可能更容易可视化正在发生的情况网络图,而不必为管理程序内部的网络维护单独的“虚拟逻辑”和“虚拟物理”图。
VMware 决定将其网桥称为 vSwitch,或虚拟交换机。嗯,网络交换机本质上只是一个多端口桥,因此如果您愿意,欢迎您将 Linux 虚拟机管理程序上的桥称为“虚拟交换机”。
答案2
当然,您不需要网桥即可使用 VLAN。
但如果你想的话,你可以:
- “合并”不同的网络以将其视为单个实体,例如 eth 接口与 wlan - 就像 LAN 侧的家庭 WiFi 路由器的情况一样,即在 L2 中连接不同的网段,即不使用路由,
- 构建一个交换机(事实上,每个交换机实际上桥接其端口之间的所有 VLAN)——这是虚拟化的一个例子;如果服务器不是虚拟的而是物理的,您可以使用真实的交换机将其连接到网络,
- 简化故障转移的配置 - 创建“虚拟”桥接接口可能更好,该接口由一次配置的任何物理(或逻辑! - 例如在物理接口上创建的 VLAN)支持,而不是更改底层接口本身的配置。例如:br-wan 可能有 IP 设置,您可以简单地切换下面的设备(wlan0、eth1、eth2.45)。网桥可能有固定的 MAC 地址,因此您只需更改访问方法即可。
- 创建隐藏的 (L2) 防火墙或 QoS schaper(或嗅探器),这在数据包跟踪中不可见。
请注意特殊类型的“桥”,即绑定/组合,用于链路聚合(例如 LACP),以提供冗余或更高的带宽。