Dynamic IPv6 routing with Cisco IOS and Quagga on OpenWRT

0.00 avg. rating (0% score) - 0 votes

Here’s how to make dynamic IPv6 routing work between a Cisco IOS router and an OpenWRT Linux Quagga router. I couldn’t find a similar howto anywhere, so I decided to write my own.

I am using OpenWRT Kamikaze 7.09 (kernel 2.4) on an ASUS WL-500gP wireless router. Any IPv6 enabled Cisco router should do.

I assume you have already installed the IPV6 kernel modules and userland tools, and set up static addresses for your interfaces (if you haven’t check out the OpenWRT IPv6 Howto).

I am using SixXS for tunneling an IPv6 /48 prefix over IPv4. Here’s a diagram of my setup:


Install Quagga

To install Quagga, add the Kamikaze 7.06 repository (the 7.09 repository does not have Quagga yet).

If you want to use OSPFv3 for IPv6, install also the ospf6d package:

In this howto, we will use the ripngd daemon because it is easier to set up and good enough for our small network.

Configure Zebra

To create an initial configuration file for the Zebra daemon, create a /etc/quagga/zebra.conf:

You should, of course, customize your passwords (and hostname). Then start Quagga daemons:

Two new processes should be running, the Zebra daemon and the “watchguagga” daemon:

You can now telnet to the default port:

Very Ciscoish, eh? Although the command set is far from “complete”, many commands work like they do on Cisco IOS:

Configure ripngd

The Zebra daemon does not handle any dynamic routing, it just works as a routing information redistributor. It will forward routing information between different dynamic routing daemons (ospf, rip, bgp) and the kernel routing table. Whenever the ripng daemon detects a change in the network’s routing configuration, it will hand down the change to Zebra, which in turn will make a modification to the kernel routing table (which is the actual, effective routing table). If you have another routing daemon process running, Zebra will also notify that daemon about the change.

To configure ripngd, create an initial config:

Then restart quagga:

Configure dynamic routing with RIP:

Cisco IOS Configuration

Next we will have to configure the other participant of the dynamic routing process. I am using a Cisco 877W with Advanced IP Services (you don’t get IPv6 support below that level).

Cisco IOS Configuration:

That’s it! After a while you should see the routes propagated between the two routers:


Leave a Reply