理解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