IPv6–RIPNG

image

In this post we will try to explore various  RIPng configuration, RIPng on broadcast networks and NBMA networks, routes filtering, summarization and default route injection into RIPng

Basic configuration

R1:

ipv6 unicast-routing

interface Loopback100
 no ip address
 ipv6 address FC00:1:145:1::1/64
!
interface FastEthernet0/0
 ipv6 enable

interface Serial1/0
 encapsulation frame-relay
 ipv6 enable

R2

ipv6 unicast-routing

interface Loopback100
 no ip address
 ipv6 address FC00:1:123:2::2/64

interface Serial1/0
 no ip address
 encapsulation frame-relay
 ipv6 enable
 

R3


ipv6 unicast-routing

interface Loopback100
 ipv6 address FC00:1:123:3::3/64

interface Serial1/0
 encapsulation frame-relay
 ipv6 enable

R4

ipv6 unicast-routing
!
interface Loopback100
 no ip address
 ipv6 address FC00:1:145:4::4/64
!
interface FastEthernet0/0
 ipv6 enable

R5

ipv6 unicast-routing
!
interface Loopback100
 no ip address
 ipv6 address FC00:1:145:5::5/64

!
interface FastEthernet0/0
 ipv6 enable

As we can see the configuration is straight forward, each router has a loopback interface with ipv6 address and all other connecting interfaces are relying on automatic ipv6 link local addresses using the ipv6 enable command under the interface level

now let’s start configuring RIPng on the broadcast network between R1, R4 and R5

RIPng is configured under the interface level using IPv6 rip name enable

The name is just a local significant identifier that identify this specific RIPng process

so under R1, R4 and R5

interface FastEthernet0/0
 ipv6 rip RIPng enable

now let’s check RIPng on R1 for example

R1(config-line)#do sh ipv rip RIPng
RIP process "RIPng", port 521, multicast-group FF02::9, pid 257
     Administrative distance is 120. Maximum paths is 16
     Updates every 30 seconds, expire after 180
     Holddown lasts 0 seconds, garbage collect after 120
     Split horizon is on; poison reverse is off
     Default routes are not generated
     Periodic updates 1132, trigger updates 2
  Interfaces:
    FastEthernet0/0
    Loopback100
  Redistribution:
    None



and the routing table

R1(config-line)#do sh ipv route rip
IPv6 Routing Table - 5 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:145:4::/64 [120/2]
     via FE80::C003:1BFF:FE98:0, FastEthernet0/0
R   FC00:1:145:5::/64 [120/2]
     via FE80::C004:13FF:FE28:0, FastEthernet0/0

note how the next hope is set to the link local addresses of the neighbor routers R2 and R3, since this is a broadcast network and thanks to IPv6 NDP (Neighbor Discovery Protocol) these addresses can be automatically resolved

let’s try to ping

R4(config-line)#do p FC00:1:145:1::1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FC00:1:145:1::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/28/52 ms

R4(config-line)#do p FC00:1:145:4::4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to FC00:1:145:4::4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 0/2/4 ms

All looks good,

For us to configure RIPng on the frame relay network we will need to configure IPv6 frame relay static maps since there is no inverse arp for IPv6 (IPv6 doesn’t use ARP anyway!)

For simplicity we will configure local manual link local address for R1, R2 and R3 interfaces

R1

R1#show run interface s1/0
Building configuration...

Current configuration : 250 bytes
!
interface Serial1/0
 no ip address
 encapsulation frame-relay
 ipv6 address FE80::1 link-local
 ipv6 rip RIPng enable
 serial restart-delay 0
 frame-relay map ipv6 FE80::3 103 broadcast
 frame-relay map ipv6 FE80::2 102 broadcast

R2

R2#show running-config interface s1/0
Building configuration...

Current configuration : 206 bytes
!
interface Serial1/0
 no ip address
 encapsulation frame-relay
 ipv6 address FE80::2 link-local
 ipv6 enable
 ipv6 rip RIPng enable
 serial restart-delay 0
 frame-relay map ipv6 FE80::1 201 broadcast

R3

R3#show run interface s1/0
Building configuration...

Current configuration : 206 bytes
!
interface Serial1/0
 no ip address
 encapsulation frame-relay
 ipv6 address FE80::3 link-local
 ipv6 rip RIPng enable
 serial restart-delay 0
 frame-relay map ipv6 FE80::1 301 broadcast
end

note that we need the broadcast keyword in the map statement since updates are send to multicast address FF02:9 this can be changed under the RIPng process using this command port X multicast-group YY however neighbor can’t be used as we used to do with RIPv2 to send unicast updates

Now let’s check the routing table on R1 and R2

R1

R1(config-rtr)#do sh ipv6 route rip
IPv6 Routing Table - 7 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:123:2::/64 [120/2]
     via FE80::2, Serial1/0
R   FC00:1:123:3::/64 [120/2]

     via FE80::3, Serial1/0
R   FC00:1:145:4::/64 [120/2]
     via FE80::C003:1BFF:FE98:0, FastEthernet0/0
R   FC00:1:145:5::/64 [120/2]
     via FE80::C004:13FF:FE28:0, FastEthernet0/0

R2

R2#show ipv6 route rip
IPv6 Routing Table - 6 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:145:1::/64 [120/2]
     via FE80::1, Serial1/0
R   FC00:1:145:4::/64 [120/3]
     via FE80::1, Serial1/0
R   FC00:1:145:5::/64 [120/3]
     via FE80::1, Serial1/0

So everything looks good on R1 but on R2 we are not receiving the R3 loopback address and if we would check the routing table of R3 we would have seen that R2 loopback address is not received, this because the split horizon rule that we had in IPv4 distance vector protocols still applies to IPv6 protocols

unlike RIPv2 split horizon is disabled globally under the RIPng process and not per interface, so we need to change this on R1

R1(config-if)#ipv6 router rip RIPng
R1(config-rtr)#no split-horizon

Now lets’ check the routing table on R2

R2#show ipv6 route rip
IPv6 Routing Table - 7 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:123:3::/64 [120/3]
     via FE80::1, Serial1/0

R   FC00:1:145:1::/64 [120/2]
     via FE80::1, Serial1/0
R   FC00:1:145:4::/64 [120/3]
     via FE80::1, Serial1/0
R   FC00:1:145:5::/64 [120/3]
     via FE80::1, Serial1/0

Looks much better now!

Route Filtering

In RIPng we can filter prefixes from entering the routing database using

distribute-lists as we used to do with IPv4 RIP however we can only match prefix list to filter we can’t match access-lists

So let’s say that we want to filter R4 loopback address from entering R2 routing table

we can do that using distribute list

R2(config)#ipv6 prefix-list R4_LOOPBACK seq 5 deny FC00:1:145:4::/64
R2(config)#ipv6 prefix-list R4_LOOPBACK seq 10 permit ::/0 le 128
R2(config)#ipv6 router rip RIPng
R2(config-router)#distribute-list prefix-list R4_LOOPBACK in
 

by not specifying an interface in the distribute-list command we are filtering the prefix to enter the routing database regardless of the interface it’s received on

Now let’s check the RIP routes on R2

R2(config)#do sh ipv6 route rip
IPv6 Routing Table - 6 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:123:3::/64 [120/3]
     via FE80::1, Serial1/0
R   FC00:1:145:1::/64 [120/2]
     via FE80::1, Serial1/0
R   FC00:1:145:5::/64 [120/3]
     via FE80::1, Serial1/0

Excellent that worked!

Metric-Offset

If you remember offset list that we have in IPv4 RIP, we still can offset the metrics for RIPng unfortunately it’s not as modular as it’s in IPv4 RIP where you can match some prefixes and offset their metric, metric offset in IPv6 is applied under the interface and it affects all RIPng updates received on this interface

let’s see this in action, let’s offset all RIP updates coming into R3 S1/0 interface by 3

R3(config)#interf s1/0
R3(config)#ipv6 rip RIPng metric-offset 3

Now let’s check the effect of that

R3(config-if)#do sh ipv route rip
IPv6 Routing Table - 7 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:123:2::/64 [120/5]
     via FE80::1, Serial1/0
R   FC00:1:145:1::/64 [120/4]
     via FE80::1, Serial1/0
R   FC00:1:145:4::/64 [120/5]
     via FE80::1, Serial1/0
R   FC00:1:145:5::/64 [120/5]
     via FE80::1, Serial1/0

As we can see all metric values received on that interface have been increased by 3

This can also used for filtering, by specifying a metric value of 16, this will effectively filter all routes

Summarization:

summarization is almost identical to IPv4 of RIP, where it’s done under the interface level

If we want to summarize R4 and R5 loopback interfaces and send the summary only to R2 and R3

on R1

R1(config)#interf s1/0
R1(config-if)#ipv6 rip RIPng summary-address fc00:1:145::/61

Now let’s see that on R3

R3(config-if)#do sh ipv route rip
IPv6 Routing Table - 5 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   FC00:1:123:2::/64 [120/5]
     via FE80::1, Serial1/0
R   FC00:1:145::/61 [120/4]
     via FE80::1, Serial1/0

note that because the summarized address encompasses R1 loopback  interface this was also supressed from being advertised

Similiar to IPv4 RIP, RIPng doesn’t create a null route when performing summarization

Default-route injection 

We can have a default route injected into RIPng domain using 2 options

default-information originate under interface level , with this option we can use the only keyword so we supress all other RIPng routes and advertise only the default route, OR we can use the originate keyword to advertise the default route and the more specific routes

let’s try this under R1

R1(config)#interf s1/0
R1(config-if)#ipv6 rip RIPng default-information only
 

Now if we check the routing table on R2 and R3 we should see only the default route

R2(config-router)#do sh ipv6 route rip
IPv6 Routing Table - 4 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   ::/0 [120/4]
     via FE80::1, Serial1/0
 

Because this command is under the interface level, R4 and R5 wouldn’t receive the default route from R1

R4#sh ipv6 route rip | in ::/0
R4#

R5#sh ipv6 route rip | in ::/0
R5#

If we change the only keyword on R1 to originate we should be advertising the default route plus the more specific routes

R1(config)#interf s1/0
R1(config-if)#no ipv6 rip RIPng default-information only

R1(config-if)#no ipv6 rip RIPng default-information only

So on R1

R1(config)#interf s1/0
R1(config-if)#ipv6 rip RIPng default-information only
 

now check R1 routing table

R2(config-router)#do sh ipv6 route rip
IPv6 Routing Table - 6 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route, M - MIPv6
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
       D - EIGRP, EX - EIGRP external
R   ::/0 [120/4]
     via FE80::1, Serial1/0
R   FC00:1:145:1::/64 [120/4]
     via FE80::1, Serial1/0
R   FC00:1:145:5::/64 [120/5]
     via FE80::1, Serial1/0

The other way of doing this is just redistributing the default route into the RIPng prcoess

R1(config-if)#no ipv6 rip RIPng default-information originate
R1(config)#ipv6 route ::/0 null 0
R1(config)#ipv6 router rip RIPng
R1(config-rtr)#redistribute static

This will have every other router in the RIPng domain to the have the default router

so if we check the routing table on R2 and R5

R5(config-line)# do sh ipv6 route | in ::/0
R ::/0 [120/2

And R2

R2#  sh ipv6 route | in ::/0
R   ::/0 [120/2]

Comments

Popular posts from this blog

BPDU Filter vs BPDU Guard

BGP Weight Attribute

OSPF–Point To Multipoint Non-Broadcast