In my previous article on split horizon we looked at some of the problems with running a distance vector routing protocol like RIP or EIGRP over a frame relay hub and spoke topology. In this article we will be exploring the problems that split horizon might cause in an ethernet based topology. Specifically we will be looking at redistribution issues and some of the problems secondary addresses can cause.
Split Horizon in an Ethernet Topology.
Once again we will be using dynamips to simulate the following topology:

You can download the dynagen .net file here. We will be looking at R1, R4 and R5 specifically in this article. The R2 and R3 that we used in the previous article will be shut down. Lets have a look at the basic router setup:
R1:
hostname R1
!
interface Loopback0
ip address 1.1.1.1 255.255.255.0
!
interface FastEthernet0/0
ip address 192.168.145.1 255.255.255.0
duplex auto
speed auto
no shut
!
router rip
version 2
passive-interface Loopback0
network 192.168.145.0
no auto-summary
!
R4:
hostname R4
!
interface Loopback0
ip address 4.4.4.4 255.255.255.0
!
!
interface FastEthernet0/0
ip address 192.168.145.4 255.255.255.0
duplex auto
speed auto
no shut
!
router rip
version 2
passive-interface Loopback0
network 192.168.145.0
no auto-summary
!
R5:
hostname R5
!
interface Loopback0
ip address 5.5.5.5 255.255.255.0
!
interface FastEthernet0/0
ip address 192.168.145.5 255.255.255.0
duplex auto
speed auto
no shut
!
router rip
version 2
passive-interface Loopback0
network 192.168.145.0
no auto-summary
!
In the configuration shown above we have R1, R4, and R5 all connected via an Ethernet switch with all the routers in the 192.168.145.0/24 subnet. Lets have a look at the default split horizon mechanism on an Ethernet segment.
R1#sh ip int f0/0
FastEthernet0/0 is up, line protocol is up
Internet address is 192.168.145.1/24
Broadcast address is 255.255.255.255
Address determined by non-volatile memory
MTU is 1500 bytes
Helper address is not set
Directed broadcast forwarding is disabled
Multicast reserved groups joined: 224.0.0.9
Outgoing access list is not set
Inbound access list is not set
Proxy ARP is enabled
Local Proxy ARP is disabled
Security level is default
Split horizon is enabled
ICMP redirects are always sent
ICMP unreachables are always sent
ICMP mask replies are never sent
IP fast switching is enabled
IP fast switching on the same interface is disabled
IP Flow switching is disabled
IP CEF switching is enabled
IP CEF Fast switching turbo vector
IP multicast fast switching is enabled
IP multicast distributed fast switching is disabled
IP route-cache flags are Fast, CEF
Router Discovery is disabled
IP output packet accounting is disabled
IP access violation accounting is disabled
TCP/IP header compression is disabled
RTP/IP header compression is disabled
Policy routing is disabled
Network address translation is disabled
BGP Policy Mapping is disabled
WCCP Redirect outbound is disabled
WCCP Redirect inbound is disabled
WCCP Redirect exclude is disabled
You can see from the output above that Cisco IOS enables Split horizon by default on an Ethernet interface. What this means is that if R1 receives an update for a network in it’s f0/0 interface, it will not send that update out f0/0. This is used to protect against counting to infinity problems with Distance Vector routing protocols. Lets have a look at a few problems this might cause.
Redistribution Problems With Split Horizon
The first problem we will have a look at is redistribution of a static route. The idea here is to set up a static route on R1 to R5’s loopback address. We will then redistribute this static route into RIP. We want R4 to learn this redistributed route through RIP.
Let take a look at the configuration:
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#ip route 5.5.5.0 255.255.255.0 192.168.145.5
R1(config)#router rip
R1(config-router)#redistribute static
R1(config-router)#exit
R1(config)#exit
Pretty simple. Set up the static route and use the redistribute static command under rip to redistribute it. Lets turn on RIP debugging on R1 and have a look at the output.
R1#debug ip rip
RIP protocol debugging is on
R1#
*Mar 1 00:09:57.595: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (192.168.145.1)
*Mar 1 00:09:57.599: RIP: build update entries - suppressing null update
R4#sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
You can see that R1 is not sending anything! It is not redistributing that static route to R4! But why? Is there a problem with my configution? Well it is actually Split Horizon that is stopping that route from going out. How? Well take a look at that static route:
R1(config)#ip route 5.5.5.0 255.255.255.0 192.168.145.5
The problem occurs here because we have told R1 that the next hop for the 5.5.5.0/24 is 192.168.145.5. The router looks at this and says any traffic destined to 5.5.5.0/24 is going to go out f0/0. With split horizon enabled on the f0/0 interface, RIP will suppress this update from going out the same interface that 5.5.5.0/24 is learnt. Even though we technically didn’t learn it “through” that interface, the result is the same. Let’s turn off Split Horizon on that interface and have a look at what happens:
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#no ip split-horizon
R1#debug ip rip
RIP protocol debugging is on
R1#
*Mar 1 00:12:45.331: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (192.168.145.1)
*Mar 1 00:12:45.335: RIP: build update entries
*Mar 1 00:12:45.335: 5.5.5.0/24 via 192.168.145.5, metric 1, tag 0
*Mar 1 00:12:45.335: 192.168.145.0/24 via 0.0.0.0, metric 1, tag 0
R4#sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
5.0.0.0/24 is subnetted, 1 subnets
R 5.5.5.0 [120/1] via 192.168.145.5, 00:00:28, FastEthernet0/0
R4#
Awesome! You can see above that R4 has learn’t about the 5.5.5.0/24 route.
Secondary Addressing and Split Horizon
The example above is actually very similar to another case where Split Horizon causes problems, but before we get into that lets clean up our previous example.
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#router rip
R1(config-router)#no redistribute static
R1(config-router)#exit
R1(config)#no ip route 5.5.5.0 255.255.255.0 192.168.145.5
R1(config)#int f0/0
R1(config-if)#ip split-horizon
R1(config)#exit
R1#
R4#sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
Okay, that should be fine. R1 is no longer redistributing a static route and R4 no longer has the route to the 5.5.5.0/24 network.
What we will be doing here to demonstrate this problem is assigning a secondary address to R1’s f0/0 interface. We will then advertise this into RIP with the hope that it shows up in R4 and R5’s route table. Simple enough, lets have a look at the configuration.
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#ip address 192.168.99.1 255.255.255.0 secondary
R1(config-if)#router rip
R1(config-router)#network 192.168.99.0
R1(config-router)#exit
R1(config)#exit
R4#sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
You can see with the configuration above we have configured a secondary address, 192.168.99.1/24 on R1’s f0/0. This is then advertised int RIP. However, upon examination of R4’s route table this route is not showing up. Why not? Lets turn on debugging on R1 and see if that gives us any clues.
R1#debug ip rip
RIP protocol debugging is on
R1#
*Mar 1 00:54:31.179: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (192.168.145.1)
*Mar 1 00:54:31.183: RIP: build update entries - suppressing null update
*Mar 1 00:54:31.187: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (192.168.99.1)
*Mar 1 00:54:31.187: RIP: build update entries - suppressing null update
R1#
According to R1, it has nothing to do so it sends no update! Huh? What is the problem here? Split horizon! This example is actually very similar to the redistribution problem we saw above. The next hop for R1’s 192.168.99.1/24 address is actually out f0/0. R1 thinks it has “learnt” it through that interface. With Split horizon, RIP will suppress this update from going out that same interface!
Lets disable split horizon and take a look if that solves our problem.
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int f0/0
R1(config-if)#no ip split-horizon
R1#
*Mar 1 00:55:27.771: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (192.168.145.1)
*Mar 1 00:55:27.775: RIP: build update entries
*Mar 1 00:55:27.775: 192.168.99.0/24 via 0.0.0.0, metric 1, tag 0
*Mar 1 00:55:27.779: 192.168.145.0/24 via 0.0.0.0, metric 1, tag 0
*Mar 1 00:55:27.783: RIP: sending v2 update to 224.0.0.9 via FastEthernet0/0 (192.168.99.1)
*Mar 1 00:55:27.783: RIP: build update entries
*Mar 1 00:55:27.787: 192.168.99.0/24 via 0.0.0.0, metric 1, tag 0
*Mar 1 00:55:27.787: 192.168.145.0/24 via 0.0.0.0, metric 1, tag 0
R1#
You can see above that 192.168.99.0/24 is now being advertised out R1’s f0/0. This route should now show up on R4 and R5’s route table.
R4#sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
R 192.168.99.0/24 [120/1] via 192.168.145.1, 00:00:22, FastEthernet0/0
Cool! It worked!
What about EIGRP?
EIGRP is an advanced distance vector protocol and also has the same limitations regarding split horizon. Lets configure the same secondary address example above but this time using EIGRP as the routing protocol.
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#no router rip
R1(config)#int f0/0
R1(config-if)#ip split-horizon
R1(config-if)#exit
R1(config)#router eigrp 145
R1(config-router)#network 192.168.145.0
R1(config-router)#network 192.168.99.0
R1(config-router)#no auto-summary
R4#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R4(config)#no router rip
R4(config)#router eigrp 145
R4(config-router)#network 192.168.145.0
R4(config-router)#no auto-summary
R5#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R5(config)#no router rip
R5(config)#router eigrp 145
R5(config-router)#no auto-summary
R5(config-router)#network 192.168.145.0
You can see above that we have reconfigured the ethernet segment to use EIGRP as its routing protocol. A secondary address of 192.168.99.1/24 is still configured on R1’s f0/0 interface. This has been advertised into EIGRP using the network statement shown above. Lets’ have a look at R4’s routing table to see that route shows up.
R4(config-router)#do sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
Nope. The 192.168.99.0/24 secondary interface on R1 has not been propogated to R4. Lets turn of Split horizon and have a look at what happens.
R1(config)#int f0/0
R1(config-if)#no ip split-horizon eigrp 145
R1(config-if)#exit
R4#sh ip route
Codes: C - connected, S - static, 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
i - IS-IS, su - IS-IS summary, 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
4.0.0.0/24 is subnetted, 1 subnets
C 4.4.4.0 is directly connected, Loopback0
C 192.168.145.0/24 is directly connected, FastEthernet0/0
D 192.168.99.0/24 [90/30720] via 192.168.145.1, 00:00:09, FastEthernet0/0
R4#
You can see above that we used the no ip split-horizon eigrp command instead of the no ip split-horizon command to disable split horizon with EIGRP. Once split horizon is disabled it shows up in R4’s routing table exactly like it did when we disabled split horizon with RIP.
HTH. Now back to labs!
Summary:
Resources:
[...] http://ardenpackeer.com/routing-protocols/tutorial-troubleshooting-split-horizon-issues-part-2/ [...]