[Xorp-users] RIP over GRE issue

Phil Wiggins phil.wiggins at gmail.com
Tue Sep 11 12:52:15 PDT 2012


We have an issue with RIP over GRE which we can resolve with other routers,
but not with XORP.  A file is attached with detailed linux network commands
as well as XORP config.boot files for each node described.

Context:
======
We have three routers (n3, n14 and n20) which connect over an intermediate
network that is statically linked.  The physical interface to the
non-private network is statically routed to its remote private neighbour;
for example, n3 has static routes to n14 and n20, n14 has static routes to
n3 and n20, and n20 has reciprocal routes to n3 and n14..  n3 has an
interface 10.0.4.1, n14 has an interface 10.0.9.1, and n20 has an interface
10.0.0.1.  An external network connects n3, n14, and n20 together.

GRE tunnels:
==========
Each router is linked via GRE tunnels with n3 acting as the central point
of distribution.  Tunnels GRE1 on n3 and GRE2 on n14 are mated and tunnels
GRE5 n3 and GRE6 on n20 are also mated.  GRE1 is 20.0.0.1 and GRE2 is
20.0.0.2 in subnet 20.0.0.0/30 while GRE5 is 20.0.0.5 and GRE6 is 20.0.0.6
in subnet 20.0.0.4/30.  We are running RIP over the GRE tunnels to link the
n3, n14 and n20 routers.

RIP routing:
=========
To establish the RIP routing plane, we have added the gre interfaces n3
(gre1, gre5), n14 (gre2), and n20 (gre6) plus an assortment of local ethxx
interfaces for the attached subnets.  We have deliberately excluded the
statically routed physical interfaces that the GRE tunnel runs over.  For
example, on node n3, eth1 (10.0.4.1) is not declared in xorp, but the gre
interfaces are.

The four tunnel endpoints are pingable.  The ingress interface at each
remote router is pingable (10.0.4.1, 10.0.9.1, 10.0.0.1).  A traceroute
verifies that the path goes over the GRE tunnel in each case.

RIP over GRE issue:
================
Each router (n3, n14, and n20) also has two attached subnets which also run
RIP, with the exception of n3 which has 1 subnet running RIP and 1 subnet
running OSPF.  When running RIP, n3, n14 and n20 see RIP peers from the
attached subnets, but not over the GRE tunnels.

Wireshark was used to instrument the interfaces and we can see well-formed
RIP packets going over the tunnels.  To verify the tunnels further, we
replaced XORP with Quagga which was able to establish RIP peering and then
converged as a network.

I hope that describes the problem well enough.  Thanks for any help that
you can provide.

Phil
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ICSI.Berkeley.EDU/pipermail/xorp-users/attachments/20120911/3c92b61d/attachment.html 
-------------- next part --------------
On node n3
==========
/sbin/ip route add 10.0.0.0/24 via 10.0.4.2
/sbin/ip route add 10.0.9.0/24 via 10.0.4.2

#GRE tunnel on n3
ip tunnel add gre1 mode gre remote 10.0.9.1 local 10.0.4.1 ttl 64
ip link set gre1 up
ip link set gre1 multicast on
ip addr add 20.0.0.1 dev gre1
#ip route add 20.0.0.0/30 dev gre1

#GRE tunnel on n3
ip tunnel add gre5 mode gre remote 10.0.0.1 local 10.0.4.1 ttl 64
ip link set gre5 up
ip link set gre5 multicast on
ip addr add 20.0.0.5 dev gre5
#ip route add 20.0.0.4/30 dev gre5

On node n14
===========
/sbin/ip route add 10.0.0.0/24 via 10.0.9.2
/sbin/ip route add 10.0.4.0/24 via 10.0.9.2

#GRE tunnel on n14
ip tunnel add gre2 mode gre remote 10.0.4.1 local 10.0.9.1 ttl 64
ip link set gre2 up
ip link set gre2 multicast on
ip addr add 20.0.0.2 dev gre2
#ip route add 20.0.0.0/30 dev gre2


On node n20
===========
/sbin/ip route add 10.0.9.0/24 via 10.0.0.2
/sbin/ip route add 10.0.4.0/24 via 10.0.0.2

#GRE tunnel on n20
ip tunnel add gre6 mode gre remote 10.0.4.1 local 10.0.0.1 ttl 64
ip link set gre6 up
ip link set gre6 multicast on
ip addr add 20.0.0.6 dev gre6
#ip route add 20.0.0.4/30 dev gre6


config.boot on node n3
======================
interfaces {
    interface eth0 {
	vif eth0 {
	    address 10.254.80.1 {
		prefix-length: 16
	    }
	    address fe80::200:ff:fe00:0 {
		prefix-length: 64
	    }
	}
    }

    interface eth2 {
	vif eth2 {
	    address 10.0.6.2 {
		prefix-length: 24
	    }
	    address fe80::200:ff:feaa:3a {
		prefix-length: 64
	    }
	}
    }
    interface gre1 {
	vif gre1 {
	    address 20.0.0.1 {
	        prefix-length: 30
	    }
	}
    }
    interface gre5 {
	vif gre5 {
	    address 20.0.0.5 {
	        prefix-length: 30
	    }
	}
    }
}

fea {
    unicast-forwarding4 {
	disable:false
    }
}

protocols {
    ospf4 {
	export: "RIPtoOSPF4"
	router-id: 10.254.80.1
	area 0.0.0.0 {
	    interface eth0 {
		vif eth0 {
		    address 10.254.80.1 {
			priority: 1
			hello-interval: 10
			router-dead-interval: 40
			disable: false
		    }
		}
	    }
	}
    }
    rip {
	export: "OSPF4toRIP"
	interface eth0 {
	    vif eth0 {
		address 10.254.80.1 {
		    disable: false
		}
	    }
	}
	interface eth2 {
	    vif eth2 {
		address 10.0.6.2 {
		    disable: false
		}
	    }
	}
	interface gre1 {
	    vif gre1 {
		address 20.0.0.1 {
		    metric: 1
                    horizon: "split-horizon-poison-reverse"
                    disable: false
                    passive: false
                    accept-non-rip-requests: true
                    accept-default-route: true
                    advertise-default-route: true
                    route-timeout: 180
                    deletion-delay: 120
                    triggered-delay: 3
                    triggered-jitter: 66
                    update-interval: 30
                    update-jitter: 16
                    request-interval: 30
                    interpacket-delay: 50
		}
	    }
	}
	interface gre5 {
	    vif gre5 {
		address 20.0.0.5 {
	            disable: false
		    metric: 1
                    horizon: "split-horizon-poison-reverse"
                    disable: false
                    passive: false
                    accept-non-rip-requests: true
                    accept-default-route: true
                    advertise-default-route: true
                    route-timeout: 180
                    deletion-delay: 120
                    triggered-delay: 3
                    triggered-jitter: 66
                    update-interval: 30
                    update-jitter: 16
                    request-interval: 30
                    interpacket-delay: 50
		}
	    }
	}
    }
}

policy {
    policy-statement RIPtoOSPF4 {
	term 10 {
	    from {
		protocol: "rip"
	    }
	    then {
		external-type: 1
	    }
	}
	term 20 {
	    from {
		protocol: "connected"
	    }
	    then {
		external-type: 1
	    }
	}

    }
}

policy {
    policy-statement OSPF4toRIP {
	term 10 {
	    from {
		protocol: "ospf4"
	    }
	}
	term 20 {
	    from {
		protocol: "connected"
	    }
	}

    }
}

config.boot on node n14
=======================
interfaces {
    interface eth0 {
	vif eth0 {
	    address 10.0.7.2 {
		prefix-length: 24
	    }
	    address fe80::200:ff:feaa:6b {
		prefix-length: 64
	    }
	}
    }
    interface eth1 {
	vif eth1 {
	    address 10.0.8.1 {
		prefix-length: 24
	    }
	    address fe80::200:ff:feaa:6c {
		prefix-length: 64
	    }
	}
    }

    interface gre2 {
	vif gre2 {
	    address 20.0.0.2 {
		prefix-length: 30
	    }
	}
    }
}

fea {
    unicast-forwarding4 {
	disable:false
    }
}
policy {
    policy-statement export-connected {
	term 100 {
	    from {
		protocol: "connected"
	    }
	}
    }
}

protocols {
    rip {
	export: "export-connected"
	interface eth0 {
	    vif eth0 {
		address 10.0.7.2 {
		    disable: false
		}
	    }
	}
	interface eth1 {
	    vif eth1 {
		address 10.0.8.1 {
		    disable: false
		}
	    }
	}

	interface gre2 {
	    vif gre2 {
		address 20.0.0.2 {
		    disable: false
		    metric: 1
                    horizon: "split-horizon-poison-reverse"
                    disable: false
                    passive: false
                    accept-non-rip-requests: true
                    accept-default-route: true
                    advertise-default-route: true
                    route-timeout: 180
                    deletion-delay: 120
                    triggered-delay: 3
                    triggered-jitter: 66
                    update-interval: 30
                    update-jitter: 16
                    request-interval: 30
                    interpacket-delay: 50
		}
	    }
	}
    }
}


config.boot on n20
==================
interfaces {

    interface gre6 {
	vif gre6 {
	    address 20.0.0.6 {
		prefix-length: 30
	    }
	}
    }
    interface eth1 {
	vif eth1 {
	    address 10.0.12.1 {
		prefix-length: 24
	    }
	    address fe80::200:ff:feaa:159 {
		prefix-length: 64
	    }
	}
    }
    interface eth2 {
	vif eth2 {
	    address 10.0.13.1 {
		prefix-length: 24
	    }
	    address fe80::200:ff:feaa:15b {
		prefix-length: 64
	    }
	}
    }
}

fea {
    unicast-forwarding4 {
	disable:false
    }
}
policy {
    policy-statement export-connected {
	term 100 {
	    from {
		protocol: "connected"
	    }
	}
    }
}

protocols {
    rip {
	export: "export-connected"

	interface gre6 {
	    vif gre6 {
		address 20.0.0.6 {
		    metric: 1
                    horizon: "split-horizon-poison-reverse"
                    disable: false
                    passive: false
                    accept-non-rip-requests: true
                    accept-default-route: true
                    advertise-default-route: true
                    route-timeout: 180
                    deletion-delay: 120
                    triggered-delay: 3
                    triggered-jitter: 66
                    update-interval: 30
                    update-jitter: 16
                    request-interval: 30
                    interpacket-delay: 50
		}
	    }
	}
	interface eth1 {
	    vif eth1 {
		address 10.0.12.1 {
		    disable: false
		}
	    }
	}
	interface eth2 {
	    vif eth2 {
		address 10.0.13.1 {
		    disable: false
		}
	    }
	}
    }
}


More information about the Xorp-users mailing list