ยินดีต้อนรับสู่ show running-config ครับ

บล็อก show running-config นี้สร้างไว้เพื่อเป็นแหล่งรวบรวมเทคนิคการตั้งค่าอุปกรณ์เครือข่าย Cisco ไม่ว่าจะเป็น Cisco IOS Router, Cisco Catalyst Swtich, Cisco ASA Firewall, Cisco Mars เป็นต้น รวมทั้งอาจจะมีเทคนิคการตั้งค่าอุปกรณ์ในยี่ห้ออื่น ๆ บ้างเล็กน้อยครับ

ซึ่งบทความในบล็อกนี้ก็จะรวบรวมมาจากประสบการณ์ส่วนตัวของกระผมเองครับ (หากมีข้อผิดพลาดก็ขออภัยไว้ล่วงหน้าเลยละกันนะครับ) และก็อยากใช้พื้นที่แห่งนี้เป็นแหล่งในการแลกเปลี่ยนความรู้ รวมไปถึงวิธีการหรือเทคนิคการตั้งค่าอุปกรณ์เครือข่าย กับทุก ๆ คนครับ

Thursday, September 22, 2016

MPLS ตอนที่ 2 การทำงานของ MPLS TTL propagation


สำหรับบทความในหัวข้อ MPLS ตอนที่ 2 นี้จะขอกล่าวถึงเนื้อหาเรื่อง MPLS TTL propagation กันก่อนนะครับ โดยก่อนที่จะศีกษาในหัวข้อนี้ ควรที่จะมีความเข้าใจการหลักการทำงานเบื้องต้นของ MPLS กันก่อน ซึ่งติดตามได้ในบทความ MPLS ตอนที่ 1 ทำความรู้จักกับการทำงานของ MPLS ใน Dataplane นะครับ

ในการใช้งาน IP header แบบปกติ จะมีการใช้งานฟิลด์ที่มีชื่อว่า TTL ซึ่งมีหน้าที่ในการจำกัดจำนวนอุปกรณ์ Layer 3 ที่จะใช้ในการส่งต่อแต่ละแพ็คเก็ตไป (hop limit) ซึ่งค่า TTL นี้จะนำมาใช้สำหรับการป้องกัน Layer 3 loop ที่อาจจะเกิดขึ้นในระบบเครือข่าย และยังนำประยุกต์ใช้กับการใช้คำสั่ง traceroute ที่จะแสดงสถานะของแต่ละ hop ที่แพ็คเก็ตเดินทางผ่านตลอดเส้นทางได้ด้วย (ใครยังไม่ทราบว่า traceroute ทำงานอย่างไรติดตามได้ในบทความ Traceroute คืออะไร? ได้ครับ) โดยเมื่อทำการส่งต่อแพ็คเก็ตข้ามไปยังแต่ละ hop อุปกรณ์แต่ละตัวจะทำการลดค่า TTL ลงหนึ่งค่า และเมื่อค่า TTL ลดลงเหลือศูนย์เมื่อไร อุปกรณ์ใน hop นั้นจะทำการดรอปแพ็คเก็ตนั้นไปและทำการส่งข้อความ ICMP Time exceeded message กลับไปแจ้งยังต้นทางผู้ส่งแพ็คเก็ตมา ใน MPLS header ก็จะมีฟิลด์ TTL ใช้งานอยู่ด้วยเช่นกัน โดยจะมีหน้าที่การทำงานแบบเดียวกันกับฟิลด์ TTL ใน IP header ทุกประการ

สิ่งที่ต่างกันก็คือ ค่า TTL ใน MPLS header จะมีการใช้งานก็ต่อเมื่อแพ็คเก็ตนั้นถูกส่งต่ออยู่ภายในเครือข่าย MPLS เท่านั้น โดยปกติเมื่อเราเตอร์ LSR ได้รับแพ็คเก็ตเข้ามาสู่เครือข่าย MPLS แล้ว ก็จะทำการคัดลอกค่า TTL ใน IP header มาใช้งานบน MPLS header ยกตัวอย่างเช่น แพ็คเก็ต IP ที่รับเข้ามาสู่เครือข่าย MPLS มีค่า TTL เท่ากับ 255 เมื่อเราเตอร์ Ingress LSR ได้รับแพ็คเก็ตเข้ามาและทำการ push MPLS header เข้าไป ก็จะทำการกำหนดค่า MPLS TTL เท่ากับ 255 ด้วย และเมื่อทำการส่งต่อแพ็คเก็ตนั้นไปยังเราเตอร์ LSR ตัวอืน ๆ ตามเส้นทาง เราเตอร์ LSR ตัวอืน ๆ ก็จะทำการลดค่า TTL เฉพาะบน MPLS header ลง hop ละหนึ่งค่า จนกว่าจะถึง Egress LSR ที่จะทำการ pop MPLS header ออกจากแพ็คเก็ต ก็จะทำการคัดลอกค่า MPLS TTL กลับไปยัง IP TTL ด้วย ก่อนจะทำการส่งต่อแพ็คเก็ตนั้นไปตามเส้นทางต่อไป

โดยปกติเมื่อใช้งาน MPLS เราเตอร์ LSR จะมีการทำงานร่วมกับฟิลด์ TTL ดังนี้

  • Ingress LSR หลังจากได้รับแพ็คเก็ต IP เข้ามา จะทำการลดค่า IP TTL ลงหนึ่งค่า จากนั้นจะทำการ push label เข้าสู่แพ็คเก็ต และคัดลอกค่า IP TTL ไปใช้งานบน MPLS TTL
  • LSR เมื่อได้รับแพ็คเก็ตที่มี label เข้ามา ก็จะทำการ swap label โดยจะมีการลดค่า MPLS TTL ลงหนึ่งค่าด้วย (จะไม่สนใจค่า IP TTL เลย)
  • Egress LSR หลังจากที่ได้รับแพ็คเก็ตเข้ามาก็จะทำการลดค่า MPLS TTL ลงหนึ่งค่า และจะทำการ pop label ออกจากแพ็คเก็ตและจะทำการคัดลอกค่า MPLS TTL ไปใช้งานบน IP TTL ก่อนจะทำการส่งต่อแพ็คเก็ตต่อไป

รูปแบบการทำงานในลักษณะนี้จะเรียกว่า MPLS TTL propagation เนื่องจากจะมีการถ่ายทอดค่า IP TTL ไปยัง MPLS TTL เมื่อแพ็คเก็ตเดินทางเข้าสู่เครือข่าย MPLS และจะถ่ายทอด MPLS TTL กลับไปยัง IP TTL เมื่อแพ็คเก็ตเดินทางออกจากเครือข่าย MPLS ซึ่งจะเป็นการทำงานโดย default เมื่อเปิดการทำงานของ MPLS ใน Cisco IOS การใช้งานคุณสมบัติ MPLS TTL propagation นี้จะทำให้เมื่อมีการใช้คำสั่ง traceroute โดยมีการส่งแพ็คเก็ตผ่านเส้นทางที่ใช้งาน MPLS ก็จะสามารถที่จะได้รับ ICMP Time Exceeded message ได้จากเราเตอร์ทุกตัวตลอดเส้นทาง รวมทั้งเราเตอร์ LSR ที่อยู่ภายใต้เครือข่าย MPLS ด้วย หรือจะพูดได้อีกแบบก็คือ เมื่อโฮสต์ภายนอกเครือข่าย MPLS ทำการ traceroute ผ่านเส้นทางที่ใช้งาน MPLS จะสามารถมองเห็นทุก ๆ hop ภายในเครือข่าย MPLS ได้ด้วย (อยากรู้วิธีการทำงานคำสั่ง traceroute อ่านได้ที่บทความนี้ก่อนนะครับ Traceroute คืออะไร?)

ตัวอย่างการใช้คำสั่ง traceroute จากโฮสต์ A ไปยัง โฮสต์ B
Host-A#traceroute 10.8.8.8 probe 1 numeric

Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.254 1 msec
  2 172.16.10.1 1 msec
  3 192.168.10.2 [MPLS: Label 24 Exp 0] 3 msec
  4 192.168.0.2 [MPLS: Label 17 Exp 0] 2 msec
  5 192.168.20.1 [MPLS: Label 25 Exp 0] 1 msec
  6 172.16.20.2 2 msec
  7 10.8.8.8 3 msec

ตัวอย่างการใช้คำสั่ง traceroute จากเราเตอร์ PE1 ไปยังโฮสต์ B
PE1#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.10.2 [MPLS: Label 24 Exp 0] 1 msec
  2 192.168.0.2 [MPLS: Label 17 Exp 0] 1 msec
  3 192.168.20.1 [MPLS: Label 25 Exp 0] 1 msec
  4 172.16.20.2 1 msec
  5 10.8.8.8 2 msec

จากตัวอย่างด้านบน ไม่ว่าจะเป็นการ traceroute จากโฮสต์ภายนอกเครือข่าย MPLS หรือทำการ traceroute จากอุปกรณ์ภายในเครือข่าย MPLS (PE1) ก็จะได้ผลลัพธ์ในลักษณะเดียวกัน คือจะสามารถมองเห็นทุก hop ได้ตลอดเส้นทาง

แต่ในหลาย ๆ กรณีอาจจะไม่ต้องการให้โฮสต์ภายนอกเครือข่าย MPLS สามารถมองเห็นแต่ละ hop ภายในเครือข่าย MPLS ด้วยการใช้งานคำสั่ง traceroute ได้ ซึ่งในการให้บริการของผู้ให้บริการโดยทั่วไปก็จะใช้งาน MPLS ลำหรับสร้างการเชื่อมต่อแบบ Layer 3 WAN ให้กับลูกค้าที่ใช้งานอยู่ภายนอกเครือข่าย MPLS ดังนั้น การที่ให้ลูกค้าสามารถมองเห็นแต่ละ hop ตลอดเส้นทางภายในเครือข่าย MPLS ก็อาจจะเป็นช่องโหว่ในการรักษาความปลอดภัยได้ หรือในฝั่งของลูกค้าก็อาจจะไม่ได้ต้องการที่จะมองเห็นแต่ละ hop ของผู้ให้บริการ โดยอาจจะต้องการมองเห็นเฉพาะ hop ของฝั่งลูกค้าเท่านั้นก็ได้


เราเตอร์ Cisco IOS สามารถเลือกที่จะปิดการทำงานของ MPLS TTL propagation ได้ ด้วยการใช้คำสั่ง "no mpls ip propagate-ttl" ภายใต้ global configuration mode โดยในการนำไปใช้งาน จริง ๆ แล้วสามารถใช้งานคำสั่งนี้เฉพาะเราเตอร์ที่เป็น ingress LSR และ egress LSR หรือเฉพาะเราเตอร์ PE ก็ได้ แต่มีข้อแนะนำให้ใช้งานคำสั่งนี้บนเราเตอร์ทุก ๆ ตัวในเครือข่าย MPLS (PE และ P ทั้งหมด)

เมื่อปิดการทำงานของ MPLS TTL propagation ลงแล้ว ฟิลด์ IP TTL และ MPLS TTL จะทำงานแยกส่วนออกจากกัน โดยเมื่อเราเตอร์  ingress LSR ได้รับแพ็คเก็ตเข้ามาสู่เครือข่าย MPLS ก็จะทำการ Push label เข้าไปยังแพ็คเก็ต โดยจะไม่ทำการคัดลอก IP TTL มาใช้งาน แต่จะทำการกำหนดค่า MPLS TTL เป็น 255 แทน จากนั้นจะทำการส่งต่อแพ็คเก็ตไปตามขั้นตอนปกติ จนถึง egress LSR ก็จะทำการ Pop label ออกจากแพ็คเก็ต โดยที่จะไม่ทำการคัดลอกค่า MPLS TTL กลับคืนไปยัง IP TTL เหมือนที่ผ่านมา ดังนั้นค่า IP TTL จะมีค่าเท่าเดิมตลอดเส้นทางเมื่อถูกส่งต่ออยู่ภายใต้เครือข่าย MPLS การปิดการทำงานของ MPLS TTL propagation นี้จะทำให้ค่า MPLS TTL มีโอกาสน้อยมาที่จะลดลงจนเหลือศูนย์ (เนื่องจากมีการกำหนดค่า MPLS TTL ใหม่เป็น 255) จึงทำให้ไม่มี hop ใดในเครือข่าย MPLS ที่จะทำการส่ง ICMP Time Exceeded message กลับไปยังต้นทาง จึงทำให้ฝั่งลูกค้าจะไม่สามารถมองเห็นแต่ละ hop ภายในเครือข่าย MPLS ของผู้ให้บริการด้วยการใช้คำสั่ง traceroute ได้อีกต่อไป (ไม่สามารถมองเห็นเราเตอร์ P ได้ โดยจะเห็นแต่เราเตอร์ PE เท่านั้น) โดยฝั่งลูกค้าจะมองเห็นทั้้งเครือข่าย MPLS เสมือนเป็นเพียงแค่ hop เดียวเท่านั้น 



ตัวอย่างการปิดการทำงานของคุณสมบัติ MPLS TTL propagation บนเราเตอร์ทุกตัวในเครือข่าย MPLS (จริง ๆ แล้วปิดการทำงานเฉพาะบน PE ก็ได้ผลลัพธ์ไม่ต่างกัน)
PE1(config)#no mpls ip propagate-ttl

P1(config)#no mpls ip propagate-ttl

P2(config)#no mpls ip propagate-ttl

PE2(config)#no mpls ip propagate-ttl

เมื่อทำการปิดการทำงานของ MPLS TTL propagation ลงแล้ว เมื่อทำการ traceroute จากโฮสต์ A ไปยัง โฮสต์ B จะไม่สามารถมองเห็น hop ระหว่างทางภายในเครือข่าย MPLS ได้อีกต่อไป (มองไม่เห็นเราเตอร์ P ทั้งหมด)

ตัวอย่างการใช้คำสั่ง traceroute จากโฮสต์ A ไปยังโฮสต์ B
Host-A#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.254 1 msec
  2 172.16.10.1 1 msec
  3 192.168.20.1 [MPLS: Label 25 Exp 0] 2 msec
  4 172.16.20.2 2 msec
  5 10.8.8.8 2 msec

ตัวอย่างการใช้คำสั่ง traceroute จากเราเตอร์ PE1 ไปยังโฮสต์ B
PE1#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.20.1 [MPLS: Label 25 Exp 0] 1 msec
  2 172.16.20.2 2 msec
  3 10.8.8.8 1 msec

จากตัวอย่างด้านบน เมื่อทำการปิดคุณสมบัติ MPLS TTL propagation ลงและใช้งานคำสั่ง traceroute จะไม่สามารถมองเห็น hop ภายในเครือข่าย MPLS ได้อีกต่อไป (ไม่เห็นเราเตอร์ P ทั้งหมด) ไม่ว่าจะเป็นการ traceroute จากโฮสต์ภายนอกเครือข่าย MPLS หรือ traceroute จากอุปกรณ์ภายในเครือข่าย MPLS (PE1) ก็ตาม

การปิดการทำงานของ  MPLS TTL propagation จะทำให้ไม่สามารถมองเห็น hop ภายในเครือข่าย MPLS จากการใช้คำสั่ง traceroute ได้อีกต่อไป แม้ว่าจะเป็นการใช้คำสั่ง traceroute จากอุปกรณ์ของผู้ให้บริการก็ตาม ซึ่งจะทำให้ผู้ให้บริการไม่สามารถมองเห็นเส้นทางในแต่ละ hop ภายในเครือข่าย MPLS จากการใช้คำสั่ง traceroute ได้ ซึ่งจริง ๆ แล้วผู้ให้บริการส่วนมากจะต้องการปิดการทำงานของ MPLS TTL propagation สำหรับการส่งต่อแพ็คเก็ตของลูกค้าเท่านั้น แต่จะอนุญาตให้ใช้งาน MPLS TTL propagation สำหรับแพ็คเก็ตที่อุปกรณ์ของผู้ให้บริการเป็นผู้สร้างขึ้นมาเองได้ เพื่อที่เวลาใช้คำสั่ง traceroute จากอุปกรณ์ของผู้ให้บริการเองจะสามารถมองเห็นแต่ละ hop ตลอดเส้นทางได้ ซึ่งจริง ๆ แล้วบน Cisco IOS จะสามารถทำการกำหนดรูปแบบการทำงานของ MPLS TTL propagation ได้อีก 2 รูปแบบ ดังนี้
  • forwarded เปิดคุณสมบัติ MPLS TTL propagation สำหรับทราฟิกที่มีต้นกำเนิดจากภายนอกเครือข่าย MPLS เท่านั้น
  • local เปิดคุณสมบัติ MPLS TTL propagation สำหรับทราฟิกที่มีต้นกำเนิดจากภายในเครือข่าย MPLS เท่านั้น
ดังนั้น ถ้าต้องการที่จะทำการซ่อนเครือข่าย MPLS จากลูกค้าหรือโฮสต์ภายนอกเครือข่ายเท่านั้น ก็จะสามารถทำได้ด้วยการใช้คำสั่ง "no mpls ip propagate-ttl forwarded" ซึ่งจะเป็นเสมือนการบอกว่าให้ปิดการทำงานของ MPLS TTL propagation สำหรับทราฟิกที่มีต้นกำเนิดจากภายนอกเครือข่าย MPLS เท่านั้น

ตัวอย่างการตั้งค่าบนเราเตอร์ PE1

PE1(config)#no mpls ip propagate-ttl forwarded

เมื่อใช้คำสั่ง "no mpls ip propagate-ttl forwarded" บนเราเตอร์ PE1 แล้ว ก็จะเป็นการปิดการทำงานของ MPLS TTL propagation สำหรับทราฟิกที่มีต้นกำเนิดจากภายนอกเครือข่าย MPLS เท่านั้น โดยเมื่อใช้คำสั่ง traceroute จากโฮสต์ภายนอกเครือข่าย MPLS จะไม่สามารถมองเห็น hop ระหว่างเส้นทางภายในเครือข่าย MPLS ได้ (มองไม่เห็นเราเตอร์ P) แต่เมื่อใช้คำสั่ง traceroute จากอุปกรณ์ในเครือข่าย MPLS จะสามารถมองเห็นแต่ละ hop ระหว่างเส้นทางในเครือข่าย MPLS ได้

ตัวอย่างการใช้คำสั่ง traceroute จากโฮสต์ A ไปยังโฮสต์ B เมื่อใช้คำสั่ง "no mpls ip propagate-ttl forwarded" บนเราเตอร์ PE1
Host-A#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.254 0 msec
  2 172.16.10.1 0 msec
  3 192.168.20.1 [MPLS: Label 25 Exp 0] 2 msec
  4 172.16.20.2 2 msec
  5 10.8.8.8 2 msec

ตัวอย่างการใช้คำสั่ง traceroute จากเราเตอร์ PE1 ไปยังโฮสต์ B เมื่อใช้คำสั่ง "no mpls ip propagate-ttl forwarded" บนเราเตอร์ PE1
PE1#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.10.2 [MPLS: Label 24 Exp 0] 2 msec
  2 192.168.0.2 [MPLS: Label 17 Exp 0] 1 msec
  3 192.168.20.1 [MPLS: Label 25 Exp 0] 1 msec
  4 172.16.20.2 1 msec
  5 10.8.8.8 2 msec

หรือ ถ้าต้องการที่จะทำการซ่อนเครือข่าย MPLS จากเครือข่ายภายในของผู้ให้บริการ แต่สามารถให้มองเห็นได้จากเครือข่ายภายนอก ก็สามารถทำได้ด้วยการใช้คำสั่ง "no mpls ip propagate-ttl local" ซึ่งจะเป็นเสมือนการบอกว่าให้ปิดการทำงานของ MPLS TTL propagation สำหรับทราฟิกที่มีต้นกำเนิดจากภายในเครือข่าย MPLS เท่านั้น

ตัวอย่างการตั้งค่าบนเราเตอร์ PE1
PE1(config)#no mpls ip propagate-ttl local

เมื่อใช้คำสั่ง "no mpls ip propagate-ttl local" บนเราเตอร์ PE1 แล้ว ก็จะเป็นการปิดการทำงานของ MPLS TTL propagation สำหรับทราฟิกที่มีต้นกำเนิดมาจากภายในเครือข่าย MPLS เท่านั้น โดยเมื่อใช้คำสั่ง traceroute จากอุปกรณ์ภายในเครือข่าย MPLS จะไม่สามารถมองเห็น hop ระหว่างเส้นทางภายในเครือข่าย MPLS ได้ (มองไม่เห็นเราเตอร์ P) แต่เมื่อใช้คำสั่ง traceroute จากโฮสต์ภายนอกเครือข่าย MPLS จะสามารถมองเห็นแต่ละ hop ระหว่างเส้นทางในเครือข่าย MPLS ได้

ตัวอย่างการใช้คำสั่ง traceroute จากโฮสต์ A ไปยังโฮสต์ B เมื่อใช้คำสั่ง "no mpls ip propagate-ttl local" บนเราเตอร์ PE1
Host-A#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.254 0 msec
  2 172.16.10.1 1 msec
  3 192.168.10.2 [MPLS: Label 24 Exp 0] 2 msec
  4 192.168.0.2 [MPLS: Label 17 Exp 0] 2 msec
  5 192.168.20.1 [MPLS: Label 25 Exp 0] 2 msec
  6 172.16.20.2 2 msec
  7 10.8.8.8 3 msec

ตัวอย่างการใช้คำสั่ง traceroute จากเราเตอร์ PE1 ไปยังโฮสต์ B เมื่อใช้คำสั่ง "no mpls ip propagate-ttl local" บนเราเตอร์ PE1
PE1#traceroute 10.8.8.8 probe 1 numeric
Type escape sequence to abort.
Tracing the route to 10.8.8.8
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.20.1 [MPLS: Label 25 Exp 0] 1 msec
  2 172.16.20.2 1 msec
  3 10.8.8.8 2 msec

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

บทความเรื่อง MPLS ที่เกี่ยวข้อง
MPLS ตอนที่ 1 ทำความรู้จักกับการทำงานของ MPLS ใน Dataplane
MPLS ตอนที่ 2 การทำงานของ MPLS TTL propagation
MPLS ตอนที่ 3 ทำความรู้จักกับการทำงานของ MPLS ใน Control Plane
MPLS ตอนที่ 4 การตั้งค่า MPLS สำหรับการส่งต่อ Unicast IP

No comments:

Post a Comment