I have heard of Quagga for sometime but I had never tried it until now. Quagga was installed on my old Core duo, 2GB laptop.
Quagga is a suite of routing daemons, the suite contains these daemons:
1. ospfd – For managing OSPFv2 routing protocol.
2. ospfv6d – For managing OSPFv3 routing protocol.
3. zebra – For managing the entire routing daemon operation, only zebra can assign ip addresses, only zebra can do static route and static default route, the other routing daemons are strictly for specific routing configuration. Hence at anytime at least two daemons must be started if you desire to use dynamic routing protocol.
4. isisd – For managing IS-IS (ipv4)
5. bgpd – For managing BGP.
6. ripd – For managing ripv1 and v2.
7. ripngd – For managing ripng.
Quagga commands are easy to learn, because almost exactly the same as Cisco IOS command syntax. Interestingly autocomplete feature also exists in quagga, as long as the command is not ambiguous you can execute the command without typing in full.
? online help is also available if you want to know the commands, just like a Cisco IOS.
telnet localhost zebra Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello, this is Quagga (version 0.99.18). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password: kmint> kmint> enable kmint# conf t kmint(config)#
Originally I wanted to use the vtysh which is a program shell to unify all the daemons but it is not working.
What I do is to use konsole terminal and open tab for zebra and ospf.
To assign ip address on interface and to check interface on zebra do this:
kmint# sh int Interface eth0 is up, line protocol detection is disabled Description: To master stack port 2 index 2 metric 1 mtu 1500 flags: HWaddr: inet 10.1.1.2/24 broadcast 10.1.1.255 inet6 Interface eth1 is up, line protocol detection is disabled Description: To stack member port 2 index 4 metric 1 mtu 1500 flags: HWaddr: inet 10.1.2.2/24 broadcast 10.1.2.255 inet6 Interface lo is up, line protocol detection is disabled index 1 metric 1 mtu 16436 flags: inet 188.8.131.52/32 inet 127.0.0.1/8 inet6 ::1/128 kmint# kmint# show interface eth1 Interface eth1 is up, line protocol detection is disabled Description: To stack member port 2 index 4 metric 1 mtu 1500 flags: HWaddr: inet 10.1.2.2/24 broadcast 10.1.2.255 inet6 kmint#
If you like to see the full command just use tab, as long as the command is not ambiguous you can abbreviate the command such as above i.e.
sh int and
show interface produce the same results.
kmint# conf t kmint(config)# int eth1 kmint(config-if)# description To member stack port 2 kmint(config-if)# ip address 10.1.2.2/24 kmint(config-if)#
Configuring interface ip address is almost the same as Cisco, quagga uses CIDR notation which is much shorter 🙂
Only one OSPF process is allowed. Here is how ospf is configured with quagga.
kmint(config)# router ospf kmint(config-router)# router-id 184.108.40.206 kmint(config-router)# passive-interface default kmint(config-router)# no passive-interface eth0 kmint(config-router)# no passive-interface eth1 kmint(config-router)# no passive-interface lo kmint(config-router)# network 10.1.1.2/24 area 1 kmint(config-router)# network 10.1.2.2/24 area 1 kmint(config-router)# network 220.127.116.11/32 area 1 kmint(config-router)# end kmint#
Isn’t this cool? 😉 It looks exactly like Cisco IOS command syntax.
Let’s check the routing table with
show ip route in zebra.
kmint# show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route C>* 18.104.22.168/32 is directly connected, lo O 10.1.1.0/24 [110/10] is directly connected, eth0, 00:02:06 C>* 10.1.1.0/24 is directly connected, eth0 O 10.1.2.0/24 [110/10] is directly connected, eth1, 00:01:47 C>* 10.1.2.0/24 is directly connected, eth1 C>* 127.0.0.0/8 is directly connected, lo kmint#
Those entries with “>*” are preferred routes.
show ip route command cannot be executed in ospfd, it can only be executed in zebra, let’s look at the
show ip route command options.
kmint# show ip route bgp Border Gateway Protocol (BGP) connected Connected isis ISO IS-IS (ISIS) kernel Kernel ospf Open Shortest Path First (OSPF) rip Routing Information Protocol (RIP) static Static routes A.B.C.D Network in the IP routing table to display A.B.C.D/M IP prefix /, e.g., 22.214.171.124/8 summary Summary of all routes supernets-only Show supernet entries only kmint# show ip route
What I did was
show ip route ? although the “?” was not shown.
OSPF related command can only be executed on ospfd.
kmint# show ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL 126.96.36.199 1 Full/DR 34.036s 10.1.1.1 eth0:10.1.1.2 0 0 0 188.8.131.52 1 Full/DR 33.625s 10.1.2.1 eth1:10.1.2.2 0 0 0 kmint# kmint# show ip ospf border-routers for this area database Database summary interface Interface information neighbor Neighbor list route OSPF routing table kmint# show ip ospf
It is also possible to change ospf network types under interface.
kmint# conf t kmint(config)# interface eth0 kmint(config-if)# ip ospf network broadcast Specify OSPF broadcast multi-access network non-broadcast Specify OSPF NBMA network point-to-multipoint Specify OSPF point-to-multipoint network point-to-point Specify OSPF point-to-point network kmint(config-if)# ip ospf network
OSPF cost can also be adjusted on interfaces.
kmint(config-if)# ip ospf cost Cost kmint(config-if)# ip ospf cost
To save the configuration.
kmint# wr Configuration saved to /etc/quagga/zebra.conf kmint# kmint(config)# wr Configuration saved to /etc/quagga/ospfd.conf kmint(config)#
Make sure the config files belong to quagga:quaggavty.
Output from Cisco router
03:18:22: %OSPF-5-ADJCHG: Process 1, Nbr 184.108.40.206 on FastEthernet1/0/2 from LOADING to FULL, Loading Done 03:18:34: %OSPF-5-ADJCHG: Process 1, Nbr 220.127.116.11 on FastEthernet2/0/2 from LOADING to FULL, Loading Done Switch#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 18.104.22.168/32 is subnetted, 1 subnets O 22.214.171.124 [110/11] via 10.1.2.2, 00:00:04, FastEthernet2/0/2 [110/11] via 10.1.1.2, 00:00:04, FastEthernet1/0/2 10.0.0.0/24 is subnetted, 2 subnets C 10.1.2.0 is directly connected, FastEthernet2/0/2 C 10.1.1.0 is directly connected, FastEthernet1/0/2 Switch# Switch#ping 126.96.36.199 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 188.8.131.52, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/5/16 ms Switch#
Cisco 3750 switch could ping quagga route server’s loopback.