在同一交换机上互连来自不同 vlan 的接入端口时,(per-vlan)STP 应该如何工作?

网络工程 生成树
2021-07-30 21:04:19

交换机的一半端口在 vlan 10 中,另一半在 vlan 20 中,全部未标记。在某些特定情况下,我们需要该领域的人员能够在不访问(或了解)交换机配置的情况下互连两个 vlan。他们会将一根电缆从 vlan 10 中的一个端口插入到 vlan 20 中的一个端口。

在阿尔卡特 Omniswitch 6250 上,我们注意到互连被生成树阻止,无论是在平面模式还是在“1x1”模式下。由于 1x1 模式为每个 VLAN 运行不同的 STP 实例,我期望端口在两个 VLAN 之间保持转发流量。

结果在 Juniper EX 上似乎相似。在 Wireshark 中,我们看不到来自不同 vlan 的 BPDU 之间的区别。更具体地说,在网桥系统 ID 字段中找不到 vlan 信息。

明显但次优的解决方法是在这些端口上禁用 STP,但我认为这应该可以通过 per-vlan STP 和/或 MSTP 实现是错误的吗?

因为有人可能会问我们为什么要这样做,所以在移动设置中使用交换机来提供具有不同类型上行链路(卫星和 LTE)的两个网络。作为备用计划,运营商有时需要能够(轻松快速地)加入网络,以便所有设备都可以使用可用的上行链路。

这基本上是一个独立的交换机,但由于有时会故意创建物理(但不是逻辑?)循环,当运营商错误地将同一 vlan 中的两个端口互连时,我们希望 STP 介入。

2个回答

MSTP 不会自动对 VLAN 进行分组。

即使您通过分配给不同 VLAN 的两个端口连接了两台交换机,RSTP 和默认 MSTP 也会阻止其中一个端口作为冗余端口。MSTP 需要根据您的需要进行配置,而 RSTP 完全与 VLAN 无关。

您需要定义形成独立生成树的 MSTP 实例。基本上,您可以为每个 VLAN 定义一个实例(这就是 RPVST+ 所做的),但通常将其中一些组合在一起更实用。

或者,您可以通过相同的连接运行相同的(所有必需的)VLAN,并使用单个生成树实例。两个交换机之间的多个连接也可以聚合 (LAG),因此它们都可以用于流量并仍然提供冗余。

但是,R/MSTP 仅在网桥/交换机(或单个交换机上的环路)之间有冗余链接时才相关。如果不阻塞冗余端口,就会出现桥接环路,网络就会瘫痪。主机(通常)不传输或侦听 BPDU,因此通过 STP 交换机以任何方式连接它们不应阻塞任何端口。

也就是说,您似乎陷入了 X/Y 问题。您需要一个冗余的 WAN 上行链路并尝试解决这个问题,这会与 STP 机制发生冲突。

解决初始问题的一种可行方法是设置一个连接到 VLAN 10 和 20 以及两个 WAN 上行链路的路由器。通过适当的设置,路由器会选择所需的上行链路,一切正常。

我不特别了解阿尔卡特,但在 Cisco 上,您可以在每个 VLAN 的一个特定端口上启用 BPDU 过滤。然后你可以桥接这些端口上的两个段并实现你想要的。正如其他人所说,这通常是一个非常糟糕的主意,但它是可能的,并且应该可以正常工作。但是,如果有人确实使用了这些特殊端口之一并将其桥接到同一 VLAN 上的另一个端口,您就会面临风险,您就会有一个环路。

在 Cisco 上,配置看起来像这样,假设例如端口 1 在一个 VLAN 上,而端口 5 在另一个 VLAN 上。

int G0/1
  spanning-tree bpdufilter enable
int G0/5
  spanning-tree bpdufilter enable