หลักการทำงาน HSRP (Hot-Standby Routing Protocol)

ปัญหาหนึ่งที่เกิดขึ้นในองค์กร นั่นคือเมื่อต้องการออกแบบระบบให้ Redunance Router จำเป็นที่จะต้องมี Router อย่างน้อยสองตัว และสิ่งที่เกิดขึ้นคือ ที่ Interface ของ Router แต่ละตัวจะต้องมี IP Address เป็นของตัวเอง จึงทำให้ IP Gateway ที่มีในระบบมีสอง IP Address และในช่วงเวลาหนึ่งๆ Client สามารถใช้งาน Gateway ได้เพียง IP เดียวเท่านั้น แสดงดังรูป

สมมุติว่า วันหนึ่ง R1 ตาย (เช่น Link Down หรือ Router เสีย) เราจะต้องทำการเปลี่ยน IP Gateway ของ เครื่อง Client ทุกเครื่อง ที่เคยชี้ไปที่ R1 ให้เปลี่ยนไปใช้บริการผ่านทาง R2 แทน ซึ่ง อาจจะไม่ใช่เรื่องง่าย เนื่องจาก IT อาจจะทราบปัญหาช้า ต้องมีคนมาแจ้งว่าระบบใช้งานไม่ได้ และจากนั่น IT จึงทำการเปลี่ยน IP ของ Gateway ของเครื่อง Client ทั่งหมด เป็น IP Address ของ R2 ซึ่งอาจจะไม่เหมาะระบบที่ต้องการความเสถียรสูง จึงเป็นที่มาของ Protocol กลุ่ม FHRP ประกอบไปด้วย HSRP ,VRRP และ GLBP แต่ในบทความนี้เราจะมาทำความรู้จักกับ HSRP เท่านั้น

HSRP หรือ Hot-Standby Routing Protocol เป็นโปรโตคอลที่ถูกพัฒนาโดย Cisco (Cisco Proprietary) ใช้สำหรับการทำ Redundancy gateway โดยคอนเซปของ HSRP คือ ใช้ Router หลายๆ ตัวทำ Redundance กัน แต่ให้ Client มองเป็น 1 Gateway เท่านั้น โดยใช้ Virtual Gateway และให้ Client ชี้ IP Gateway มาที่ IP ของ Virtual Gateway ,ในช่วงเวลาหนึ่งๆ จะมี Router 1 ตัว ที่ Active เป็น Primary ในหน้าที่ในการ Forward Traffig และเมื่อ Router ตัวนี้ตาย Router ตัวถัดไปในระบบ จะเปลี่ยนสถานะเป็น Active และทำหน้าที่ Forward Traffig แทน Router ตัวที่ตายไป (เรียงตามค่า Priority โดย Default จะมีค่าเท่ากับ 100) , นี่คือหลักการทำงานของ HSRP ที่ให้บริการ Redundancy Gateway. ในบทความนี้ เราจะมาเรียนรู้วิธีการคอนฟิก HSRP บน Cisco IOS Router กันครับ

การคอนฟิก HSRP บน Cisco IOS Router

ในตัวอย่างนี้ เราจะใช้ Router 2 ตัว เป็น Member ของ HSRP Group. โดยจะคอนฟิก Router แต่ละตัว ให้มี Physical IP Address เป็นของตัวเอง และ Router เหล่านี้ต้องอยู๋ในกลุ่มเดียวกัน และมี Virtual IP เป็นเบอร์เดียวกัน. Virtual IP นี้ จะถูกใช้เป็น Default gateway ของ Client ซึ่งเมื่อเกิด Link Down หรือ Router เสีย Client จะไม่รู้สึกถึงความเสียหายที่เกิดขึ้นในระบบได้เลย เพราะ HSRP จะ เปลี่ยน Gateway ของตัวที่ Standby ขึ้นมาทำงานแทน โดยอัตโนมัติ

เอาล่ะ เรามาเริ่มคอนฟิก โดยเริ่มจาก Interface gi0/1 บน R1

R1(config)#track 10 interface gigabitEthernet 0/0 line-protocol 

คอนฟิก Object ที่ใช้ในการ Track Line Protocol ที่ไปยัง ISP เช่น เมื่อ Link ที่ ISP down จะทำการลดค่า Priority ของ HSRP เพื่อให้ Router อีกตัวขึ้นมาทำงานแทน

R1(config)#interface GigabitEthernet0/1
R1(config-if)#ip address 192.168.10.2 255.255.255.0
R1(config-if)#standby 10 ip 192.168.10.1
R1(config-if)#standby 10 preempt
R1(config-if)#standby track 10 decrement 30
R1(config-if)#no shutdown
R1(config-if)#end

คำสั่ง Standby 10 IP 192.168.10.1 หมายถึงการที่เรา Add R1 เข้าไปใน HSRP Group 10 โดย มี Virtual Gatewat เป็น 192.168.10.1 ,คำสั่งที่ 2 คือ Preempt และคำสั่งที่ 3 Track ขอค้างไว้ก่อน จะไปอธิบายตอนยกตัวอย่างตอนทดสอบจะเห็นภาพมากกว่าครับ
ต่อมาเริ่มการคอนฟิก R2 โดย Add R2 เข้า HSRP กลุ่มเดียวกันกับ R1 และใช้ Virtual IP เดียวกัน ตามคำสั่งด้านล่าง ที่ Interface Gi0/1

R2(config)#track 10 interface gigabitEthernet 0/0 line-protocol 
R2(config)#interface GigabitEthernet0/1
R2(config-if)#ip address 192.168.10.3 255.255.255.0
R2(config-if)#standby 10 ip 192.168.10.1
R2(config-if)#standby 10 priority 80
R2(config-if)#standby 10 preempt
R2(config-if)#standby track 10 decrement 30
R2(config-if)#no shutdown
R2(config-if)#end

คอนฟิกที่แตกต่างบน R2 นั่นคือ คำสั่ง Priority 80 หมายถึง R2 จะมีความสำคัญน้อยกว่า R1 (โดย Default ค่า Priority คือ 100 ). ผลลัพธ์จากการคอนฟิกดังกล่าวจะทำให้ R2 ทำหน้าที่เป็น Standby Gateway เพราะว่ามีค่า Priority ที่น้อยกว่า และ R1 จะทำหน้าที่เป็น Active Gateway รับหน้าที่ในการ Forward Traffig เนื่องจากมีค่า Priority ที่สูงกว่า HSRP จะทำงานเมื่อ R1 ไม่สามารถให้บริการได้(unreachable), R2 จะได้รับ การแจ้งเตือน และจะแปลงร่างตัวเองกลายเป็น Active gateway และ forward traffig แทน R1

ตรวจสอบการทำงานของ HSRP

คำสั่งที่ใช้ในการตรวจสอบ configuration ของ HSRP นั่นคือ show stand by brief แสดงตัวอย่างด้านล่าง

บน R1
R1#show standby  brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   100 P Active  local           192.168.10.3    192.168.10.1
บน R2
R2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   80    Standby 192.168.10.2    local           192.168.10.1

จากผลลัพธ์ของ R1 ด้านบน จะเห็นว่า R1 อยู่ในสถานะ Active โดย Active Local คือ ตัวมันเอง กำลังทำหน้าที่เป็น Active Router ในการ Forward Packet และ Standby คือ 192.168.10.3 (R2 Physical Interface) คือหาก R1 ตาย, R2 จะเข้ามาทำหน้าที่แทน และจากการแสดงผลบน R2 จะเห็นว่าอยู่ในสถานะ Standby และ Standby IP คือ IP ของตัวมันเอง ในขณะที่ Active IP คือ 192.168.10.2 (R1 Phtsical Interface). เราจึงสามารถสรุปได้ว่าในขณะนี้ R1 ทำหน้าที่เป็น Active Gateway อยู่นั่นเอง

ทดสอบโดย Trace route ไปที่ 8.8.8.8 โดยผ่านเครื่อง PC Client แสดงตัวอย่างตามด้านล่าง

PC-A> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.10.2   20.088 ms  15.034 ms  16.750 ms
 2   *8.8.8.8   13.609 ms 
PC-B> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.10.2   14.860 ms  19.503 ms  12.793 ms
 2   *8.8.8.8   21.821 ms 

จากการ Traceroute จะเห็นผลลัพธ์ที่เกิดขึ้นนั่นคือ PC-A และ PC-B สามารถไปถึง IP ของผู้ให้บริการ Cloud ได้ และจะเห็นว่า First hop IP Address ที่ได้จากการ Traceroute นั่นคือ 192.168.10.1 (R1 Physical interface) หมายความว่า Traffig ถูกส่งออกไปผ่านทาง R1

ทดสอบ HSRP Failover

สั่ง Shutdown interface Gi0/1 บน R1 และตรวจสอบการทำงานของ HSRP ของ R1 และ R2

R1(config)#interface gigabitEthernet 0/1
R1(config-if)#shutdown
ตรวจสอบการทำงานบน R1
R1#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   100 P Init    unknown         unknown         192.168.10.1

เราจะเห็นได้ว่า R1 อยู๋ในสถานะ Unkown เนื่องจาก Link down

ตรวจสอบการทำงานบน R2
R2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   80    Active  local           unknown         192.168.10.1

จะเห็นว่าสถานะบน R2 ตอนนี้ อยู่ในสถานะ Active นั่นหมายความว่า R2 ทำหน้าที่เป็น Active gateway เมื่อ R1 ไม่สามารถให้บริการได้ เช่น Link down ,R2 จะทำหน้าที่ Forward traffig แทน R1 และจะเห็นว่า Standby IP ของ R2 อยู่ในสถานะ Unknown เนื่องจาก R1 shutdown อยู่

ตรวจสอบด้วยการ Traceroute
PC-A> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.10.3   17.992 ms  14.165 ms  13.008 ms
 2   *8.8.8.8   29.355 ms
PC-B> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.10.3   19.542 ms  14.414 ms  16.686 ms
 2   *8.8.8.8   21.260 ms 

จะเห็นว่า PC Client ยังสามารถเข้าถึง Cloud ได้ แต่ IP ของ First Hop ตอนนี้คือ 192.168.10.3 นั่นคือ IP ของ R2 นั่นเอง หมายความว่า ตอนนี้ Packet ถูกส่งออกผ่านทาง R2 จะเห็นว่า HSRP สามารถทำงานได้อย่างถูกต้อง

ทดสอบ HSRP Preemption

ในตอนนี้ ผมจะอธิบายเรื่องที่ค้างไว้ในหัวข้อก่อนหน้านั่นคือคำสั่ง Preempt บน R1
คำถามคือ เมื่อ R1 กลับมาทำงานปกติ เราจะทำยังไงให้ R1 เป็น Active Router เพราะ R2 ก็ยังสามาถให้บริการได้อยู่(Link ไม่ Down) HSRP ก็จะตรวจสอบไม่เจอ และ HSRP ก็จะให้ R2 Active ต่อไป วิธีแก้คือ การใช้ HSRP Preempt โดยเมื่อ R1 และ R2 ทำงานได้ปกติ HSRP จะตรวจสอบค่า Priority และในกรณีนี้ R1 (Priority = 100) มีค่าที่สูงกว่า R2 Priority (Priority = 80) HSRP จะเตะ R2 ไปเป็น Standby gateway และเอา R1 กลับมาเป็น Active Gateway

ทดสอบโดยการเอา Link บน R1 กลับมา
R1(config)#interface gigabitEthernet 0/1

R1(config-if)#no shutdown 
ตรวจสอบการทำงานบน R1
R1#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   100 P Active  local           192.168.10.3    192.168.10.1
ตรวจสอบการทำงานบน R2
R2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   80    Standby 192.168.10.2    local           192.168.10.1
ตรวจสอบผลลัพธ์ บน PC
PC-A> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.10.2   23.994 ms  17.786 ms  18.662 ms
 2   *192.168.10.2   16.934 ms
PC-B> trace 8.8.8.8
trace to 8.8.8.8, 8 hops max, press Ctrl+C to stop
 1   192.168.10.2   13.688 ms  11.367 ms  14.624 ms
 2   *192.168.10.2   13.645 ms

จะเห็นได้ว่า ผลลัพธ์จากการ Traceroute Traffig จาก PC-A และ PC-B ถูกส่งออกผ่านทาง R1 แสดงว่า คำสั่ง Preempt ทำงานได้ปกติ

ทดสอบเมื่อ Link ที่ไปยัง ISP-A ไม่สามารถให้บริการได้

การที่จะทำให้ HSRP ทราบได้ว่า ขณะนี้ Link ที่ไปยัง ISP-A ไม่สามารถใช้บิรการได้ นั่นคือ การใช้คำสั่ง standby track 10 decrement 30 เมื่อ Router พบว่า Gi0/0 อยู่ในสถานะ Link down จะทำการลดค่า Priority ของ HSRP ลง 30 จากตัวอย่าง จะพบว่า เมื่อ Link ที่ ISP-A Down จะทำให้ค่า Priority ของ HSRP บน R1 ลดลงเหลือ 70 ซึ่งมีค่าน้อยกว่า R2 จึงทำให้ R2 ขึ้นมาเป็น Active Router แทน

ทดสอบโดยการ Shutdown Gi0/0 บน R1

R1(config)#interface gigabitEthernet 0/0

R1(config-if)#shutdown 
ตรวจสอบค่าบน R1 โดยใช้คำสั่ง show standby เพื่อดูรายละเอียดของ HSRP
R1#show standby 
GigabitEthernet0/1 - Group 10
  State is Standby
    9 state changes, last state change 00:00:25
  Virtual IP address is 192.168.10.1
  Active virtual MAC address is 0000.0c07.ac0a
    Local virtual MAC address is 0000.0c07.ac0a (v1 default)
  Hello time 3 sec, hold time 10 sec
    Next hello sent in 1.824 secs
  Preemption enabled
  Active router is 192.168.10.3, priority 80 (expires in 11.600 sec)
  Standby router is local
  Priority 70 (default 100)
    Track object 10 state Down decrement 30
  Group name is "hsrp-Gi0/1-10" (default)

จากคำสั่ง show standby จะเห็นว่าตอนนี้ Active Router คือ R2 และค่า Priority ของ R1 ถูกลดลงไปเหลือ 70 เนื่องจาก Interface Gi0/0 down

ตรวจสอบค่าบน R2 โดยใช้คำสั่ง show standby brief เพื่อดูรายละเอียดของ HSRP
R2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   80  P Active  local           192.168.10.2    192.168.10.1
จากคำสั่ง show standby brief จะเห็นว่าตอนนี้ R2 เป็น Active Router ทำหน้าที่ในการ Forward Packet แทน R1
ทดสอบ No shutdown Interface Gi0/0 R1
R1(config)#interface gigabitEthernet 0/0
R1(config-if)#no shutdown 
R1#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   100 P Active  local           192.168.10.3    192.168.10.1
R2#show standby brief 
                     P indicates configured to preempt.
                     |
Interface   Grp  Pri P State   Active          Standby         Virtual IP
Gi0/1       10   80  P Standby 192.168.10.2    local           192.168.10.1

จะเห็นว่าหลังจากสั่ง no shutdown R1 จะกลับมามีค่า Priority เท่ากับ 100 และ กลับมาทำหน้าที่เป็น Active Router

สรุป

ทั้งหมดนี้ คือวิธีการคอนฟิกและหลักการทำงานของ HSRP Protocol บน Cisco IOS Router ด้วยการทำงานของ HSRP ทำให้เรามั่นใจได้ว่าเรามี Link สำรองที่จะใช้ไปยังผู้ให้บริการได้ถึงสองเส้น โดยหาก Link ใด Link หนึ่ง ไม่สามารถให้บริการได้ เครื่อง Client ของเราก็ยังสามารถออกไปใช้งานระบบเครือข่ายได้ปกติ โดยการทำงานของ HSRP ซึ่งการคอนฟิกดังกล่าว ไม่ต้องทำการเปลี่ยน IP ของ Gateway Router ที่เครื่อง Client เลยเนื่องจากระบบ ทำการชี้มาที่ Virtual Gateway IP โดยใช้ HSRP ในการสลับสับเปลี่ยน Router มา Forward Packet จึงทำให้ระบบของเราสามารถให้บริการได้อย่างต่อเนื่อง