Configuring Load Sharing with Policy-Based Routing in Cisco IOS Router
เพื่อน ๆ ครับ ในวันนี้ผมจะมาแนะนำวิธีในการตั้งค่า Load Sharing บนอุปกรณ์ Layer 3 ของ Cisco กันนะครับ การทำ Load Sharing ก็คือ การที่เราทำการกำหนดให้ทราฟิกชนิดต่าง ๆ ใช้งานบนเส้นทางที่แตกต่างกัน เช่น ผมกำหนดให้ทราฟิกเปิดหน้าเวปบนอินเทอร์เน็ตทั้วไป ที่ใช้ TCP port 80 และ 443 ให้ใช้งานเส้นทางนึง ส่วนทราฟิกอื่น ๆ ก็ให้ใช้งานในอีกเส้นทางนึง เพื่อไม่ให้มีการใช้งาน Bandwidth ของแต่ละเส้นทางมากจนเกินไป จนทำให้การใช้งานช้าลง เหมาะสำหรับในองค์กรที่มีการใช้งาน ISP ที่มากกว่า 1 เจ้า หรือองค์กรที่กำลังประสบปัญหาเกี่ยวกับความเร็วในการใช้งานอินเทอร์เน็ต เป็นอย่างยิ่งครับ
โดยทั่วไปแล้วการหาเส้นทางในการส่งข้อมูลของอุปกรณ์ Layer 3 นั้น จะใช้ปลายทางของทราฟิกนั้น เป็นตัวตัดสินใจในการเลือกเส้นทางว่าจะส่งไปในเส้นทางใด เช่น ต้องการส่งข้อมูลไปยัง Server ที่อยู่ต่างประเทศ เมื่อทราฟิกนั้นเดินทางมาถึงเราเตอร์ เราเตอร์ก็จะดูว่าปลายทางของทราฟิกนั้น สามารถส่งไปยังเส้นทางใดบนตัวมันได้บ้าง จากนั้นมันจึงจะทำการส่งทราฟิกไปยังเส้นทางที่ดีที่สุด เพื่อไปยังปลายทางที่ต้องการ แต่ด้วยการใช้งาน Policy-Based Routing (PBR) เราจะสามารถใช้ต้นทาง (source) หรือชนิดของทราฟิก ในการเลือกเส้นทางที่จะใช้ในการส่งข้อมูลได้ เช่น เราสามารถเลือกได้ว่าให้ทราฟิกที่มีต้นทางเป็น 192.168.1.10 ถึง 192.168.1.20 ให้ไปใช้งานเส้นทางนึง ส่วนทราฟิกชนิดอื่น ๆ ก็ให้ใช้งานอีกเส้นทางนึงได้
สำหรับอุปกรณ์ Layer 3 ที่จะนำมาเป็นตัวอย่างในวันนี้ ผมจะใช้ Cisco IOS Router นะครับ แต่ถ้าเพื่อน ๆ มีการใช้งาน Switch Layer 3 ก็สามารถที่จะใช้คุณสมบัตินี้ได้เช่นกันครับ การใช้งาน Policy-Based Routing นี้ สามารถใช้งานได้ตั้งแต่ Cisco IOS Release 11.0 เป็นต้นมา สำหรับขั้นตอนในการตั้งค่า ก็มีดังนี้ครับ
- ทำการกำหนดรายละเอียดของเราเตอร์เบื้องต้น เช่น อินเทอร์เฟสที่จะใช้งาน, ip address บนแต่ละอินเทอร์เฟส รวมไปถึงการตั้งค่า Routing แบบปกติ เช่น default route
- ทำการสร้าง access-list เพื่อที่จะใช้ในการเลือกทราฟิกที่ต้องการแบ่งไปใช้งานบนอินเทอร์เฟสอื่น ๆ
- ทำการสร้าง policy route-map ขึ้นมา เพื่อใช้ในการกำหนดเส้นทางของทราฟิกที่เราเลือกมา
- นำ policy route-map ที่ทำการสร้างขึ้นมาไปใช้งานบนอินเทอร์เฟสฝั่งภายใน หรือฝั่งต้นทางของทราฟิก
เอาล่ะครับเรามาดูตัวอย่างการตั้งค่ากันเลยดีกว่านะครับ ในตัวอย่างวันนี้ผมมีเราเตอร์ 1 ตัวโดยมีการเชื่อมต่อไปยังเราเตอร์ของ ISP 2 เจ้า โดยมีรายละเอียด ดังรูปด้านล่างเลยครับ โดยในการทำ Load Sharing นั้น ผมเลือกที่จะให้ทำการส่งทราฟิก http และ https ซึ่งเป็นทราฟิกที่ใช้งาน bandwidth เป็นจำนวนมาก ไปยัง ISP-02 ส่วนทราฟิกอื่น ๆ ก็ให้ใช้งานที่ ISP-01 ครับ
ในขั้นแรกเราก็จะทำการตั้งค่าพื้นฐานของเราเตอร์ของเรากันก่อนครับ ซึ่งก็คือการตั้งค่าอินเทอร์เฟสต่าง ๆ ที่เราจะใช้ในการเชื่อมต่อครับ รวมไปถึงการตั้งค่า default route เพื่อที่จะให้ทำการส่งทราฟิกทั้งหมด ไปที่ ISP-01 ก่อนครับ (และเราจะมาทำ PBR เพื่อส่งทราฟิก http และ https ไปยัง ISP-02 กันทีหลังครับ)
ตัวอย่าง
Router(config)#interface FastEthernet0/0
Router(config-if)#description # inside #
Router(config-if)#ip address 192.168.1.10 255.255.255.0
Router(config-if)#exit
Router(config)#interface FastEthernet1/0
Router(config-if)#description # To ISP-01 #
Router(config-if)#ip address 183.89.160.24 255.255.255.240
Router(config-if)#exit
Router(config)#interface FastEthernet2/0
Router(config-if)#description # To ISP-02 #
Router(config-if)#ip address 57.200.31.2 255.255.255.252
Router(config-if)#exit
Router(config)#ip route 0.0.0.0 0.0.0.0 183.89.160.23
เมื่อทำการตั้งค่าตามตัวอย่างด้านบนเรียบร้อยแล้ว ทราฟิกทั้งหมดจะไปใช้งานที่ ISP-01 ครับ จากนั้นเราจะมาทำการสร้าง access-list เพื่อที่จะใช้ในการคัดเลือกทราฟิกที่เราต้องการที่จะส่งไปยัง ISP-02 กันครับ
ตัวอย่าง
Router(config)#access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq www
Router(config)#access-list 100 permit tcp 192.168.1.0 0.0.0.255 any eq 443
จากตัวอย่างด้านบน เป็นการใช้ extened access-list ในการคัดเลือกทราฟิกที่มีต้นทางจาก subnet 192.168.1.0/24 ที่ต้องการใช้งาน http (tcp port 80) และ https (tcp port 443) ครับ ซึ่งในส่วนนี้เพื่อน ๆ สามารถทำการตั้งค่าในรูปแบบอื่น ๆ ตามความต้องการได้เลยครับ เช่น อาจจะใช้ access-list ในการเลือก ip address ของกลุ่ม VIP เพื่อให้กลุ่ม VIP นี้ไปใช้งานในอีก ISP นึง ส่วน user ทั่วไปก็ใช้งานอีก ISP นึง เป็นต้นครับ
เมื่อทำการตั้งค่า access-list เสร็จเรียบร้อยแล้ว เราก็จะมาทำการตั้งค่า policy route-map เพื่อที่จะใช้ในการเลือกเส้นทางสำหรับทราฟิกที่เราเลือกมากันครับ ซึ่งในการสร้าง policy นี้ก็จะเป็นการค้นหาเส้นทาง โดยเลือกจากต้นทางของข้อมูลครับ ต่างจากการใช้ routing table แบบทั่วไปที่ใช้การค้นหาเส้นทางจากปลายทางของข้อมูลครับ
ตัวอย่าง
Router(config)#route-map running-config permit 10
Router(config-route-map)#match ip address 100
Router(config-route-map)#set ip next-hop 57.200.31.1
Router(config-route-map)#exit
จากตัวอย่างด้านบน เป็นการตั้งค่าให้ใช้งาน policy โดยเมื่อมีทราฟิกที่ตรงกับ access-list 100 เข้ามา จะกำหนดให้ทำการส่งทราฟิกนั้น ไปยัง next-hop ที่มี ip address เท่ากับ 57.200.31.1 ครับ ซึ่งในส่วนนี้ก็สามารถที่จะตั้งค่าในรูปแบบอื่น ๆ ได้ เช่น เลือกให้ส่งไปในอินเทอร์เฟสที่ต้องการ โดยการใช้คำสั่ง “set interface <interface>” เช่น set interface FastEthernet2/0 ครับ
ขั้นตอนต่อมา จะเป็นการนำ policy route-map ที่เราสร้างขึ้นมาไปใช้งานบนอินเทอร์เฟส โดยเราจะต้องนำไปใช้งานบนอินเทอร์เฟสต้นทางของทราฟิกหรืออินเทอร์เฟสฝั่งภายในเครือข่ายของเรานะครับ
ตัวอย่าง
Router(config)#interface FastEthernet0/0
Router(config-if)#ip policy route-map running-config
Router(config-if)#exit
เอาล่ะครับ เพียงเท่านี้ทราฟิกจากเครือข่ายภายในของเราที่ต้องการใช้งาน http และ https ก็จะไปใช้งาน ISP-02 ส่วนทราฟิกชนิดอื่น ๆ ก็จะใช้งาน ISP-01 เช่นเดิมครับ เป็นวิธีนึงที่จะช่วยในการแก้ปัญหาที่เกี่ยวกับความเร็วในการใช้งานอินเทอร์เน็ตได้ครับ
สำหรับการตรวจสอบการทำงานของ Policy-Based Routing นั้น เพื่อน ๆ สามารถใช้คำสั่ง show route-map บน privilege mode ได้ครับ
ตัวอย่าง
Router(config)#do show route-map
route-map running-config, permit, sequence 10
Match clauses:
ip address (access-lists): 100
Set clauses:
ip next-hop 57.200.31.1
Policy routing matches: 103 packets, 6222 bytes
สำหรับการใช้งาน Policy-Based Routing นั้น ยังสามารถนำไปประยุกต์ใช้งานได้อีกหลากหลาย แต่ที่แนะนำให้เพื่อน ๆ ได้รู้จักในวันนี้นั้น เป็นเพียงการตั้งค่าแบบพื้นฐานเท่านั้นครับ ไว้ในโอกาสหน้าผมจะมาแนะนำวิธีการตั้งค่า Policy-Based Routing ในรูปแบบอื่น ๆ กันอีกครับ
อ่านแล้วเข้าใจได้ง่ายมากๆเลยครับ ขอบคุณบทความดีๆแบบนี้ครับ
ReplyDelete