เรื่องของ Interface Null 0 และ Longest Match ในการ forwarding ของ Router
บทความนี้มาจากการตอบคำถามใน CCNA Hunter Group จึงขอนำมาแปะไว้ เผื่อเป็นประโยชน์กับบางท่านที่สนใจ Interface null 0 นะครับ โดยหากมีเวลา จะมาปรับปรุง พร้อมภาพปลากรอบ ^^

กรณีศึกษาที่ 1 การนำ interface null 0 มาใช้กับการทำ route summarization

หลักการของ null 0 อาจจะนำใช้ร่วมกับการทำ Route Summarization บน Dynamic Routing Protocol อย่างเช่น OSPF กับ EIGRP 
หรืออาจจะไปเกี่ยวข้องกับ BGP ที่ใช้ command "network" สร้าง route ขึ้นมาแบบลอยๆ

บางท่านอาจจะเคยทำ Route Summarization บน Dynamic Routing Protocol อย่างเช่น OSPF และ EIGRP หลังจากท่านทำเสร็จแล้ว ท่านก็จะพบว่า Route ที่เป็น Summarization นั้นชี้ไปที่ Interface Null 0 เองอย่างอัตโนมัติ แน่นอนว่าท่านคงจะสงสัยว่ามันมันคืืออะไร?

ผมขอยกตัวอย่างแบบง่ายๆ นะครับ แบบขอข้ามรายละเอียดปลีกย่อยบางอย่างไป เพราะมันจะทำให้ต้องเขียนเป็นหนังสือหนึ่งเล่มใหญ่ๆ เลยก็ว่าได้ ^^

ip route 10.1.1.0 255.255.255.0 interface s0
ip route 10.2.2.0 255.255.255.0 interface s1
ip route 10.0.0.0 255.0.0.0 null 0

โดย 10.0.0.0/8 เป็น Major Network (Class A) ที่ไม่มีจริงในระบบ แต่เกิดมาจาก network admin ต้องการประกาศ route 10.0.0.0/8 ซึ่งเป็น route summarization เพียง route เดียว แทนการประกาศเป็น subnet หรือ route ย่อยๆ 10.1.1.0/24 และ 10.2.2.0/24 เพื่อเป็นการประหยัด memory ของ router ตัวอื่นๆ

สำหรับบน router ตัวที่ configure 10.0.0.0/8 null 0 นี้แล้ว

ถ้ามี IP packet เข้ามาแล้ว router จะอ่าน destination IP address แล้วทำ routing lookup ไปที่ routing table เพื่อหาว่ามี route ใดบ้างใน table ที่ match กับ destination IP address นี้ โดย router จะใช้ หลักการเปรียบเที่ยบ destination IP address กับ route ใน table แบบ longest match คือ ดูว่า bit ใน destination IP address match กับ route ใดใน routing table มากที่สุด โดยเทียบกันแบบ bit ต่อ bit เลย เช่น

- ถ้า destination IP address คือ 10.1.1.1 แล้ว จะ match กับ route 10.1.1.0/24 และ packet จะถูก forward ออกทาง s0
- ถ้า destination IP address คือ 10.2.2.2 แล้ว จะ match กับ route 10.2.2.0/24 และ packet จะถูก forward ออกทาง s1

- ถ้า destination IP address เป็น 10.x.x.x ที่นอกเหนือจาก 10.1.1.0/24 และ 10.2.2.0/24 แล้ว จะมาตกอยู่ที่ 10.0.0.0/8 ซึ่งเป็น route ที่ไม่มีใช้งานจริงอยู่ในระบบ (เป็น route ที่ network admin สร้างขึ้นมาลอยๆ บน router ตัวนี้) และ route นี้ได้ถูก configure ให้ชี้ไปยัง null 0 คือให้ drop นั่นหมายความว่า IP packet ใดๆ ที่มี destination ที่นอกเหนือไปจาก 10.1.1.0/24 และ 10.2.2.0/24 แล้ว มันก็จะมาตกอยู่ที่ 10.0.0.0/8 แล้วจะถูก drop ทิ้งไป ที่ interface null 0

เหตุใด route ที่เป็น summarization จะต้องชี้ลง null 0 ?

ตอบ ลองคิดดูว่า ถ้าในความจริง 10.0.0.0/8 ไม่มีจริงในระบบอยู่แต่แรกแล้ว และถ้าเราไม่ได้ configure มันเข้าไปใน routing table (ip route 10.0.0.0 255.0.0.0 null 0) แล้ว พฤติกรรมโดย default ของ router คือ ถ้า destination IP address ไม่ match กับ 10.1.1.0/24 และ 10.2.2.0/24 แล้ว router ก็จะต้อง drop IP packet นั้นๆ ทิ้งไปอยู่แล้ว และการที่เราสร้าง static route 10.0.0.0/8 ขึ้นมา หากเราชี้ interface แบบมั่วๆ หรือชี้โบ๊ ชีเบ๊ แล้วล่ะก็ IP packet นั้นๆ ก็อาจจะ loop กลับมาหาเราทำให้เกิดเหตุการณ์ที่เรียกว่า routing loop ได้ ดังนั้นไหนๆ ก่อนจะมี 10.0.0.0/8 มันก็ drop อยู่แล้ว จะเป็นไรไปถ้าเราสั่ง drop IP packet นั้นๆ ด้วยตัวเราเอง หาก destination IP address ของมันมาตกอยู่ที่ 10.0.0.0/8 โดยการชี้ไปที่ interface null 0 แทน

กรณีศึกษาที่ 2 การนำ interface null 0 มาใช้แก้ปัญหา routing loop

อธิบายเพิ่มเติมสำหรับการนำ interface null 0 มาใช้ในการป้องกันปัญหา routing loop ครับ โดย ภาพ slide ที่ผมนำเสนอนี้ ผมได้นำมาจาก link นี้ครับ:

//pt.slideshare.net/alHandy/cis82-discard-route


Step 1: ข้อให้ท่านพิจารณา IP และ Network Diagram ดังรูปที่ 1 โดยเน้นที่ข้อมูลเหล่านี้ครับ:
- route 172.16.3.0/24 และ 172.16.4.0/24
- Default route ที่ Router A ชี้ไปยัง ISP
- Static route 172.16.0.0/16 ที่ ISP ชี้มายัง Router A

ภาพที่ 1 แสดง IP and Network Diagram



Step 2: จากรูปที่ 2 ข้างล่าง ซึ่งเป็นการแสดง routing table ของ Router A นั้น เราจะเห็นว่า Router A ได้รับ route 172.16.3.0/24 และ 172.16.4.0/24 มาจาก Router B (172.16.2.1) ผ่านทาง routing protocol RIP ดังนั้นในตอนนี้ หาก Router A จะต้อง forward IP packet ที่มี destination 172.16.3.x กับ destination 172.16.4.x แล้ว มันก็จะ forward ไปยัง Router B ที่ 172.16.2.1

ภาพที่ 2 แสดง Routing Table ของ Router A ในสภาวะปกติ



Step 3: Link ระหว่าง Router B กับ Router C ได้ failure ลงไปตามรูปที่ 3

ภาพที่ 3 แสดง Link ระหว่าง Router B กับ Router C ได้ failure ลงไป





Step 4: อ้างอิงข้อมูลจากภาพที่ 4 เนื่องจาก Link ระหว่าง Router B กับ Router C ได้ failure ลงไป ส่งผลให้ Router A ไม่สามารถมองเห็น route 172.16.3.0/24 และ 172.16.4.0/24 ผ่านทาง Dynamic routing protocol RIP ที่จะต้องถูก update มาจาก Router B ได้

และเนื่องด้วย Router A มี Static Default route ชี้ไปยัง ISP ดังนั้น เมื่อมี IP packet ที่มี destination 172.16.3.x กับ destination 172.16.4.x เข้ามาแล้ว IP packet เหล่านี้ก็จะไปตกอยู่ที่ default route 0.0.0.0/0 แล้วถูก forward ออกไปหา ISP และเนื่องด้วย ISP เองก็มี static route 172.16.0.0/16 ชี้กลับมาที่ Router A ดังนั้น ISP ก็จะ forward IP packet ดังกล่าวย้อนกลับมาหา Router A อีกครั้ง จากนั้น Router A ก็ forward IP packet ดังกล่าวกลับไปหา ISP อีกครั้งด้วย default route ซึ่งจะวนเวียนเป็นเช่นนี้ไปตลอด ตราบเท่าที่ link ระหว่าง Router B กับ Router C ยัง down อยู่ ซึ่งจะส่งผลให้เกิด routing loop ในช่วงนี้

ภาพที่ 4 แสดง Routing Table ของ Router A ไม่เห็น route 172.16.3.0/24 และ 172.16.4.0/24 แล้ว อันเป็นผลมาจาก link ระหว่าง Router B กับ Router C ได้ failure ลงไป




Step 5: อ้างอิงข้อมูลจากภาพที่ 5 หากเราไม่ต้องการให้เกิดเหตุการณ์ routing loop เช่นนี้แล้ว เราก็ควรจะดัก IP packet ที่มี destination 172.16.3.x และ 172.16.4.x เหล่านี้เอาไว้ก่อน ด้วยการ configure static route 172.16.0.0/16 ชี้ไปที่ null 0 ด้วย command "ip route 172.16.0.0 255.255.0.0 null 0" บน Router A 
เพื่อที่ว่า Router A จะได้ทำ routing lookup ด้วยการใช้หลักการของ longest match กับ IP packet ที่มี destination 172.16.3.x กับ 172.16.4.x และหลังจากที่ Router A ได้ทำการเปรียบเทียบ destination IP address ตามหลักการ longest match แล้ว Router A จะพบว่า IP packet ที่มี destination 172.16.3.x กับ 172.16.4.x จะไปตกอยู่ที่ route 172.16.0.0/16 ที่เพิ่งได้ configure เข้าไป แทนที่จะไปตกที่ default route เหมือนในตอนแรก

และเนื่องด้วย route 172.16.0.0/16 ได้ชี้ไปที่ interface null 0 ดังนั้น IP packet ที่มี destination 172.16.3.x กับ 172.16.4.x จะถูก drop ทั้งหมดที่ route 172.16.0.0/16 นี้ 
ซึ่งการทำเช่นนี้จะเป็นการป้องกันปัญหา routing loop ได้

ภาพที่ 5 แสดงการเพิ่ม static route 172.16.0.0/16 ชี้ไปยัง interface null 0



Step ุ6: อ้างอิงข้อมูลจากภาพที่ 6หลังจากที่ link ระหว่าง Router B กับ Router C ได้ up กลับมาเป็นปกติแล้ว Router A ก็จะได้รับ route 172.16.3.0/24 และ 172.16.4.0/24 จาก Router B (172.16.2.1) ผ่านทาง routing protocol RIP ดังเดิม ดังนั้น ในตอนนี้แล้ว เมื่อ Router A ได้รับ IP packet ที่มี destination 172.16.3.x กับ 172.16.4.x เข้ามาแล้ว มันก็จะพบว่า มันจะต้อง forward packet ไปยัง Router B ตามหลักการ longest match เช่นเดิมตามปกติที่เคยเป็น

ภาพที่ 6 แสดง Routing Table ของ Router A หลังจากที่ Link ระหว่าง Router B กับ Router C มีสถานะ up เหมือนเดิม


สำหรับเรื่อง routing เบื้องต้นนั้น ใครสนใจลองไปดู VDO ที่ผมสอนเอาไว้ได้ตาม link นี้นะครับ


หลักการคิดง่ายๆ สำหรับ technology คือ อย่าคิดแบบคน ให้คิดแบบอุปกรณ์ ถ้าเราเป็นมันแล้ว เราจะมีวิธีคิด และจัดการกับ data packet ที่อยู่ในมือเราอย่างไร


ขอขอบคุณอาจารย์ Weerachai Yaemvachi ที่ช่วยแนะนำ link ของ Slide ที่ผมได้ใช้ในการเขียนบทความมา ณ. ที่นี้ด้วยครับ

Link อ้างอิงสำหรับ Slide ที่ผมไปนำมาใช้ประกอบการเขียนบทความนี้ครับ:
//pt.slideshare.net/alHandy/cis82-discard-route

โก้-ชัยวัฒน์ (KoChaiwat)



Create Date : 07 กรกฎาคม 2558
Last Update : 9 กรกฎาคม 2558 7:44:16 น.
Counter : 8611 Pageviews.

1 comments
  
ขอบคุณบทความดีๆครับอาจารย์ จะได้นำ Route null0 ไปใช้ในงานได้ถูกวิธีครับ
โดย: Apiwat IP: 159.192.221.94 วันที่: 10 กรกฎาคม 2562 เวลา:11:06:50 น.
ชื่อ :
Comment :
 *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

Likecisco.BlogGang.com

kochaiwat
Location :
กรุงเทพฯ  Thailand

[ดู Profile ทั้งหมด]
 ผู้ติดตามบล็อก : 693 คน [?]

บทความทั้งหมด