ปัญหาจาก Rogue Switch ที่ทำให้เกิดปัญหาในระบบเครือข่าย บทความดี ๆ จากคุณ At lease 8 Member SNK
ในระบบเครือข่าย สิ่งที่เราพบกันมากก็คือ rogue เรียกว่า โร๊ก เอาภาษาไทยเรียกว่า รกแล้วกัน
rogue dhcp เป็นสิ่งที่เราพบกันมากที่สุด มันเกิดจากเราเอา adsl router มาตั้งในเครือข่าย มันจะจ่าย ip ในกลุ่ม 192.168.1.0/24 หรือ 192.168.1.0/24 ออกมา ด้วยค่า Default GW และค่า DNS นี้จะทำให้เครือข่ายปั่นป่วน สิ่งที่ถูกต้องก็คือ การย้ายการจ่าย ip จาก Class c ที่ใช้กันมากคือ 192.168.1.0/24 หรือ 192.168.1.0/24 ไปเป็น class A หรือ class B นี้ก็หลบเลี่ยงได้ แต่สิ่งที่ต้องเสริมขึ้นมาคือ การปิด rogue dhcp นี้ ไว้วันหลังจะกล่าวถึง ตอนนี้ขอเล่นเรื่อง Rogue Switch ก่อน ในเครือข่าย Switch layer 2 จะมีการแต่งตั้งและเลือกตั้งตามค่า priority ของ Switch ซึ่งปกติจะมีค่าเท่ากับ 32769
sh span bridge Hello Max Fwd
Vlan Bridge ID Time Age Dly Protocol
---------------- --------------------------------- ----- --- --- --------
VLAN0001 32769 (32768, 1) 000e.84a9.9c00 2 20 15 rstp
ค่า Bridge นี้จะมีค่าเท่ากับ Priority นี้บวกด้วยหมายเลข vlan
ใน layer 2 ค่าน้อยๆจะพึงปรารถนาเป็นอย่างมาก ใครได้ค่าน้อยๆจะได้เป็นหัวหน้าในการเลือกตั้ง root bridge แต่ในที่นี้ขอพูดถึงการแต่งตั้ง root bridge เพราะหากเราปล่อยให้มันเลือกตั้งกันเอง จะเกิดความวุ่นวายกันมากใน Layer 2 switch ที่เป็น root อาจจะกลายเป็น access switch ได้ แทนที่จะเป็น core switch
ในที่นี้ขอกล่าวถึง rapid pvst ซึ่งเป็นตัว top ที่น่าใช้ เร็ว และแยก spanning tree ออกตาม vlan อีกตัว แถมยัง backward compatible กับ 802.1d (standard spanning-tree ) และ 802.1w (rapid spanning-tree)
เราจะมาเอาให้ SW1 ที่ให้เป็น root ของทุก vlan ด้วยคำสั่งนี้คือ
Sw1(config)#
spanning mode rapid-pvstSw1(config)#
spanning-tree vlan 1-4094 priority 0ตอนนี้ก็ได้ SW1 เป็น root โดยการแต่งตั้งแล้ว แต่วันใดวันหนึ่งก็จะมีคนมาท้าทาย พยามจะมา join spanning-tree โดเมน โดยการนำเอา switch มาต่อพ่วงแล้วตั้งค่าให้ต่ำๆ เพื่อรบกวนหรือแย่งหน้าที่ root bridge ไป แต่เราไม่ยอม ไม่เพียงแต่นิ่งเฉย เราจะปิดการติดต่อด้วย ทันทีที่พบว่ามี BPDU เขามา เราจะปิดพอร์ตนี้แล้วเข้าสู่ err-disable ทันที ด้วยคำสั่ง spanning-tree bpduguard enable
มีด้วยกันสองวิธีคือ การคอนฟิกไปที่ interface และคอนฟิกแบบ Global ที่จะส่งผลทุก interface
ในระดับ interface นั้น
spanning-tree bpduguard enable
เมื่อพอรต์รับ BPDU เข้ามาจะหันหน้าหนี ปิดประตู ปิดพอร์ตทิ้งเข้าสู่ err-disable state ทันที พอร์ตจะถูกปิดโดยอัตโนมัติ วิธีการเปิดใหม่ทำได้โดย shut / no shut แต่ถ้ายังมี Switch แปลกปลอมต่ออยู่ก็จะจ่าย BPDU ออกมาอยู่ดี ทำให้เกิดปัญหาพอร์ตปิดตายถาวร
ในระดับ Global นั้น
spanning-tree portfast bpduguard default
จะทำให้พอร์ต porfast ทุกพอร์ตที่เป็น access port เข้าสู่ err-disable state ทันที พอร์ต portfast นี้มีไว้สำหรับต่อคอมพิวเตอร์ปลายทางเท่านั้น ไม่มีการต่อเข้าสวิตช์ เช่น ต่อไปที่หน้า outlet ของ user ถ้ามีคนนำ Switch ต่อกับ outlet นี้ก็เป็นการพ่วง เป็นสิ่งที่ไม่ผิดที่จะปิดพอร์ตนี้ลงเพื่อป้องกันปัญหาที่จะเกิดขึ้นในอนาคต
แต่การทำเช่นนี้มันจะรุนแรงไปหรือเปล่าสำหรับผู้ที่ไม่รู้ พอรต์จะปิดตัวลงทุกทีที่มีใครเอา Switch มาเสียบ
มีอีกวิธีที่ทำได้คือ ต่อได้นะแต่ห้ามมายุ่งกับ spanning-tree domain ของฉัน ฉันเป็นของฉันอย่างนี้ อย่ามาเปลี่ยนฉัน เพราะฉันไม่ฟังคุณ
ในระดับ interface spanning-tree bpdufilter enable
ในระดับ Globalspanning-tree portfast bpdufilter default
เมื่อรับ BPDU มามันจะไม่ทำอะไรกับ BPDU นี้ทั้งรับและส่ง แต่ปล่อยให้ frame ข้อมูลผ่านไปมาได้ ไม่เหมือนกับ bpduguard ที่ปิดทุกอย่าง
Switch(config-if)#spanning-tree bpdufilter ena
วิธีตรวจการบ้านคือshow spanning-tree int f1/0/10 det
root guardท่านี้มีไว้สำหรับจัดการปัญหาภายใน Spanning-tree domain ที่มีการแก่งแย่งกันเป็น root bridge
คำสั่งนี้จะเซ็ตไว้ในระดับ interface เพื่อป้องกันไม่ให้ state เปลี่ยนไปเป็น root port ในกรณีที่รับ BPDU ที่มีค่าดีกว่าระดับเทพ นั่นหมายความว่าพอร์ตนี้จะมี state เป็น designated port เสมอ
เมื่อมี BPDU ที่มีค่าดีกว่าถูกส่งมาถึงพอร์ตนี้ พอร์ตนี้จะป้องกันไม่ให้ BPDU นี้เขามาก่อกวน root ตัวนี้ โดยเปลี่ยนให้มีสถานะเป็น root-inconsistent state ซึ่งข้อมูลไม่สามารถส่งผ่านไปมาได้ ตราบใดที่ BPDU ที่มีค่าสูงกว่านี้ พอร์ตนี้ก็ยังไม่สามารถใช้งานได้ ต่อเมื่อ Switch ที่ปล่อยค่า BPDU สูงๆนี้ ปรับค่าลง พอร์ตก็จะสามารถกลับมาใช้งานได้ตามปกติ
ความแตกต่างของ BPDU guard กับ Guard root คือ
BPDU guard ไม่ฟังเสียงใคร รับ BPDU ได้เข้าสู่ err-disable ทำให้พอร์ตใช้งานไม่ได้เลย จนกระทั่ง shut/no shut หรือ ครบเวลาที่กำหนดไว้ตาม errdisable-timeout ก็จะปล่อยเข้าสู่ state ปกติ แต่ถ้าพบ BPDU ก็เข้าสู่ err-disable อีก
Guard root ฟังบ้าง คือ เมื่อรับ BPDU มาแล้ว แต่ถ้าค่าไม่ดีก็ไม่ทำอะไร หากค่าดีกว่าที่จะทำให้ root เปลี่ยนตัว ก็จะจัดการให้พอร์ตเข้าสู่สถานะ root-inconsistent state ซึ่งข้อมูลก็ไม่ไหลผ่านเช่นกัน แต่เมื่อ Switch ตัวนั้นหยุดส่ง BPDU ที่เหนือกว่าออกมายัง root switch ทุกอย่างเป็นอันจบกัน พอร์ตจะใช้งานได้ตามปกติ