Author Topic: ปัญหาจาก Rogue Switch บทความดี ๆ จากคุณ At lease 8 Member SNK  (Read 10201 times)

0 Members และ 2 บุคคลทั่วไป กำลังดูหัวข้อนี้

zenze

  • Head Master
  • Layer 3
  • *
  • Posts: 173
  • จิตพิสัย +0/-0
ปัญหาจาก 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-pvst
Sw1(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

ในระดับ Global

spanning-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 ทุกอย่างเป็นอันจบกัน พอร์ตจะใช้งานได้ตามปกติ

 [onion79]