Introduction to dynamic routing with Quagga

Download Report

Transcript Introduction to dynamic routing with Quagga

Introduction to dynamic
routing on Linux with Quagga
FVLUG – July 23, 2007
Wim Kerkhoff – [email protected]
Overview






Short introduction to dynamic routing
Introduce Quagga
Installing Quagga on Debian
Example Quagga configurations
Demo
Using Quagga in production
Static Routing
 Simplist and most common method
 Manually configured by humans
 Can’t handle network changes such
as outages
 Doesn’t scale with many network
devices
 Requires least amount of expertise
 Generally used on hosts (PCs,
printers, etc) and simple NAT routers
Dynamic Routing Protocols
 Applications that automatically discover
network destinations
 First they learn what network routes are
directly connected
 Then chat with neighbouring routers to
learn what they know
 The entire network learns about changes
within minutes or even seconds
 Generally used on Internet backbone
routers and in organizations with many
routers
Common routing protocols
 RIP – old one, based on hop count. Timer
system can result in slow convergence
 OSPF – also uses multicast. Calculates
shortest path using costs assigned to each
link. Easy to setup but less knobs then BGP.
Used inside organization
 BGP – uses TCP session. Can do filtering,
route-maps, mangling, etc. Normally used
for communicating with other organizations
and based on policy
Remember: Routing != Forwarding
 Routing directs forwarding
 Routing is the process of selecting paths in
a network
 Forwarding is the relaying of packets
through one network segment to another
by nodes
 So a network device can perform routing,
forwarding, or both
 So you’ll have a broken router if
/proc/sys/net/ipv4/ip_forward is set to 0
even with a beautiful quagga config
What is Quagga?
 Open source routing software
 Forked 4 years ago from Zebra to
form a much better and healthier decentralized community
 Similar syntax and look to Cisco IOS
 No control over OS, unlike IOS
Quagga features








RIPv1 and v2 (IPv4)
RIPng (IPv6)
OSPFv2
OSPFv3
BGPv4 with multiprotocol extension
VTY shell – Cisco like
SNMP
IPv6
Supported Platforms




GNU/Linux 2.2.x and higher
FreeBSD 4.x and higher
NetBSD 1.6 and higher
OpenBSD 2.5 and higher
System Architecture
bgpd
ripd
ospfd
Zebra routing
table manager
Linux Kernel routing table
Routing protocol
daemons
Vtysh
shell
Install / configuration overview
 Install Debian
 apt-get install quagga tcpdump iproute
 Add set VTYSH_PAGER=cat to ~/.bashrc
 Update /etc/quagga/daemons
(zebra,ospfd,bgpd)
 echo username root nopassword > vtysh.conf
 touch zebra.conf ospfd.conf bgpd.conf
 /etc/init.d/quagga start
to start configuring
 Don’t forget to copy run start like on IOS
 Reboot and ensure convergence
 Vtysh
Demo
Internet - 0.0.0.0/0
ISP - 192.168.21.254/24
NAT boundary
Lo – 10.3.3.2/32
Eth0 – 192.168.21.8
Lo – 10.3.3.1/32
Eth1 – 10.3.2.1/30
Eth0 – 10.3.2.2/30
R2
R1
OSPF area 0
Router 1 Configuration
interface eth0
ip address 192.168.21.8/24
!
interface eth1
ip address 10.3.2.1/30
!
interface lo
ip address 10.3.3.1/32
!
router ospf
ospf router-id 10.3.3.1
redistribute connected
network 10.3.2.0/30 area 0.0.0.0
default-information originate always
!
ip route 0.0.0.0/0 192.168.21.254
!
ip forwarding
Router 2 Configuration
interface eth0
ip address 10.3.2.2/30
!
interface lo
ip address 10.3.3.2/32
!
router ospf
ospf router-id 10.3.3.2
redistribute connected
network 10.3.2.0/30 area 0.0.0.0
!
ip forwarding
Routing table on Router 2
quagga2:~# vtysh
Hello, this is Quagga (version 0.99.5).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
quagga2# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
O>*
O
C>*
O>*
C>*
C>*
O>*
0.0.0.0/0 [110/1] via 10.3.2.1, eth0, 1d20h22m
10.3.2.0/30 [110/10] is directly connected, eth0, 1d20h33m
10.3.2.0/30 is directly connected, eth0
10.3.3.1/32 [110/20] via 10.3.2.1, eth0, 1d20h22m
10.3.3.2/32 is directly connected, lo
127.0.0.0/8 is directly connected, lo
192.168.21.0/24 [110/20] via 10.3.2.1, eth0, 1d20h22m
OSPF neighbour details
quagga2# show ip ospf neighbor detail
Neighbor 10.3.3.1, interface address 10.3.2.1
In the area 0.0.0.0 via interface eth0
Neighbor priority is 1, State is Full, 11 state changes
Most recent state change statistics:
Progressive change 1d20h25m ago
Regressive change 1d20h25m ago, due to 1-WayReceived
DR is 10.3.2.2, BDR is 10.3.2.1
Options 2 *|-|-|-|-|-|E|*
Dead timer due in 38.944s
Database Summary List 0
Link State Request List 0
Link State Retransmission List 0
Thread Inactivity Timer on
Thread Database Description Retransmision off
Thread Link State Request Retransmission on
Thread Link State Update Retransmission on
Production tips?
 Make sure you have backups of /etc/quagga,
/etc/network/interfaces, and iptables rules
 Keep templates
 Monitor the router as if it was a server: disk
space, memory, load, etc
 Have redundant routers so that you can
perform OS updates safely with 0 downtime
 Be consistent – stick to your templates
 Run lean & mean – K.I.S.S.
 Be secure
 But make sure you can somehow access the
box even if routing is broken
 Stick to a single protocol if possible
Interior uses of OSPF and BGP
 Managing multiple ISP links (failover /
load balancing)
 Multisites using VPNs and/or private
links
 Failover between servers
Want to experiment?
 Setting up 30 machines to simulate a
30 router network is tough
 Virtualize using Xen, VMWare,
OpenVZ etc
 Linksys WRT54G with DDWRT/OpenWRT
Worthy competitor to $60k Cisco?
 Yes!
 2 x 1U servers with onboard dual GigE
 Servers can be under $1500 each and
perform just fine for 99% of situations
 Need more ports? VLAN trunking to
managed Layer2 switch
 Commodity memory and processors are dirt
cheap and as fast as expensive ASICs
 Each full BGP table needs approx 128 MB
physical RAM
Documentation
 Documentation exists for quagga
 Wiki.quagga.net has more useful examples
 But it’s geared towards quagga itself and
not dynamic routing
 Understanding routing protocols is critical
 Having experience with configuring
RIP/OSPF/BGP on Cisco via CLI helps a lot
 CLI has built-in usage info using the ? mark
like in Cisco IOS
 Zebra/Quagga mailing list archives
 Any Cisco OSPF/BGP syntax guides and
examples
 Google 
Questions/Discussion