This can happen, when the tunnel learns the destination of the tunnel through the tunnel itself.
You can save yourself by adding a static route or filter the route with a distribute-list for example.
*Mar 4 23:58:18.091: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to up
*Mar 4 23:58:18.163: %PIM-5-NBRCHG: neighbor 148.1.13.1 UP on interface Tunnel0 (vrf default)
Rack1R3#
*Mar 4 23:58:27.091: %TUN-5-RECURDOWN: Tunnel0 temporarily disabled due to recursive routing
*Mar 4 23:58:28.091: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel0, changed state to down
*Mar 4 23:58:28.111: %PIM-5-NBRCHG: neighbor 148.1.13.1 DOWN on interface Tunnel0 (vrf default) non DR
Here is the setup of the scenario producing the error:
R1:
interface Tunnel0
ip address 148.1.13.1 255.255.255.0
tunnel source Loopback0
tunnel destination 150.1.3.3
R3:
interface Tunnel0
ip address 148.1.13.3 255.255.255.0
tunnel source Loopback0
tunnel destination 150.1.1.1
Both routers have learned through rip about the other destination interface. When the tunnel comes up, the also learn about the destination of the tunnel interface through rip.
To stop this, i have added on both sides the destination of the tunnel interface into a distribute list.
R1:
router rip
distribute-list 3 in Tunnel0
access-list 3 deny 150.1.3.0 0.0.0.255
access-list 3 permit any
R3:
router rip
distribute-list 1 in Tunnel0
access-list 1 deny 150.1.1.0 0.0.0.255
access-list 1 permit any
Source: