理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)
理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)
本文截自于博主CCNP交换技术稿件内容
BPDU Guard(BPDU保护),简单的讲它的意义就是一个不该接收BPDU的端口,比如被启动了portfast的端口,一旦收到BPDU报文,那么BPDU保护功能将会立即关闭该端口,并将端口状态置为error-disabled状态。BPDU Guard的配置分为全局型的配置和接口级的配置,注意这两种配置将带来一些不同的效果。
全局配置BPDU Guard
全局配置BPDU Guard将使用spanning-tree portfast bpduguard default的全局配置命令,能过命令不难看出,全局配置BPDU Guard功能是必须依附于portfast而存在的,因为一个被规划为portfast的端口默认情况下是不应该连二层接桥接类设备,一般用户连接桌面机和服务器,那么这样的端口是不应该接收BPDU报文的,如果在全局配置了BPDUGuard功能,当portfast端口一旦收到BPDU报文,那么该端口将被关闭并转入error-disabled状态。
在接口上的BPDU Guard配置
在接口模式下配置BPDU Guard是通过spanning-tree bpduguard enable接口配置命令来完成,注意在接口模式下启动BPDU Guard功能,不需要依赖portfast而存在,换言之,在接口模式下启动BPDU Guard功能时,无论该接口是一个什么接口,是否是portfast接口这些都不重要,只要管理员认为该接口不应该接收BPDU报文,那么就可以在接口上配置BPDUGuard功能,一旦这个接口被启动BPDUGuard功能后,它接收到BPDU报文,那么那么该端口将被关闭并转入error-disabled状态。
注意:一旦某个端口被转入error-disabled状态,必须通过管理员手工重启并恢复该接口!
如果在某些时候,出现这样一个题目:某台交换机由于某种原因在一些连接桌面机或者服务器的接口上是没有启动portfast功能的,此时需要一种保护机制,当这些端口一旦收到 BPDU报文就将被关闭被转入error-disabled状态,请问应该使用一种什么配置?回答是在接口上通过spanning-treebpduguard enable来完成。因为接口上的BPDU保护是不需要依赖于portfast功能的。
演示:BPDU Guard在全局与接口上的配置
演示目标:
ü 测试全局模式下BPDU Guard的功能
ü 测试接口模式下BPDU Guard的功能并区别全局配置
演示环境:如图所示。
演示背景:为了更好的测试BPDU Guard的效果,就必须存在一台能发送BPDU的设备,为了测试方便,笔者在如图所示的环境中将S2和S3引入作为发送BPDU的设备,为了读者全程的看到BPDU Guard检测行为的完整效果,建议实验人员首先将交换机S2和S3相应端口的交换功能关闭(no switchport),这样在初始状态由于交换功能被关闭就不再发送BPDU,然后在S1对BPDU Guard配置完成后,再到S2或者S3上逐个端口下启动交换机功能(switchport),使其产生BDPU报文的发送来检测S1的BPDU Guard功能。
演示步骤:
第一步:在S2的e0/0-3的接口范围和S3的e1/0上关闭交换功能,先不让其发送BPDU报文,具体配置如下:
关闭交换机S2的E0/0-3的交换功能:
S2(config)#interface range e0/0-3 * 进入S2的E0/0-3的接口范围
S2(config-if-range)#no switchport * 关闭交换功能,暂时就会在该接口上发送BPDU报文
S2(config-if-range)#no shutdown * 确保端口被激活
S2(config-if-range)#exit
关闭交换机S3的E0/0的交换功能:
S3(config)#interface e1/0 * 进入S3的E0/0的接口
S3(config-if)#no switchport * 关闭交换功能,暂时就会在该接口上发送BPDU报文
S3(config-if)#no shutdown * 确保端口被激活
S3(config-if)#exit
第二步:现在首先来测试全局模式下BPDU Graud的效果,注意全局模式下的BPDU Graud是需要依赖于portfast存在的,所以应该先将交换机S1的所有端口配置为接入模式,并在所有端口上启动portfast功能,具体配置如下:
将交换机S1的所有端口规划到接入模式并启动portfast端口:
S1(config)#interface range e0/0-3 * 接入模块0的e0/0-3的接口范围
S1(config-if-range)#switchport mode access * 将该接口范围配置为接入模式
S1(config-if-range)#no shutdown * 激活该接口范围
S1(config-if-range)#exit
S1(config)#interface range e1/0-3 * 接入模块1的e1/0-3的接口范围
S1(config-if-range)#switchport mode access * 将该接口范围配置为接入模式
S1(config-if-range)#no shutdown * 激活该接口范围
S1(config-if-range)#exit
S1(config)#spanning-tree portfast default * 将所有接入端口配置为portfast接口
%Warning: this command enables portfast by default onall interfaces. You *这部分是系统给出启动portfast后,注意防环的提示
should nowdisable portfast explicitly on switched ports leading to hubs,
switches andbridges as they may create temporary bridging loops.
当完成上述的配置后,可以通过在交换机S1上执行show spanning-tree如图所示,可以看出当前的portfast配置生效,因为该交换机的所有端口都是Edge(边缘端口),从某种意义上讲,这里的边缘端口就是portfast。
在交换机S1上通过全局命令配置BPDUGuard功能:
S1(config)#spanning-treeportfast bpduguard default *在所有portfast端口上启动BPDU Guard
在全局启用BPDU Guard必须要依赖于portfast存在!接下来开始检测S1全局BPDU Guard功能的效果,在交换机S2的e0/0开启交换功能,当交换机功能开启时,交换机S2将会向S1发送BPDU报文,这样就可以触发交换机S1上配置的BPDU Gruad功能。
在交换机S2的e0/0开启交换机功能:
S2(config)#intee0/0
S2(config-if)#switchport *开启交换功能,此时发始像S1发送BPDU
当交换机S2的E0/0接口的交换功能开启时,再次切换到交换机S1的控制台,很快就可以看到如下所示的系统提示,内容的大致意思是:交换机S1的e0/0被启动了BPDU保护功能,但是此时它正在接收BPDU报文,所以该端口正在被禁用,状态被转为error-disabled,E0/0端口被关闭。
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on portEthernet0/0 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on Et0/0,putting Et0/0 in err-disable state
%LINEPROTO-5-UPDOWN: Line protocol on InterfaceEthernet0/0, changed state to down
%LINK-3-UPDOWN: Interface Ethernet0/0, changed state todown
此时管理员可以通过在交换机S1上执行showinte e0/0查看接口的状态,如图所示,E0/0的物理状态和线路属性状态被关闭,而且被转为error-disabled。如果需要解除E0/0的error-disabled就需要管理手工恢复并激活该端口。这就是BPDU Guard全局的作用。此时用户可以通过在S1上执行showspanning-tree summary totals来查看生成树的参数,如图所示,指示在portfast接口上已经启动了BPDU保护功能。
第三步:现在来测试在接口上BPDU Gruad的效果,首先进入S1的E1/0接口,将该接口从portfast功能中脱离出来,因为接口级的BPDU Gruad不需要依赖portfast功能,具体配置如下所示:
首先将S1的E1/0接口从portfast功能中脱离出来:
S1(config)#intee1/0
S1(config-if)#spanning-treeportfast disable * 禁用该接口的portfast功能
S1(config-if)#exit
在完成上面禁用E1/0的portfast功能后,可以通过show spanning-tree interface e1/0查看当前端口已经回退到常规的生成树端口类型中,如图所示。
此时在交换机S3上的e1/0接口上通过switchport来开启交换机功能,让S3的E1/0发送BPDU报文,由于目前暂时还没有在S1的E1/0接口上启动BPDUGurad功能,并且该端口也不再属于portfast端口,所以它S1上全局的BPDU Gurad配置不会限制S1的E1/0,所以在这种情况下,S1的E1/0即便是收到BPDU报文,也不会关闭端口,具体如图所示。确定S1的E1/0端口工作正常后,请再次在S3上的E1/0上关闭交换机功能(no switchport),为后面的测试做准备。
在S1的E1/0接口上启动BPDU保护功能:
S1(config)#inte e1/0
S1(config-if)#spanning-treebpduguard enable * 在接口上启动BPDU Gruad功能
S1(config-if)#exit
现在开始来测试S1的E1/0接口上的BPDUGruad效果,请在S3的E1/0接口上启动交换功能(switchport),其目的是为了让S1的E1/0发送BPDU报文,由于S1的E1/0接口上启动了BPDU保护功能,所以在交换机S1的控制台上系统会给出如下提示,此时可以在交换机S1上通过show intee1/0查看该接口的状态,如图所示,该接口被关闭并转入error-disabled状态。
交换机S1的E1/0被关闭并转入error-disabled状态:
%LINEPROTO-5-UPDOWN: Line protocol on InterfaceEthernet1/0, changed state to down
%LINEPROTO-5-UPDOWN: Line protocol onInterface Ethernet1/0, changed state to up
%SPANTREE-2-BLOCK_BPDUGUARD: ReceivedBPDU on port Et1/0 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard errordetected on Et1/0, putting Et1/0 in err-disable state
%LINEPROTO-5-UPDOWN: Line protocol onInterface Ethernet1/0, changed state to down
%LINK-3-UPDOWN: Interface Ethernet1/0,changed state to down