ติดตั้ง MPLS VPN บนเราเตอร์ Cisco
เมื่อใดที่เทคโนโลยีของ MPLS VPN ถูกนำมาใช้กับโครงข่าย จะทำให้ประสิทธิภาพการทำงานเพิ่มมากขึ้น มีความน่าเชื่อถือมากขึ้น นอกจากนี้ ยังช่วยให้การแบ่งใช้งานทรัพยากรข้อมูลสามารถเป็นไปได้ มากยิ่งขึ้นอย่างเห็นได้ชัดเจน โดย MPLS VPN จะช่วยให้ช่องทางการเชื่อมต่อหนึ่งช่องทางภายใต้ MPLS VPN สามารถถูกนำมาใช้งานให้กับ Customer หรือลูกค้าทีเดียวหลายๆคน ผิดกับ VPN เดิมกำหนดให้มีการเชื่อมต่อแบบ ระหว่างจุด หรือ Point To Point เท่านั้น และหากต้องการติดต่อกับลูกค้าที่เดียว 2 รายพร้อมกัน ไม่สามารถทำได้ ท่านจะต้องตัดการเชื่อมต่อที่กำลังดำเนินอยู่ เพื่อให้สามารถเชื่อมต่อสื่อสารกับคนอื่นๆ
MPLS VPN จะช่วยให้การเชื่อมต่อ VPN จากเดิมเป็นไปในลักษณะการเชื่อมต่อระหว่างจุด และมีข้อจำกัดมากมาย ให้สามารถมีการเชื่อมต่อในรูปแบบของ Fully Mesh ได้ โดยการเชื่อมต่อเช่นนี้ จะช่วยให้ การเชื่อมต่อ VPN มีอิสระมากขึ้น กล่าวคือ ช่องทางการเชื่อมต่อหนึ่งช่องทาง จะสามารถเชื่อมต่อกับ ช่องทางอื่นๆได้พร้อมกัน ลักษณะนี้ จะเห็นได้ว่า ทุกๆช่องทางที่ใช้ VPN จะสามารถสื่อสารกันได้ในเวลาเดียวกัน ซึ่งสามารถทำได้โดยการกำหนดค่า VRF ที่ไม่ซ้ำกันให้กับลูกค้าหรือผู้ใช้งานแต่ละท่าน
ภาพที่ 1 แสดงโครงสร้าง MPLS VPN |
หากท่านยังนึกภาพไม่ออกว่ามีประโยชน์อย่างไร? ประการแรกท่านลองนึกภาพดูว่า หากมีลูกค้า 4 ราย หรือมีสำนักงาน 4 สาขาที่ต้องเชื่อมต่อกัน พร้อมกัน โดยทาง VPN เมื่อเป็นเช่นนี้ หมายความว่า จะต้องมีช่องทาง VPN ถึง 4 ช่องทางๆกายภาพ ต่อผู้ใช้งานหนึ่งราย เพื่อการเชื่อมต่อพร้อมกัน แต่หากท่านใช้ MPLS VPN ผู้ใช้งานทุกท่านจะเหลือเพียงหนึ่งช่องทางๆกายภาพเท่านั้น
อย่างไรก็ดี เทคโนโลยีหลัก 4 ประการที่ทำให้ MPLS VPN สามารถเป็นไปได้ในทางปฏิบัติ ซึ่งได้แก่ Multiprotocol BGP Route Filtering ที่ทำงานบนพื้นฐานของ “Route Target” Extended BGP Community Attribute รวมทั้งการทำงานของ MPLS ที่ทำหน้าที่ส่งผ่าน Packet ไปข้างหน้า ผ่านโครงข่ายไปถึงปลายทางในที่สุด
ภาพที่ 2 ตัวอย่างการใช้งาน MPLS VPN |
Multiprotocol BGP เป็นโปรโตคอลที่ทำงานระหว่าง Router ที่อยู่บริเวณด้านขอบริม ของโครงข่าย ซึ่งเป็น Router ของผู้ให้บริการ โดยจะทำหน้าที่แลกเปลี่ยนข้อมูลข่าวสารเกี่ยวกับ Address ของ VPN
Multiprotocol BGP เป็นส่วนต่อเติมของระบบ BGP ที่มีอยู่แล้ว มีความสามารถที่จะนำพาข้อมูลข่าวสารเกี่ยวกับ Address ของ VPN ภายใต้ IP Version 4 ได้ โดยค่า VPN Address นี้ มีขนาด 12 ไบต์ ได้รวมเอา IP Address และค่าที่เรียกว่า Route Distinguisher (RD) ไว้เป็นที่เรียบร้อย ซึ่งใน 8 ไบต์แรกเป็นค่า RD และอีก 4 ไบต์หลังเป็นค่า IP Address ภายใต้ Version 4
ส่วนค่า RD เป็นค่า Address ขนาด 64 บิต ประกอบด้วยส่วนที่เป็นช่องเก็บข้อมูลเกี่ยวกับ ชนิดของข้อมูลและ อีก 6 ไบต์เป็นค่าของข้อมูลนั้น ค่า RD จะถูกติดตั้งไว้ที่ ส่วนหัวของ IP Address ของลูกค้า ทำให้ค่าที่รวมตัวนี้กลายเป็นค่าที่เรียกว่า VPN-IPv4 ที่ไม่ซ้ำค่ากัน เมื่อวิ่งอยู่ภายในโครงข่าย
VRF หรือ VPN Routing/Forwarding Instances เป็นค่าที่ถูกติดตั้งอยู่บน Router ของ PE ทุกตัว โดยแต่ละช่องทาง VPN จะมีค่า VRF ที่แตกต่างกัน ซึ่งหมายถึงลูกค้าที่เชื่อมต่อกับ Router PE จะต้องมีค่า VRF อยู่หนึ่งค่าเสมอ ดังนั้นลูกค้าที่ใช้ VPN จะต้องใช้ช่องทางที่กำหนดด้วยค่า VRF หรือชุดของช่องทางที่มีค่า VRF ที่แตกต่างกัน เท่านั้น
แต่ละช่องทาง VRF จะประกอบด้วยตารางเลือกเส้นทางซึ่งภายในจะต้องประกอบด้วย ชุดของ Interface ที่ถูกใช้เพื่อส่งผ่าน Packet ไปข้างหน้า (Forwarding) รวมทั้งกฎกติกาการทำงาน และโปรโตคอลเลือกเส้นทางที่ลูกค้าใช้งาน
ภาพที่ 3 โครงสร้างและส่วนระกอบการทำงานของ MPLS VPN |
ภาพที่ 4 แสดงลำดับขั้นตอนการทำงานของ MPLS VPN |
ตัวอย่างการจัด Configure MPLS VPN
ต่อไปนี้เป็นตัวอย่างการจัด Configure MPLS VPN ที่สามารถทดลองได้จริงบนเราเตอร์ของ Cisco จากตัวอย่างต่อไปนี้เป็นการเชื่อมต่อระหว่าง Router A กับ Router B ซึ่งเป็น Router Client ซึ่งเชื่อมต่อกันผ่านโครงข่าย MPLS โดยการเชื่อมต่อระหว่าง Router ของ Client กับ Router ของผู้ให้บริการเชื่อมต่อโครงข่าย หรือ PE (ในที่นี้คือ Router B กับ Router C) จะใช้ Static Routing สื่อสารระหว่างกัน
ภาพที่ 5 ตัวอย่างการเชื่อมต่อ MPLS VPN |
RouterA
!
version 12.1
service timestamps debug uptime
service timestamps log uptime
no service password−encryption
!
hostname RouterA
ip subnet−zero
no ip finger
!
!
interface Ethernet0/0
ip address 10.1.1.1 255.255.255.0
no keepalive
!
interface Serial0/0
ip address 193.1.1.1 255.255.255.252
no ip mroute−cache
no fair−queue
!
ip classless
ip route 0.0.0.0 0.0.0.0 193.1.1.2
no ip http server
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
RouterB
!
version 12.1
service timestamps debug uptime
service timestamps log uptime
no service password−encryption
!
hostname RouterB
!
ip subnet−zero
no ip finger
!
ip cef
!
interface Serial0/0
ip address 193.1.1.2 255.255.255.252
tag−switching ip
clockrate 1000000
!
interface Serial0/1
ip address 194.1.1.1 255.255.255.252
tag−switching ip
clockrate 1000000
!
router ospf 64
log−adjacency−changes
network 194.1.1.0 0.0.0.255 area 0
!
ip classless
ip http server
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
RouterC
version 12.1
service timestamps debug uptime
service timestamps log uptime
no service password−encryption
!
hostname RouterC
!
!
ip subnet−zero
no ip finger
!
ip cef
!
!
interface Serial0/0
ip address 194.1.1.2 255.255.255.252
tag−switching ip
!
interface Serial0/1
ip address 195.1.1.1 255.255.255.252
tag−switching ip
clockrate 1000000
!
router ospf 64
log−adjacency−changes
network 194.1.1.0 0.0.0.255 area 0
!
ip classless
ip http server
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
RouterD
!
version 12.1
service timestamps debug uptime
service timestamps log uptime
no service password−encryption
!
hostname RouterD
!
ip subnet−zero
no ip finger
!
!
interface Ethernet0/0
ip address 10.1.2.1 255.255.255.0
no keepalive
!
interface Serial0/0
ip address 195.1.1.2 255.255.255.252
!
ip classless
ip route 0.0.0.0 0.0.0.0 195.1.1.1
ip http server
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
End
วิธีการ Monitor ดูและทดสอบการทำงานของ MPLS
PE Router (RouterB และ RouterC) ใช้ MP-iBGP เพื่อดำเนินการจัดส่ง Route ให้แก่กันและกัน เมื่อ PE Router ประกาศ VPN Route ไปที่ Router PE ตัวอื่น มันสามารถทำได้โดยการทำให้ตัวมันเองเป็น BGP Next Hop Address และ Address นี้จะต้องเป็น Loopback Address ขนาด 32 บิตบน Router และ Address ขนาด 32 บิตนี้ ยังถูกใช้เพื่อประกาศเข้าไปใน Routing Table ของ Backbone (ซึ่งเป็น P Router) การทำเช่นนี้จะทำให้ MPLS สามารถกำหนด Label ขึ้นมา ที่สอดคล้องกับ Route ของ PE Router แต่ละตัว ต่อไปนี้เป็นคำสั่งที่ใช้เพื่อจัดสร้าง 32 Bit Loopback Address บน RouterB และ RouterC ซึ่งเป็น PE Router และมีการประกาศ Address นี้โดยทาง OSPF
RouterB(config)#interface loopback 0
RouterB(config−if)#ip address 1.1.1.1 255.255.255.255
RouterB(config−if)#exit
RouterB(config)#router ospf 64
RouterB(config−router)#network 1.1.1.1 0.0.0.0 area 0
RouterC(config)#interface loopback 0
RouterC(config−if)#ip address 2.2.2.2 255.255.255.255
RouterC(config−if)#exit
RouterC(config)#router ospf 64
RouterC(config−router)#network 2.2.2.2 0.0.0.0 area 0
MPLS/VPN ใช้ MP-iBGP เพื่อที่จะส่งกระจาย VPN Route จาก Router PE ตัวหนึ่งไปที่ Router PE อีกตัวหนึ่ง โดย Default เมื่อมีการจัดตั้ง BGP Session บน Cisco Router มันจะถูกกระตุ้นให้มีการนำพาเอา IPV4 Addresses โดย BGP
คำสั่ง no bgp default ipv4-unicast จะทำให้มีการ disable การทำงานของ BGP Session ที่เกี่ยวกับการนำพา IPV4 Address ออกไป ต่อไปนี้เป็นคำสั่งที่ใช้ Enable การทำงานของ BGP Process และ Disable พฤติกรรมการทำงานของ default IPV4 Unicast บน Router C และ Router B
RouterB(config)#router bgp 1
RouterB(config−router)#no bgp default ipv4−unicast
RouterC(config)#router bgp 1
RouterC(config−router)#no bgp default ipv4−unicast
มาถึงตรงนี้ เราจะต้องกำหนด BGP Neighbor ภายใต้การทำงานของ BGP บน Router โดย Neighbor Address ในที่นี้เป็น 32 บิต Loopback Address ของ Router ที่อยู่ไกลออกไป (Remote Router) ส่วน Update Source (เป็น Address ที่ BGP ใช้เพื่อประกาศเป็น Next Hop) ควรเป็น Loopback Address ของ Local Router
ขั้นตอนสุดท้ายได้แก่ การกระตุ้น Neighbor (Router เพื่อนบ้าน) คำสั่งต่อไปนี้ ถูกใช้เพื่อติดตั้ง IBGP Session ระหว่าง RouterB และ RouterC
RouterB(config)#router bgp 1
RouterB(config−router)#neighbor 2.2.2.2 remote−as 1
RouterB(config−router)#neighbor 2.2.2.2 update−source loopback 0
RouterB(config−router)#neighbor 2.2.2.2 activate
RouterC(config)#router bgp 1
RouterC(config−router)#neighbor 1.1.1.1 remote−as 1
RouterC(config−router)#neighbor 1.1.1.1 update−source loopback 0
RouterC(config−router)#neighbor 1.1.1.1 activate
มาถึงตรงนี้ BGP Session ต้องการถูกกระตุ้นให้มีการนำพา VPN IPV4 Prefixes ซึ่งต้องใช้ Address Family และ VPN-IPV4 Address Family จะต้องถูกจัด Configure ภายใต้ BGP Process และแล้ว จะมีการกระตุ้น Neighbor เกิดขึ้น ต่อไปนี้เป็นคำสั่งเพื่อจัด Configure BGP Neighbor Session บน RouterB และ RouterC เพื่อที่จะนำพา VPN-IPV4 Prefixes
RouterB(config)#router bgp 1
RouterB(config−router)#address−family vpnv4
RouterB(config−router−af)#neighbor 2.2.2.2 activate
RouterC(config)#router bgp 1
RouterC(config−router)#address−family vpnv4
RouterC(config−router−af)#neighbor 1.1.1.1 activate
เพื่อที่จะ Verify ดูว่า BGP Session ถูกจัดตั้งขึ้น และสามารถนำพา VPN-IPv4 Prefixes บน RouterC ในการนี้ ท่านจะต้องใช้คำสั่ง show ip bgp neighbors ต่อไปนี้เป็น Output บน RouterC จะเห็นว่าสถานะของ BGP ถูกจัดตั้งขึ้น และ Neighbor ถูกจัด Configure เพื่อรองรับ VPN-IPv4
RouterC#show ip bgp neighbors
BGP neighbor is 1.1.1.1, remote AS 1, internal link
BGP version 4, remote router ID 1.1.1.1
BGP state = Established, up for 00:03:03
Last read 00:00:03, hold time is 180, keepalive interval is 60 seconds
Neighbor capabilities:
Route refresh: advertised and received(new)
Address family IPv4 Unicast: advertised and received
Address family VPNv4 Unicast: advertised and received
Received 22 messages, 0 notifications, 0 in queue
Sent 22 messages, 0 notifications, 0 in queue
Route refresh request: received 0, sent 0
Default minimum time between advertisement runs is 5 seconds
ต่อไป จะต้องมีการจัด Configure VRF instance บน Router B และ Router C สำหรับ VPNA และภายใต้ VRF จะต้องมีการติดตั้ง Route Distinguisher (RD)
เส้นทางจาก VRF นั้นจะถูก Tagged ด้วย RD จุดประสงค์ของการสร้าง RD เพื่อแยกความแตกต่างระหว่าง IPV4 Address Prefixes โดยจะทำให้ IP Address เดียวกันสามารถวิ่งผ่าน VPN หลายๆชุด และ PE Router สามารถถูก Configure เพื่อเกี่ยวข้องกับเส้นทางทั้งหมดที่แตกต่างกัน ให้สามารถเดินทางไปที่ CE เดียวกัน ด้วย RD เดียวกัน หรืออาจถูก Configure เพื่อให้เกี่ยวข้องกับ เส้นทางหลายๆเส้นสำหรับ RD ที่แตกต่างกันได้ สำหรับใน Lab นี้ เส้นทางทั้งหมดใน VPNA จะมีค่า RD เป็น 1:100 ต่อไปนี้เป็นคำสั่งที่ใช้จัด Configure vrf VPNA โดยใช้ RD 1:100 บน Router ทั้งสองตัว
RouterB(config)#ip vrf VPNA
RouterB(config−vrf)#rd 1:100
RouterC(config)#ip vrf VPNA
RouterC(config−vrf)#rd 1:100
จัด Configure import และ export Policy บน VRF แต่ละตัว โดยที่ Policy นี้ ถูกใช้เพื่อประกาศเส้นทางออกไปจาก VRF (Export ) และนำเอาเส้นทางเข้ามาใน VRF (Import) ต่อไปนี้เป็นคำสั่งการจัด Configure VPNA บน Router C และ Router B เพื่อที่จะ Export เส้นทางทั้งหมดพร้อมด้วย Extended Community Route Target ของ 1:100 และเพื่อที่จะ Import เส้นทางทั้งหมดเข้าไปใน VRF ที่มี Route Target 1:
RouterB(config)#ip vrf VPNA
RouterB(config−vrf)#route−target both 1:100
RouterC(config)#ip vrf VPNA
RouterC(config−vrf)#route−target both 1:100
หลังจากที่มีการจัด Configure VRF บน Router PE เป็นที่เรียบร้อยแล้ว ท่านจะต้องบอกให้ Router รู้ว่า Interface ใดของ Router เกี่ยวข้องกับ VRF ใด วึ่งสามารถทำได้โดยการใช้คำสั่ง ip vrf forwarding ต่อไปนี้เป็นคำสั่ง ที่เกี่ยวข้องกับ Interface s0/1 บน Router B เชื่อมต่อกับ Router A และ Interface S0/1 ของ Router C เชื่อมต่อกับ Router D ด้วย VRF VPNA
RouterB(config)#interface s0/1
RouterB(config−if)#ip vrf forwarding VPNA
RouterC(config)#interface s0/1
RouterC(config−if)#ip vrf forwarding VPNA
หลังจากที่ท่านได้จัด Configure Interface เป็นที่เรียบร้อยแล้ว ท่านจะได้รับข่าวสาร ที่บ่งบอกว่า IP Address ได้ถูกนำออกไป และ IP Address ต้องการให้ถูกเพิ่มกลับเข้าไปอีก
% Interface Serial0/1 IP address 195.1.1.1 removed due to enabling VRF VPNA
ทดสอบ VPN Configuration บน Router C ด้วยคำสั่ง show ip vrf detail VPNA ต่อไปนี้เป็น Output จากการใช้คำสั่งนี้ สังเกตว่า RD ถูกตั้งให้มีค่า 1:100 และ Interface S0/1 เกี่ยวข้องกับ VRF รวมทั้งมีการติดตั้ง Import และ Export Policy
RouterC#show ip vrf detail VPNA
VRF VPNA; default
RD 1:100
Interfaces:
Serial0/1
Connected addresses are not in global routing table
Export VPN route−target communities
RT:1:100
Import VPN route−target communities
RT:1:100
No import route−map
No export route−map
ขั้นตอนสุดท้ายได้แก่ การได้รับ customer prefixes (เส้นทางจาก RouterA และ RouterB) เข้ามาที่ VRF. ซึ่งสามารถทำได้โดยการใช้ Routing Protocol อย่างเช่น RIP หรือ OSPF ระหว่าง Router PE กับ Router CE (Router A กับ Router B) หรือโดยการใช้ Static Routes สำหรับ lab นี้เราใช้ Static Route และStatic Route สำหรับ VRF VPANA จะถูกดำเนินการ Redistribute เข้าไปใน MP-iBGP ภายใต้ Address ต่อไปนี้เป็นคำสั่งเพื่อจัด Configure Static Route และ Redistribute มันเข้าไปใน MP-iBGP บน Router B และ Router C
RouterB(config)#ip route vrf VPNA 10.1.1.0 255.255.255.0 serial 0/0
RouterB(config)#router bgp 1
RouterB(config−router)#address−family ipv4 vrf VPNA
RouterB(config−router−af)#redistribute static
RouterC(config)# ip route vrf VPNA 10.1.2.0 255.255.255.0 serial 0/1
RouterC(config)#router bgp 1
RouterC(config−router)#address−family ipv4 vrf VPNA
RouterC(config−router−af)#redistribute static
จาก Router B ท่านสามารถตรวจสอบดู Routing Table สำหรับ VPNA ด้วยคำสั่ง show ip route vrf VPNA ต่อไปนี้เป็น Output จากคำสั่งดังกล่าว สังเกตว่า เรามีเส้นทางไปที่เครือข่าย 10.1.2.0
RouterB# show ip route vrf VPNA
Codes: C − connected, S − static, I − IGRP, R − RIP, M − mobile, B − BGP
D − EIGRP, EX − EIGRP external, O − OSPF, IA − OSPF inter area
N1 − OSPF NSSA external type 1, N2 − OSPF NSSA external type 2
E1 − OSPF external type 1, E2 − OSPF external type 2, E − EGP
i − IS−IS, L1 − IS−IS level−1, L2 − IS−IS level−2, ia − IS−IS inter area
* − candidate default, U − per−user static route, o − ODR
P − periodic downloaded static route
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 2 subnets
B 10.1.2.0 [200/0] via 2.2.2.2, 00:11:26
S 10.1.1.0 is directly connected, Serial0/0
C 193.1.1.0/24 is directly connected, Serial0/0
หลังจากติดตั้งเสร็จให้ลองทดสอบ Ping จาก Router A ไปยัง Router B จะพบว่าสามารถ Ping ได้ไม่มีปัญหา