BẢO VỆ MÔ HÌNH CÂY STP
I.CÁC KHÁI NIỆM
RootGuard
Khi mô hình STP đã hội tụ và tạo thành một mô hình không bị lặp vòng thì các cổng của switch sẽ đóng một số vai trò. Cổng gốc (RP) là cổng của switch có đường đi về switch gốc (RB) thấp nhất. cổng chỉ định (DP) là cổng trên một phân đoạn mạng có đường đi ngắn nhất về RB. Cổng này có nhiệm vụ truyền các BPDUs xuống cho các switch ở nhánh dưới. Cổng bị khóa (BP) là những cổng không phải là RP hay DP. Cổng thay thế (AP) là những cổng ở trạng thái bị khóa, sẽ thay thế RP ngay lập tức nếu RP bị hỏng hóc hay sự cố. AP là khái niệm được dùng khi sử dụng tính năng UplinkFast. Cổng chuyển tiếp là cổng bình thường của switch cho phép thiết bị đầu cuối kết nối vào. Sau khi RB được tạo ra, nó sẽ gửi ra các BPDU xuống cho các switch ở nhánh dưới. Các switch nhánh dưới sẽ luôn luôn theo dõi các BPDUs được gửi ra từ RB nhằm xem xét xem RB có còn hoạt động bình thường nữa không. Nếu BPDU không còn nhận được nữa, các switch ở nhánh dưới sẽ cho rằng switch gốc (RB) đã bị sự cố hoặc đường dẫn đến RB không còn tồn tại nữa. Giải thuật STP được chạy lại và tạo lại một sơ đồ mạng khác.
Vị trí của RB trong mô hình STP rất quan trọng. Nó quyết định đường đi của các switch nhánh dưới lên RB là có tối ưu hay không. Do đặc điểm bầu chọn RB là dựa vào các BPDUs nên khi có một switch mới được thêm vào trong sơ đồ mạng STP thì sơ đồ mạng STP lúc này thay đổi. Các switch cần phải tính toán và bầu chọn lại switch gốc (RB) cũng như đường đi mới đến RB. Trong BPDUs có chứa BridgeID, trong BridgeID lại chứa độ ưu tiên của switch. Switch nào có độ ưu tiên nhỏ nhất sẽ trở thành RB. Tuy nhiên, nếu có một switch lạ đã được cấu hình với độ ưu tiên thấp hơn cả độ ưu tiên của RB hiện tại, switch này gắn vào mạng và sẽ trở thành RB mới.
Tính năng RootGuard ra đời cho phép người quản trị luôn giữ được vị trí switch gốc (RB) theo ý đã chọn mà không sợ bị bất kì một switch lạ nào gắn thêm vào làm thay đổi mô hình STP. Nếu có một switch lạ quảng bá một BPDU tốt hơn vào hệ thống mạng, RootGuard sẽ không cho phép switch lạ này trở thành RB. Nó sẽ đưa cổng nhận BPDU trước đó trở về trạng thái không bền vững. Dữ liệu sẽ không được gửi nhận ở trạng thái này. Khi BPDU tốt hơn không còn nhận được trên cổng này, cổng này sẽ trải qua các trạng thái của STP để đưa về sử dụng bình thường. Ta chỉ cấu hình tính năng RootGuard trên RB hoặc các switch nào mà ta không muốn nhận BPDUs của một switch lạ. Ta không nên cấu hình RootGuard trên swich có tính năng uplinkfast. Vì khi này, các cổng thay thế rơi vào trạng thái không bền vững. Điều này làm cho các cổng dự phòng không thể chuyển sang trạng thái chuyển tiếp. Cấu hình RootGuard trên các giao diện bằng câu lệnh:
Switch(config-if)#spanning-tree guard root
Nếu áp đặt tính năng RootGuard lên cổng thì cho dù Switch mới có BridgeID ưu tiên hơn (về trị số sẽ là thấp hơn) thì vẫn không ảnh hưởng gì đến mạng. Tính năng này rất mạnh, nó cấm hoàn toàn Switch lạ vào mạng không thực hiện được telnet, ping …Khi kiểm tra láng giềng trên Switch mới này, bạn sẽ không thấy được Switch trong mạng.
Switch(config-if)#spanning-tree guard root
RootGuard và BPDUGuard là hai phương pháp nhằm ngăn chặn gói BPDU lạ đi vào mạng. Khi có Switch lạ cắm vào mạng thì Switch này không thể trao đổi với các Switch khác trong mạng nếu như có triển khai tính năng này. Các tính năng này chỉ có tác dụng trên cổng, có nghĩa là bạn phải cấu hình trên từng cổng. Nếu bạn cấu hình trên cổng f0/1 mà lại đi cắm Switch lạ vào cổng f0/2 thì Switch mới này vẫn có thể trao đổi thông tin với mạng một cách bình thường.
BPDU Guard
Vấn đề lớn cần quan tâm là khi có switch lạ nối vào mạng, switch này sẽ truyền gói BPDU của nó vào mạng. Các switch sẽ đồng bộ với nhau về sơ đồ mạng thông qua các gói tin BPDU. BPDU được truyền đến cổng của các Switch khác trong mạng, làm thay đổi quan điểm của những Switch này về mạng mà nó đang hoạt động và điều này có thể dẫn đến vòng lặp có thể xảy ra. Khi BPDU bị mất, cổng cũng thay đổi trạng thái của nó làm ảnh hưởng đến mô hình mạng ban đầu. Cả hai trường hợp vừa nêu ra ở trên đều có thể gây ra trạng thái lặp vòng và điều làm chúng ta lo lắng đó là mô hình cũ của mạng bị thay đổi. Tính năng BPDUGuard cũng tương tự như RootGuard. Tính năng BPDUGuard được khuyến cáo sử dụng ở cổng có tính năng portfast. Tính năng portfast cho phép cổng của switch có thể vào trạng thái Forwarding ngay lập tức khi link kết nối với cổng đó up lên. Tính năng portfast được sử dụng trên những thiết bị switch ở lớp truy cập khi ta chắc chắn rằng trên cổng đó không thể xảy ra lặp vòng. Ta bật portfast lên không có nghĩa là đã tắt STP trên cổng đó. Nếu có một switch mới bị cắm nhầm vào cổng có tính năng portfast thì loop có thể xảy ra vì portfast cho phép chuyển cổng sang trạng thái forwarding ngay lập tức. Trong khi đó để phát hiện ra vòng lặp thì phải trải qua một khoảng thời gian và các trạng thái khác nhau thì cổng mới đưa vào sử dụng bình thường được. BPDUGuard sẽ cấm không cho switch lạ trao đổi BPDU với mạng. Khi switch nhận được BPDU trên portfast với tính năng BPDUGuard thì cổng sẽ bị đưa vào trạng thái errdisable. Muốn sử dụng lại cổng này thì phải cho phép cổng một cách thủ công hoặc đợi khoảng thời gian errdisable hết hạn.
Giao thức phát hiện kết nối một chiều - Unidirectional Link Detection (UDLD) cho phép các thiết bị đang kết nối với nhau bằng cáp quang hoặc cáp đồng có thể quan sát và phát hiện được các vấn đề về trạng thái kết nối vật lý của hệ thống cáp khi có hiện tượng kết nối theo một hướng duy nhất (Unidirectional Link) xảy ra. Khi hiện tượng Unidirectional Link được phát hiện, UDLD sẽ tắt các cổng của switch bị ảnh hưởng, và phát ra cảnh báo cho các người dùng biết được tình trạng hiện tại của cổng này. Hiện tượng Unidirectional link này gây ra nhiều hệ quả khác nhau không có lợi cho môi trường LAN, bao gồm cả việc gây ảnh hưởng đến khả năng chống lặp vòng trong giao thức spanning-tree. UDLD là giao thức hoạt động tại lớp 2 nhưng lại làm việc với các thiết bị lớp một để có thể xác định trạng thái kết nối vật lý của một kết nối nào đó. Tại lớp 1, các phương thức tự động thương lượng (autonegotiation) đảm trách các tín hiệu vật lý và phát hiện lỗi. UDLD thực thi các tác vụ mà các phương thức tự động thương lượng không thể thực thi, ví dụ như phát hiện tình trạng hiện tại của các láng giềng và tắt các cổng kết nối sai. Khi ta bật lên đồng thời "autonegotiation" và UDLD, lớp 1 và 2 sẽ làm việc cùng nhau để ngăn ngừa các hiện tượng kết nối theo một hướng về mặt vật lý và logic.
Hiện tượng Unidirectional Link xảy ra khi có bản thận thiết bị nào đó phát ra các tín hiệu và được tiếp nhận bởi thiết bị láng giềng nhưng bản thân thiết bị này lại không thể tiếp nhận các tín hiệu do thiết bị láng giềng này trả về. Nếu một trong các mạch quang trong một cặp dây bị ngắt , khi mà autonegotiation đã được bật, kết nối không ở trạng thái hoạt động. Nếu cặp dây cáp quang này hoạt động bình thường ở lớp 1, thì giao thức UDLD tại lớp 2 sẽ xác định các cáp quang này có được kết nối đúng hay không và các lưu lượng dữ liệu có đang truyền theo cả hai hướng giữa các láng giềng hay không. Autonegotiation không thể thực thi khả năng này bởi vì negotiation hoạt động ở lớp 1. Switch truyền các gói UDLD tới các switch láng giềng theo chu kỳ thông qua các cổng khi giao thức UDLD đã được bật lên. Các thiết bị ở cả hai đầu kết nối phải hổ trợ giao thức UDLD để giao thức này có thể định nghĩa và ngăn chặn các hiện tượng Unidirectional Link. Mặc định, giao thức UDLD được tắt trên giao diện kết nối bằng cáp đồng để tránh việc gửi các lưu lượng điều khiển không cần thiết.
Hình 26
Switch B có thể nhận được các traffic từ Switch A trên interface kết nối cụ thể. Tuy nhiên Switch A không thể nhận được lưu lượng từ Switch B trên cùng cổng tương tự. UDLD phát hiện ra vấn đề này và tắt cổng này. Các cấu hình mặc định trên Switch Cisco 4500 series:
+ ULDL trạng thái toàn cục : mặc định được tắt
+ UDLD trạng thái trên các cổng quang: mặc định được bật
+ UDLD trạng thái trên các cổng cáp đồng : mặc định được tắt
Để Bật giao thức UDLD toàn cục cho tất cả các cổng quang, gõ lệnh sau:
Switch(config)# [no] udld enable
Chú ý: dòng lệnh này chỉ cấu hình các cổng quang để chạy giao thức UDLD.
Bật giao thức UDLD trên cổng cụ thể:
Switch(config-if)# udld enable
Để xem lại cấu hình:
Switch# show udld interface
Tắt UDLD trên các cổng không phải là cổng quang(cáp xoắn đôi,…):
Switch(config-if)# no udld enable
Để xem lại cấu hình:
Switch# show udld interface
Chú ý: trên các cổng quang, dòng lệnh no udld enable sẽ trả lại cấu hình
của các cổng thành udld enable. Tắt UDLD trên các cổng quang:
Switch (config-if)# udld disable
Chú ý: dòng lệnh này không được hổ trợ trên các cổng không phải là giao diện kết nối quang. Resetting các cổng bị tắt bởi UDLD:
Switch# udld reset
II.LAB
Yêu cầu:
Gợi ý:
1a: Cấu hình Bridge ID (BID) thực chất là cấu hình Bridge Priority, cấu hình Bridge Priority cho 4 SW như sau:
SW1(config)# spanning-tree vlan 1 priority 4096
SW2(config)# spanning-tree vlan 1 priority 8192
SW3(config)# spanning-tree vlan 1 priority 12288
! SW4 priority default là 32768
1b: Để SW4 không trở thành Root Bridge (RB), cấu hình tính năng Root Guard trên F0/7(SW2) và F0/6 (SW3):
SW2(config)# interface fastEthernet0/7
SW2(config-if)# spanning-tree guard root
SW3(config)# interface fastEthernet0/6
SW3(config-if)# spanning-tree guard root
2a,b: Cấu hình BPDU Guard trên port F0/23 – 24 của SW3 và SW4:
SW3(config)# interface range fastEthernet f0/23 – 24
SW3(config-if)# spanning-tree bpduguard enable
SW4(config)# interface range fastEthernet f0/23 – 24
SW4(config-if)# spanning-tree bpduguard enable
2c: Cấu hình error-disable để port tự động khôi phục khỏi trạng thái lỗi:
SW3(config)# errdisable recovery cause all
SW3(config)# errdisable recovery interval 30
3a: Để cấu hình BPDU Filtering trên các port đã cấu hình portfast, dùng lệnh sau:
SW3(config)# spanning-tree portfast bpdufilter default
SW4(config)# spanning-tree portfast bpdufilter default
3b,c: khi tắt STP (bằng cách cấu hình bpdufilter) trên F0/6(SW4), F0/7(SW4) STP sẽ chuyển từ Non DP -> Root Port (trạng thái là forwarding) gây ra loop. Khi đó cấu hình STP Loop Guard trên SW4 STP sẽ block F0/6(SW4) nên sẽ không gây ra loop:
SW4(config)# spanning-tree loopguard default ! lenh nay truoc
SW4(config)# interface fastEthernet 0/6
SW4(config-if)# spanning-tree bpdufilter enable ! lenh nay sau
! lưu ý: phải bật tính năng loopguard trước khi bật bpdufilter, nếu làm ngược lại loopguard sẽ không hoạt động.
Cấu hình đầy đủ:
SW1:
!
configure terminal
!
spanning-tree vlan 1 priority 4096
!
end
SW2:
configure terminal
!
spanning-tree vlan 1 priority 8192
!
interface fastEthernet0/7
spanning-tree guard root
!
end
SW3:
configure terminal
!
spanning-tree vlan 1 priority 12288
!
interface fastEthernet0/6
spanning-tree guard root
!
interface range fastEthernet0/23 - 24
spanning-tree bpduguard enable
!
errdisable recovery cause all
errdisable recovery interval 30
!
spanning-tree portfast bpdufilter default
!
end
SW4:
configure terminal
!
interface range fastEthernet0/23 - 24
spanning-tree bpduguard enable
!
errdisable recovery cause all
errdisable recovery interval 30
!
spanning-tree portfast bpdufilter default
spanning-tree loopbuard default
!
interface fastEthernet0/6
spanning-tree bpdufilter enable
!
end
!Kiem tra:
#show spanning-tree
#debug spanning-tree events
#show ip int