Hello there,
One way to accomplish this is to use MPLS L3VPN (a.k.a. VRFs) with targeted route leaking.
Rough algorithm:
0/ it would help a lot if Your Provider1 sends 0/1 & 128/1 instead of 0/0
1/ create 4 VRFs as below:
1a/ CUST1-VRF is the "primary" for CUST1 and holds all its routes. CUST2,3,4 routes are leaked into CUST1-VRF as well.
CUST1-VRF is also primary for ISP1 and receives 0/1 & 128/1 from ISP1. CUST1-VRF has a static 0/0 route with "next-table CUST2-VRF.inet.0" configured.
1b/ CUST2-VRF is the "primary" for CUST2 and holds all its routes. CUST1,3,4 routes are leaked into CUST2-VRF as well.
CUST2-VRF is also primary for ISP2 and receives full table.
1c/ CUST3-VRF is the "primary" for CUST3 and holds all its routes. CUST1,2,4 routes are leaked into CUST3-VRF as well.
ISP1 and ISP2 routes are leaked into CUST3-VRF from CUST1-VRF & CUST2-VRF.
1d/ CUST4-VRF is the "primary" for CUST4 and holds all its routes. CUST1,2,3 routes are leaked into CUST4-VRF as well.
ISP2 routes are leaked into CUST4-VRF.
2/ the leaking between VRFs is done on a local PE by means of RIB-groups(if BGP) +auto-export (if direct/static) and on remote PE by means of crafted VRF import policies.
The advantages:
a/ You can enforce almost any business rule this way
b/ with MPLS as transport, You can have multiservice network from Day1 and gradually add E-LINE, E-LAN (VPLS), etc on the fly
Disadvantages:
i) in certain cases, when CUST2,3,4-VRFs are on same PE, that PE has to hold up to 3 copies of full table, one copy in each VRF. This cuonsumes memory but with modern Routing Engines, it is not that critical.
ii) If You are not familiar with MPLS and L3VPNs, then Your learning curve would look like Delta-4 rocket launch ![Smiley Very Happy Smiley Very Happy]()
HTH
Thx
Alex