Tänkte skriva ett kortare inlägg om ett rätt intressant problem jag stötte på tidigare vilket löstes med hjälp av VRF-Lite och lite trixande med BGP. Topologin som önskades var enligt följande: Länken mot ISP-1 önskades vara primär pga bättre serviceavtal & bandbredd samtidigt som länken till ISP-2 endast skulle användas som backup. Både ISP-1 & 2 genererar en default-route samt annonserar varsitt 10.x.0.0/23-nät. Det fanns även önskemål att AS #666 skulle agera transit mellan ISP-1 & 2.
Som IGP användes EIGRP inom AS #666 samt mellan R1 - ISP-1 och OSPF mellan R3 - ISP-2 där respektive länknät redistributas. Detta är egentligen helt onödigt men användes för att göra uppgiften lite mer komplicerad bara. :)
Problematiken var dock att ISP-1 & ISP-2 består av en och samma router! Den fysiska topologin ser nämligen ut enligt följande: Med andra ord behöver vi dela upp R1 till två virtuella routrar med separata routing tables & bgp-adjacencys. Detta löser vi med hjälp av VRF-Lite! :) Låt oss ta och kika lite närmare på konfigen för respektive router. R2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
interface Serial1/0
ip address 12.0.0.2 255.255.255.252
description Primary uplink to ISP-1
no shut
interface Loopback3
description For testing
ip address 172.32.0.1 255.255.255.0
no shut
interface Loopback4
description For testing
ip address 172.32.1.1 255.255.255.0
no shut
interface FastEthernet0/0
description to MLS1
ip address 172.16.11.11 255.255.255.0
ip hello-interval eigrp 101 2
ip hold-time eigrp 101 6
ip authentication mode eigrp 1 md5
ip authentication key-chain eigrp 1 s3cr3t
ip summary-address eigrp 101 172.32.0.0 255.255.254.0 5
duplex full
speed 100
no shut
IGP-konfig Då vi endast vill redistributa in länknätet mellan R1 & ISP-1 till EIGRP 101 använde jag en en route-map, passade även på att tagga route’sen om vi skulle behöva utföra någon filtrering senare.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
!Internal IGP-routing
router eigrp 101
redistribute eigrp 666 route-map EIGRP666-EIGRP101
passive-interface default
no passive-interface FastEthernet0/1
network 172.16.0.0
network 172.32.0.0 0.0.0.255
network 172.32.1.0 0.0.0.255
no auto-summary
eigrp router-id 172.16.99.11
ip prefix-list EIGRP666-EIGRP101 seq 5 permit 12.0.0.0/30
route-map EIGRP666-EIGRP101 permit 10
match ip address prefix-list EIGRP666-EIGRP101
set metric 100000 100 255 1 1500
set tag 1666
route-map EIGRP666-EIGRP101 deny 20
!External IGP routing ISP-1
router eigrp 666
passive-interface default
no passive-interface Serial1/0
network 12.0.0.0 0.0.0.3
no auto-summary
BGP
Inga konstigheter här, peer-groups för lite mer “kompakt” konfig.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
router bgp 666
no synchronization
bgp log-neighbor-changes
network 172.16.0.0
network 172.32.0.0 mask 255.255.254.0
redistribute eigrp 666
neighbor 12.0.0.1 remote-as 65001
neighbor 12.0.0.1 description ISP-1
neighbor IBGP peer-group
neighbor IBGP remote-as 666
neighbor IBGP next-hop-self
neigbhor IBGP password s3cr3t
neighbor 172.16.11.1 peer-group IBGP
neighbor 172.16.11.1 description MLS1
neighbor 172.16.13.3 peer-group IBGP
neighbor 172.16.13.3 description MLS2
neighbor 172.16.33.33 peer-group IBGP
neighbor 172.16.33.33 description R3
no auto-summary
Konfigen är mer eller mindre identisk för R3.
Default-route
Som nämndes tidigare önskades företaget att vi använda denna länk som primär, både ISP-1 & 2 genererade varsin default-route. Att ändra local pref för samtliga routes vi lär oss från ISP-1 hade inte varit något hit då det även skulle påverka trafik vi är transit för. Tänkte istället använda en route-map som sätter en högre local pref endast för default-routen. Vi behöver även se till så att vi ej annonserar default-routen vidare utanför vårat AS. R2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
router bgp 666
neighbor 12.0.0.1 prefix-list DEFAULT-ROUTE-BLOCK out
neighbor 12.0.0.1 route-map ISP1-routes in
ip prefix-list DEFAULT-ROUTE-BLOCK seq 5 deny 0.0.0.0/0
ip prefix-list DEFAULT-ROUTE-BLOCK seq 10 permit 0.0.0.0/0 le 32
ip prefix-list default-route seq 5 permit 0.0.0.0/0
route-map ISP1-routes permit 10
match ip address prefix-list default-route
set local-preference 150
route-map ISP1-routes permit 20
R3
router bgp 666
neighbor 13.0.0.1 prefix-list DEFAULT-ROUTE-BLOCK out
neighbor 13.0.0.1 route-map ISP2-routes in
ip prefix-list DEFAULT-ROUTE-BLOCK seq 5 deny 0.0.0.0/0
ip prefix-list DEFAULT-ROUTE-BLOCK seq 10 permit 0.0.0.0/0 le 32
ip prefix-list default-route seq 5 permit 0.0.0.0/0
route-map ISP2-routes permit 10
match ip address prefix-list default-route
set local-preference 110
route-map ISP2-routes permit 20
Vilket ger följande resultat:
1
2
3
4
5
6
7
8
9
10
R3#sh ip bgp 0.0.0.0
BGP routing table entry for 0.0.0.0/0, version 4
Paths: (2 available, best #1, table Default-IP-Routing-Table)
Not advertised to any peer
65001
172.16.11.11 (metric 30720) from 172.16.11.11 (172.32.1.1)
Origin IGP, metric 0, localpref 150, valid, internal, best
65002
13.0.0.1 from 13.0.0.1 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external
VRF-Lite / R1
Nu över till det lite roligare. :) VRF:er har vi ju redan konfat i flera tidigare inlägg, så detta är väl inte direkt något nytt men själva användningsområdet är något jag aldrig stött på tidigare.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
interface Loopback1
ip vrf forwarding ISP-1
ip address 10.1.0.1 255.255.255.0
interface Loopback2
ip vrf forwarding ISP-1
ip address 10.1.1.1 255.255.255.0
interface Loopback3
ip vrf forwarding ISP-2
ip address 10.2.0.1 255.255.255.0
ip ospf network point-to-point
ip ospf 1 area 0
interface Loopback4
ip vrf forwarding ISP-2
ip address 10.2.1.1 255.255.255.0
ip ospf network point-to-point
ip ospf 1 area 0
interface Loopback5
ip vrf forwarding Shared
ip address 1.1.1.1 255.255.255.255
interface Loopback6
ip vrf forwarding Shared
ip address 2.2.2.2 255.255.255.255
interface Loopback11
description Management - RID
ip address 11.11.11.11 255.255.255.255
interface Serial0/0/0
description ISP-1 to CustomerA-R1
ip vrf forwarding ISP-1
ip address 12.0.0.1 255.255.255.252
ip summary-address eigrp 666 10.1.0.0 255.255.254.0 5
interface Serial0/0/1
description ISP-2 to CustomerA-R3
ip vrf forwarding ISP-2
ip address 13.0.0.1 255.255.255.252
ip ospf 1 area 666
Vi konfar först upp några VRF-instanser, shared simulerar i detta fallet externa routes/internet. La även till en export-map för att endast exportera 1.1.1.1/32 och 2.2.2.2/32 från Shared till ISP-1 & ISP-2 vrf:erna.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ip vrf ISP-1
rd 65000:1
route-target export 65000:1
route-target import 65000:1
ip vrf ISP-2
rd 65000:2
route-target export 65000:2
route-target import 65000:2
ip vrf Shared
rd 65000:3
export map ISP-Loopback-Inject
route-target export 65000:3
route-target import 65000:3
route-target import 65000:1
route-target import 65000:2
route-map ISP-Loopback-Inject permit 10
match ip address prefix-list ISP-1
set extcommunity rt 65000:1 additive
route-map ISP-Loopback-Inject permit 20
match ip address prefix-list ISP-2
set extcommunity rt 65000:2 additive
route-map ISP-Loopback-Inject deny 30
IGP
Då vi använder oss av vrf:er måste vi även justera våra IGP-instanser precis som tidigare.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
router eigrp 666
passive-interface default
no passive-interface Serial0/0/0
no auto-summary
address-family ipv4 vrf ISP-1
network 10.1.0.0 0.0.0.255
network 10.1.1.0 0.0.0.255
network 12.0.0.0 0.0.0.3
no auto-summary
autonomous-system 666
exit-address-family
eigrp router-id 1.1.1.1
router ospf 1 vrf ISP-2
router-id 2.2.2.2
log-adjacency-changes
area 0 range 10.2.0.0 255.255.254.0
passive-interface default
no passive-interface Serial0/0/1
BGP
Här stöter vi på ett litet problem då vi endast kan ha en aktiv BGP-instans, dvs skriver vi “router bgp 65001” kan vi ej konfa upp “router bgp 65002” för ISP-2 efteråt. BGP har ju dock som bekant en hel del roliga funktioner vi kan använda oss av, och i detta fall kan vi lösa problemet med hjälp av “local-as”, “no-prepend” & “replace-as”. Klicka på respektive för mer info, Lostintransit.se har även en läsvärd artikel om detta här!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
router bgp 65000
no synchronization
bgp log-neighbor-changes
no auto-summary
address-family ipv4 vrf Shared
redistribute connected
no synchronization
exit-address-family
address-family ipv4 vrf ISP-2
neighbor 13.0.0.2 remote-as 666
neighbor 13.0.0.2 local-as 65002 no-prepend replace-as
neighbor 13.0.0.2 activate
neighbor 13.0.0.2 default-originate
no synchronization
bgp router-id 2.2.2.2
network 10.2.0.0 mask 255.255.255.0
network 10.2.1.0 mask 255.255.255.0
aggregate-address 10.2.0.0 255.255.254.0 summary-only
exit-address-family
address-family ipv4 vrf ISP-1
neighbor 12.0.0.2 remote-as 666
neighbor 12.0.0.2 local-as 65001 no-prepend replace-as
neighbor 12.0.0.2 activate
neighbor 12.0.0.2 default-originate
no synchronization
bgp router-id 1.1.1.1
network 10.1.0.0 mask 255.255.255.0
network 10.1.1.0 mask 255.255.255.0
aggregate-address 10.1.0.0 255.255.254.0 summary-only
exit-address-family
Vilket ger följande resultat:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
R1#sh ip bgp neighbors 12.0.0.1
BGP neighbor is 12.0.0.1, remote AS 65001, external link
BGP version 4, remote router ID 1.1.1.1
BGP state = Established, up for 00:45:25
Last read 00:00:16, last write 00:00:31, hold time is 180, keepalive interval is 60 seconds
R3#sh ip bgp neighbors 13.0.0.1
BGP neighbor is 13.0.0.1, remote AS 65002, external link
BGP version 4, remote router ID 2.2.2.2
BGP state = Established, up for 00:46:18
Last read 00:00:05, last write 00:00:21, hold time is 180, keepalive interval is 60 seconds
R2#sh ip bgp vpnv4 vrf ISP-1
BGP table version is 60, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 65000:1 (default for vrf ISP-1) VRF Router ID 1.1.1.1
*> 1.1.1.1/32 0.0.0.0 0 32768 ?
*> 2.2.2.2/32 12.0.0.2 0 666 65002 ?
s> 10.1.0.0/24 0.0.0.0 0 32768 i
r> 10.1.0.0/23 0.0.0.0 32768 i
s> 10.1.1.0/24 0.0.0.0 0 32768 i
*> 10.2.0.0/23 12.0.0.2 0 666 65002 i
*> 13.37.0.0/16 0.0.0.0 0 32768 ?
*> 172.16.0.0 12.0.0.2 28416 0 666 i
*> 172.32.0.0/23 12.0.0.2 128256 0 666 i
R2#sh ip bgp vpnv4 vrf ISP-1
BGP table version is 60, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete
Network Next Hop Metric LocPrf Weight Path
Route Distinguisher: 65000:1 (default for vrf ISP-1) VRF Router ID 1.1.1.1
*> 1.1.1.1/32 0.0.0.0 0 32768 ?
*> 2.2.2.2/32 12.0.0.2 0 666 65002 ?
s> 10.1.0.0/24 0.0.0.0 0 32768 i
r> 10.1.0.0/23 0.0.0.0 32768 i
s> 10.1.1.0/24 0.0.0.0 0 32768 i
*> 10.2.0.0/23 12.0.0.2 0 666 65002 i
*> 13.37.0.0/16 0.0.0.0 0 32768 ?
*> 172.16.0.0 12.0.0.2 28416 0 666 i
*> 172.32.0.0/23 12.0.0.2 128256 0 666 i
Vi kan även verifiera att vår transit fungerar som önskat, ISP-1 har följande information för 2.2.2.2/32 som ligger på samma router men under ISP-2s VRF.
1
2
3
4
5
6
7
8
9
R2#sh ip bgp vpnv4 vrf ISP-1 2.2.2.2/32
BGP routing table entry for 65000:1:2.2.2.2/32, version 50
Paths: (1 available, best #1, table ISP-1)
Not advertised to any peer
**666 65002**
12.0.0.2 from 12.0.0.2 (172.16.99.11)
Origin incomplete, localpref 100, valid, external, best
Extended Community: RT:65000:1
mpls labels in/out 31/nolabel
Vackert! VRF-Lite ger oss ett enkelt sätt att segmentera upp en router om vi exempelvis måste separera två avdelningar från varandra som ansluter till en och samma router. Fler läsvärda artiklar om detta finns här: http://packetlife.net/blog/2009/apr/30/intro-vrf-lite/ http://ccieblog.co.uk/mpls/inter-vrf-routing