MPLS central services VPN, also known as MPLS VPN shared services, is a topology where multiple customer VPNs securely access shared services like voice gateways or Internet access, while traffic isolation is maintained through route-target filtering and route leaking.

Central services VPN Fundamental

This is an example of a central services VPN (or shared services VPN) topology in an MPLS backbone, where multiple customer VPNs (VRF A and VRF B) maintain isolated routing domains while sharing access to a common service, such as a voice gateway, via a central VRF.

Route-target (RT) import/export policies enable selective route leaking: customer VRFs import routes from the central VRF (RT 1:300), and the central VRF imports routes from both customer VRFs (RTs 1:400). This ensures that only designated sites (e.g., central offices) from each customer can reach the shared service without exposing their entire network.

MPLS central services VPN also known as MPLS VPN shared services
MPLS central services VPN also known as MPLS VPN shared services

Central Service Configuration Example

This topology is implemented using GNS3 to simulate a service provider MPLS environment. Within the provider network, OSPF and MPLS are configured within the provider network. Three VRFs are defined: VRF A, VRF B, and VRF Central. Interfaces connected to customer sites are assigned to their respective VRFs. MP-BGP with the VPNv4 address family is configured between the PE routers, and the routes from each customer VRF are redistributed into MP-BGP for advertisement across the MPLS core.

MPLS central services VPN Configuration Example
MPLS central services VPN Configuration Example

Route-targets are configured as follows: RT 1:100 is used for both import and export in VRF A, and RT 1:200 for VRF B. VRF Central exports RT 1:300, which is imported by any customer VRF requiring access to shared services. Additionally, RT 1:400 is exported by the customer VRFs (VRF A and B) to advertise their routes to the central VRF, which imports RT 1:400.

hostname PE1
!
ip vrf A
 rd 1:100
 route-target export 1:100
 route-target export 1:400
 route-target import 1:100
 route-target import 1:300
!
ip cef
!
mpls label protocol ldp
!
interface Loopback0
 ip address 10.10.10.1 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.1.1 255.255.255.0
 mpls ip
!
interface Ethernet0/1
 ip vrf forwarding A
 ip address 172.16.1.1 255.255.255.0
!
router ospf 1
 network 10.0.0.0 0.255.255.255 area 0
!
router bgp 65001
 bgp log-neighbor-changes
 neighbor 10.10.10.2 remote-as 65001
 neighbor 10.10.10.2 update-source Loopback0
 neighbor 10.10.10.3 remote-as 65001
 neighbor 10.10.10.3 update-source Loopback0
 !
 address-family vpnv4
  neighbor 10.10.10.2 activate
  neighbor 10.10.10.2 send-community both
  neighbor 10.10.10.2 next-hop-self
  neighbor 10.10.10.3 activate
  neighbor 10.10.10.3 send-community both
  neighbor 10.10.10.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf A
  redistribute connected
 exit-address-family
!
mpls ldp router-id Loopback0
hostname PE2
!
ip vrf A
 rd 1:100
 route-target export 1:100
 route-target import 1:100
!
ip vrf B
 rd 1:200
 route-target export 1:200
 route-target import 1:200
!
ip vrf Central
 rd 1:300
 route-target export 1:300
 route-target import 1:400
!
ip cef
!
mpls label protocol ldp
!
interface Loopback0
 ip address 10.10.10.2 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.2.2 255.255.255.0
 mpls ip
!
interface Ethernet0/1
 ip vrf forwarding A
 ip address 172.16.2.1 255.255.255.0
!
interface Ethernet0/2
 ip vrf forwarding B
 ip address 172.16.4.1 255.255.255.0
!
interface Ethernet0/3
 ip vrf forwarding Central
 ip address 192.168.1.1 255.255.255.0
!
router ospf 1
 network 10.0.0.0 0.255.255.255 area 0
!
router bgp 65001
 bgp log-neighbor-changes
 neighbor 10.10.10.1 remote-as 65001
 neighbor 10.10.10.1 update-source Loopback0
 neighbor 10.10.10.3 remote-as 65001
 neighbor 10.10.10.3 update-source Loopback0
 !
 address-family vpnv4
  neighbor 10.10.10.1 activate
  neighbor 10.10.10.1 send-community both
  neighbor 10.10.10.1 next-hop-self
  neighbor 10.10.10.3 activate
  neighbor 10.10.10.3 send-community both
  neighbor 10.10.10.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf A
  redistribute connected
 exit-address-family
 !
 address-family ipv4 vrf B
  redistribute connected
 exit-address-family
 !
 address-family ipv4 vrf Central
  redistribute connected
 exit-address-family
!
mpls ldp router-id Loopback0
hostname PE3
!
ip vrf B
 rd 1:200
 route-target export 1:200
 route-target export 1:400
 route-target import 1:200
 route-target import 1:300
!
ip cef
!
mpls label protocol ldp
!
interface Loopback0
 ip address 10.10.10.3 255.255.255.255
!
interface Ethernet0/0
 ip address 10.0.3.3 255.255.255.0
 mpls ip
!
interface Ethernet0/1
 ip vrf forwarding B
 ip address 172.16.3.1 255.255.255.0
!
router ospf 1
 network 10.0.0.0 0.255.255.255 area 0
!
router bgp 65001
 bgp log-neighbor-changes
 neighbor 10.10.10.1 remote-as 65001
 neighbor 10.10.10.1 update-source Loopback0
 neighbor 10.10.10.2 remote-as 65001
 neighbor 10.10.10.2 update-source Loopback0
 !
 address-family vpnv4
  neighbor 10.10.10.1 activate
  neighbor 10.10.10.1 send-community both
  neighbor 10.10.10.1 next-hop-self
  neighbor 10.10.10.2 activate
  neighbor 10.10.10.2 send-community both
  neighbor 10.10.10.2 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf B
  redistribute connected
 exit-address-family
!
mpls ldp router-id Loopback0
hostname P
!
ip cef
!
mpls label protocol ldp
!
interface Loopback0
 ip address 10.10.10.10 255.255.255.255
!
interface Ethernet0/0
 no ip address
 shutdown
!
interface Ethernet0/1
 ip address 10.0.1.10 255.255.255.0
 mpls ip
!
interface Ethernet0/2
 ip address 10.0.2.10 255.255.255.0
 mpls ip
!
interface Ethernet0/3
 ip address 10.0.3.10 255.255.255.0
 mpls ip
!
router ospf 1
 network 10.0.0.0 0.255.255.255 area 0
!
mpls ldp router-id Loopback0

Troubleshooting MPLS Central Services VPN

Verification confirms the setup is working as expected. BGP VPNv4 tables on PE1 and PE3 show the expected routes for customer and shared service prefixes.

PE1#show bgp vpnv4 unicast vrf A
BGP table version is 13, local router ID is 10.10.10.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:100 (default for vrf A)
 *>  172.16.1.0/24    0.0.0.0                  0         32768 ?
 *>i 172.16.2.0/24    10.10.10.2               0    100      0 ?
 *>i 192.168.1.0      10.10.10.2               0    100      0 ?
PE1#show bgp vpnv4 unicast vrf A labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 1:100 (A)
   172.16.1.0/24    0.0.0.0         22/nolabel(A)
   172.16.2.0/24    10.10.10.2      nolabel/22
   192.168.1.0      10.10.10.2      nolabel/23
PE3(config)#do sh bgp vpnv4 unicast vrf B
BGP table version is 11, local router ID is 10.10.10.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:200 (default for vrf B)
 *>  172.16.3.0/24    0.0.0.0                  0         32768 ?
 *>i 172.16.4.0/24    10.10.10.2               0    100      0 ?
 *>i 192.168.1.0      10.10.10.2               0    100      0 ?
PE3(config)#do sh bgp vpnv4 unicast vrf B labels
   Network          Next Hop      In label/Out label
Route Distinguisher: 1:200 (B)
   172.16.3.0/24    0.0.0.0         16/nolabel(B)
   172.16.4.0/24    10.10.10.2      nolabel/16
   192.168.1.0      10.10.10.2      nolabel/23
PE2(config)#do sh bgp vpnv4 unicast vrf Central
BGP table version is 14, local router ID is 10.10.10.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:300 (default for vrf Central)
 *>i 172.16.1.0/24    10.10.10.1               0    100      0 ?
 *>i 172.16.3.0/24    10.10.10.3               0    100      0 ?
 *>  192.168.1.0      0.0.0.0                  0         32768 ?

Traceroute tests from customer sites A1 and B1 to the central service IP (192.168.1.2) demonstrate correct MPLS label usage and successful packet delivery. Conversely, traffic from sites A2 and B2 to the shared service fails, confirming proper segmentation. This configuration allows secure and controlled access to shared services while maintaining traffic isolation between different customer VPNs.

A1#traceroute 172.16.2.2
Type escape sequence to abort.
Tracing the route to 172.16.2.2
VRF info: (vrf in name/id, vrf out name/id)
  1 172.16.1.1 1 msec 6 msec 6 msec
  2 10.0.1.10 [MPLS: Labels 20/22 Exp 0] 1 msec 1 msec 1 msec
  3 172.16.2.1 0 msec 0 msec 0 msec
  4 172.16.2.2 1 msec 0 msec 0 msec
A1#traceroute 192.168.1.2
Type escape sequence to abort.
Tracing the route to 192.168.1.2
VRF info: (vrf in name/id, vrf out name/id)
  1 172.16.1.1 2 msec 5 msec 6 msec
  2 10.0.1.10 [MPLS: Labels 20/23 Exp 0] 2 msec 1 msec 1 msec
  3 192.168.1.1 0 msec 0 msec 1 msec
  4 192.168.1.2 1 msec 0 msec 1 msec
A2#traceroute 192.168.1.2
Type escape sequence to abort.
Tracing the route to 192.168.1.2
VRF info: (vrf in name/id, vrf out name/id)
  1 172.16.2.1 5 msec 6 msec 4 msec
  2 172.16.2.1 !H  !H  !H
B1#traceroute 172.16.4.2
Type escape sequence to abort.
Tracing the route to 172.16.4.2
VRF info: (vrf in name/id, vrf out name/id)
  1 172.16.3.1 1 msec 5 msec 5 msec
  2 10.0.3.10 [MPLS: Labels 20/16 Exp 0] 1 msec 1 msec 0 msec
  3 172.16.4.1 1 msec 0 msec 1 msec
  4 172.16.4.2 0 msec 1 msec 1 msec
B1#traceroute 192.168.1.2
Type escape sequence to abort.
Tracing the route to 192.168.1.2
VRF info: (vrf in name/id, vrf out name/id)
  1 172.16.3.1 3 msec 5 msec 6 msec
  2 10.0.3.10 [MPLS: Labels 20/23 Exp 0] 5 msec 4 msec 5 msec
  3 192.168.1.1 5 msec 5 msec 5 msec
  4 192.168.1.2 5 msec 5 msec 1 msec
B2#traceroute 192.168.1.2
Type escape sequence to abort.
Tracing the route to 192.168.1.2
VRF info: (vrf in name/id, vrf out name/id)
  1 172.16.4.1 5 msec 4 msec 5 msec
  2 172.16.4.1 !H  !H  !H
Back to: MPLS & MPLS VPN Fundamental (in Progress) > MPLS VPN Topologies

Leave a Reply

Your email address will not be published. Required fields are marked *


Post comment