IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Quagga és un animal extingit que era una subespecie de la Zebra. http://www.quagga.net/

Quagga és una aplicació d'encaminament Open Source basat en el router Zebra el desenvolupament del qual és va aturar al 2003. Quagga suporta els protocols d'encaminament més utilitzats com RIP, OSPF o BGP i es pot instal·lar en qualsevol sistema Linux amb un kernel 2.4 o superior.

L'origen del nom de l'aplicació és un joc de paraules i té relació amb el software del que prové Quagga--> GNU Zebra. Quagga és el nom d'un animal extingit que era una subespècie de la Zebra

La interfície de línia de comandes de Quagga és molt similar a Cisco IOS.

Arquitectura

Quagga es compon de múltiples dimonis:

Cada dimoni té el seu propi fitxer de configuració (es pot canviar la configuració per tenir tota la configuració en un sol fitxer) i una interfície de terminal a la qual es pot accedir per Telnet.

L'eina vtysh es proporcionada per Quagga per tal de configurar el router des de localhost utilitzant una única interfície.

Quagga funciona de forma independent del sistema operatiu sobre el qual està instal·lat a diferència d'altres sistemes de programari lliure com Vyatta o rutes comercials on el sistema operatiu i el mecanisme d'enrutament estan construïts de forma conjunta.

Cal tenir en compte que Quagga només ofereix capacitat d'encaminament i funcionalitat associades com llistes d'accés o mapes de rutes. No ofereix cap altre funcionalitat no relacionada amb l'encaminament com servidors DHCP, DNS, NTP però aquests es poden activar al sistema operatiu.

Protocols i ports

La llista de ports és:

Els podeu consultar al fitxer services:

$ cat /etc/services | grep 26
...
zebrasrv	2600/tcp			# zebra service
zebra		2601/tcp			# zebra vty
ripd		2602/tcp			# ripd vty (zebra)
ripngd		2603/tcp			# ripngd vty (zebra)
ospfd		2604/tcp			# ospfd vty (zebra)
bgpd		2605/tcp			# bgpd vty (zebra)
ospf6d		2606/tcp			# ospf6d vty (zebra)
ospfapi		2607/tcp			# OSPF-API
isisd		2608/tcp			# ISISd vty (zebra)

No confondre amb els ports de cada protocol, per exemple BGP utilitza el port 179 tal i com podeu veure si executeu:

$ cat /etc/services | grep bgp
bgp		179/tcp				# Border Gateway Protocol
bgp		179/udp
bgpd		2605/tcp			# bgpd vty (zebra)

Requeriments i dependències

$ apt-cache depends quagga
quagga
 Depèn: libc6
 Depèn: libcap2
 Depèn: libpam0g
 Depèn: libpcre3
 Depèn: libreadline6
 Depèn: logrotate
 Depèn: iproute
|Depèn: debconf
 Depèn: <debconf-2.0>
   cdebconf
   debconf
 Predepèn: adduser
 Suggereix: snmpd
 Entra en conflicte: <zebra>
 Entra en conflicte: <zebra-pj>
 Reemplaça: <zebra>
 Reemplaça: <zebra-pj>


Instal·lació

$ sudo apt-get install quagga

Fitxers instal·lats

$ dpkg -L quagga
/.
/etc
/etc/logrotate.d
/etc/logrotate.d/quagga
/etc/pam.d
/etc/pam.d/quagga
/etc/init.d
/etc/init.d/quagga
/etc/quagga
/etc/quagga/daemons
/etc/quagga/debian.conf
/var
/var/log
/var/log/quagga
/usr
/usr/share
/usr/share/doc
/usr/share/doc/quagga
/usr/share/doc/quagga/tools
/usr/share/doc/quagga/tools/zebra.el
/usr/share/doc/quagga/tools/zc.pl
/usr/share/doc/quagga/tools/rrcheck.pl
/usr/share/doc/quagga/tools/rrlookup.pl
/usr/share/doc/quagga/tools/multiple-bgpd.sh
/usr/share/doc/quagga/tools/mrlg.cgi.gz
/usr/share/doc/quagga/examples
/usr/share/doc/quagga/examples/bgpd.conf.sample
/usr/share/doc/quagga/examples/ospf6d.conf.sample
/usr/share/doc/quagga/examples/zebra.conf.sample
/usr/share/doc/quagga/examples/ripd.conf.sample
/usr/share/doc/quagga/examples/ripngd.conf.sample
/usr/share/doc/quagga/examples/ospfd.conf.sample
/usr/share/doc/quagga/examples/bgpd.conf.sample2
/usr/share/doc/quagga/examples/vtysh.conf.sample
/usr/share/doc/quagga/examples/isisd.conf.sample
/usr/share/doc/quagga/changelog.gz
/usr/share/doc/quagga/copyright
/usr/share/doc/quagga/README.Debian.gz
/usr/share/doc/quagga/README.Debian.Woody
/usr/share/doc/quagga/changelog.Debian.gz
/usr/share/doc/quagga/README.Debian.MD5
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/quagga
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/isisd.8.gz
/usr/share/man/man8/ospf6d.8.gz
/usr/share/man/man8/ospfd.8.gz
/usr/share/man/man8/ripngd.8.gz
/usr/share/man/man8/zebra.8.gz
/usr/share/man/man8/bgpd.8.gz
/usr/share/man/man8/ripd.8.gz
/usr/share/man/man1
/usr/share/man/man1/vtysh.1.gz
/usr/share/snmp
/usr/share/snmp/mibs
/usr/share/snmp/mibs/GNOME-PRODUCT-ZEBRA-MIB
/usr/include
/usr/include/quagga
/usr/include/quagga/sockunion.h
/usr/include/quagga/sockopt.h
/usr/include/quagga/memory.h
/usr/include/quagga/checksum.h
/usr/include/quagga/memtypes.h
/usr/include/quagga/thread.h
/usr/include/quagga/stream.h
/usr/include/quagga/distribute.h
/usr/include/quagga/privs.h
/usr/include/quagga/str.h
/usr/include/quagga/getopt.h
/usr/include/quagga/smux.h
/usr/include/quagga/version.h
/usr/include/quagga/vector.h
/usr/include/quagga/workqueue.h
/usr/include/quagga/network.h
/usr/include/quagga/buffer.h
/usr/include/quagga/routemap.h
/usr/include/quagga/zassert.h
/usr/include/quagga/log.h
/usr/include/quagga/md5.h
/usr/include/quagga/pqueue.h
/usr/include/quagga/if_rmap.h
/usr/include/quagga/ospfd
/usr/include/quagga/ospfd/ospfd.h
/usr/include/quagga/ospfd/ospf_dump.h
/usr/include/quagga/ospfd/ospf_opaque.h
/usr/include/quagga/ospfd/ospf_asbr.h
/usr/include/quagga/ospfd/ospf_ism.h
/usr/include/quagga/ospfd/ospf_lsa.h
/usr/include/quagga/ospfd/ospf_nsm.h
/usr/include/quagga/ospfd/ospf_api.h
/usr/include/quagga/ospfd/ospf_lsdb.h
/usr/include/quagga/plist.h
/usr/include/quagga/sigevent.h
/usr/include/quagga/vty.h
/usr/include/quagga/zclient.h
/usr/include/quagga/filter.h
/usr/include/quagga/command.h
/usr/include/quagga/zebra.h
/usr/include/quagga/jhash.h
/usr/include/quagga/if.h
/usr/include/quagga/linklist.h
/usr/include/quagga/table.h
/usr/include/quagga/route_types.h
/usr/include/quagga/prefix.h
/usr/include/quagga/ospfapi
/usr/include/quagga/ospfapi/ospf_apiclient.h
/usr/include/quagga/keychain.h
/usr/include/quagga/hash.h
/usr/bin
/usr/bin/vtysh
/usr/lib
/usr/lib/libospfapiclient.so.0.0.0
/usr/lib/libospfapiclient.a
/usr/lib/libospf.so.0.0.0
/usr/lib/libzebra.so.0.0.0
/usr/lib/libospf.a
/usr/lib/libospfapiclient.la
/usr/lib/libospf.la
/usr/lib/libzebra.a
/usr/lib/libzebra.la
/usr/lib/quagga
/usr/lib/quagga/zebra
/usr/lib/quagga/isisd
/usr/lib/quagga/ripd
/usr/lib/quagga/ospf6d
/usr/lib/quagga/ripngd
/usr/lib/quagga/bgpd
/usr/lib/quagga/ospfd
/usr/lib/quagga/watchquagga
/usr/lib/quagga/ospfclient
/usr/lib/libzebra.so
/usr/lib/libospfapiclient.so.0
/usr/lib/libospf.so.0
/usr/lib/libospf.so
/usr/lib/libzebra.so.0
/usr/lib/libospfapiclient.so

Ordres

/usr/bin/vtysh

Cada protocol que suporta quagga té el seu propi port (vegeu Protocols i Ports) i hi podeu accedir utilitzant Telnet, per exemple per accedir a ospf:

$ telnet localhost 2604

Com que pot ser que no sigui gaire útil haver de configurar cada dimoni per una interfície telnet diferent, podeu utilitzar vtysh per configurar-ho tot des de una mateixa interfície. Per poder utilitzar vtysh cal crear primer el seu fitxer de configuració:

$ sudo cp /usr/share/doc/quagga/examples/vtysh.conf.sample /etc/quagga/vtysh.conf

Per defecte el fitxer conté:

$ cat /etc/quagga/vtysh.conf
!
! Sample configuration file for vtysh.
!
service integrated-vtysh-config
!hostname quagga-router
username root nopassword
!

Quan s'utilitza vtysh aquest fitxer de configuració ha d'existir i l'heu de configurar de la següent forma per seguretat:

$ sudo chown quagga:quaggavty /etc/quagga/vtysh.conf
$ sudo chmod 660 /etc/quagga/vtysh.conf

De fet de forma més genèrica podeu fer:

$ sudo chown quagga.quaggavty /etc/quagga/*.conf
$ sudo chmod 640 /etc/quagga/*.conf
$ sudo /etc/init.d/quagga restart

També cal consultar el fitxer /etc/quagga/debian.conf per tal de comprovar que tingui l'opció:

vtysh_enable=yes

per tal de poder utilitzar vtysh.

L'opció service integrated-vtysh-config provoca que quan es guarda la configuració mitjançant vtysh es guarda les configuracions de tots els protocols en un mateix fitxer (normalment /etc/quagga/Quagga.conf). Amb aquest paràmetre activat al guardar veureu quelcom similar a:

$ vtysh
quagga-router#write
Configuration saved to /etc/quagga/Quagga.conf


Si l'opció service integrated-vtysh-config està desactivada aleshores les configuracions es guarden en fitxers diferents per a cada protocol.

Aleshores el resultat de guardar és:

$ vtysh
quagga-router#write
Configuration saved to /etc/quagga/zebra.conf
Configuration saved to /etc/quagga/ospfd.conf

NOTA: HI ha qui recomana desactivar l'opció "service integrated-vtysh-config" per que si aquesta configuració està activada en cas de un error de sisntaxi deixaran de funcionar tots els dimonis. Amb fitxers separats un error de sintaxi només afecta a un protocol específic

Altres configuracions:

Es recomana establir la variable:

VTYSH_PAGER=more

al fitxer /etc/environment per indicar que more serà el paginador utilitzat per vtysh. Sinó ho feu això al iniciar vtysh sortirà un "(END)" parpadejant a la part inferior-esquerre i haureu de prémer q per a continuar.

NOTA: Per activar els canvis de variables d'entorn cal sortir i tornar a entrar sessió d'usuari

Per utilitzar vtysh només cal executar:

$ vtysh
Hello, this is Quagga (version 0.99.6).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

quagga-router#

per executar una ordre concreta:

$ vtysh -c "command"

Per exemple:

$ vtysh -c "show ip route"

Mostrarà la taula de rutes de Quagga.

Es poden utilitzar les ordre ping i traceroute des de dins de vtysh sempre i quan estas eines estiguin instal·lades:

$ sudo apt-get install traceroute

/etc/init.d/quagga. Control del servei.

Cada cop que feu modificacions a Quagga haureu d'aplicar els canvis reiniciant el servidor:

$ sudo /etc/init.d/quagga restart
Stopping Quagga daemons (prio:0): (zebra) (bgpd) (ripd) (ripngd) (ospfd) (ospf6d) (isisd).
Removing all routes made by zebra.
Loading capability module if not yet done.
Starting Quagga daemons (prio:10):.

Les opcions possibles són:

$ sudo /etc/init.d/quagga
Usage: /etc/init.d/quagga {start|stop|restart|force-reload|<priority>} [daemon]
      E.g. '/etc/init.d/quagga 5' would start all daemons with a prio 1-5.
      Read /usr/share/doc/quagga/README.Debian for details.

Consulteu el fitxer /etc/quagga/daemons i veureu com els dimonis poden estar actius per defecte o tenir una prioritat i aleshores podem jugar donant una opció al fitxer init. P. ex:

$ sudo /etc/init.d/quagga 5 

Iniciarà tots els dimonis que tinguin una prioritat entre 1 i 5.

Cal tenir en compte que per tal que s'inicien els diferents dimonis que suporta Quagga cal modificar el fitxer /etc/quagga/daemons:

$ sudo cat /etc/quagga/daemons
# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
#   0, "no"  = disabled
#   1, "yes" = highest priority
#   2 .. 10  = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION: 
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
#
zebra=yes
bgpd=yes
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no 

IMPORTANT: Cal tenir en compte que els dimonis no s'executaran si no existeix fitxer de configuració. Per exemple:

$ sudo /etc/init.d/quagga restart
Stopping Quagga daemons (prio:0): (bgpd) (zebra) (ripd) (ripngd) (ospfd) (ospf6d) (isisd).
Removing all routes made by zebra.
Loading capability module if not yet done.
Starting Quagga daemons (prio:10): zebra bgpd (not started without config file).

Observeu com en cas anterior s'arranca el servidor zebra però no el de BGP per que no hi ha fitxer de configuració.


Monitoritzar l'estat un dimoni quagga i aturar-lo si es penja

Podeu utilitzar per tal de veure si està en funcionament quagga:

$ sudo ps -ef | grep quagga
UID 	PID 	PPID 	C 	STIME 	TTY 	TIME 	CMD
quagga 	4632 	1 	0 	22:25 	? 	00:00:00 	/usr/lib/quagga/ospfd --daemon
quagga 	4636 	1 	0 	22:25 	? 	00:00:00 	/usr/lib/quagga/zebra --daemon

Si un dimoni de quagga es bloqueja el podeu aturar amb:

$ sudo kill -9 "UID number"

Configuració

Els fitxers de configuració de quagga són els següents:

/etc/quagga/*.conf

On:

Cada dimoni té el seu propi fitxers de configuració i si voleu iniciar un dimoni ha de tenir fitxer de configuració (encara que sigui buit i utilitzi les opcions per defecte.)

Per defecte els fitxers de cada dimoni no existeixen inicialment, però els podeu crear a partir dels exemples, per exemple per crear el fitxer de configuració del gestor de la taula de rutes del kernel:

$ sudo cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf

IMPORTANT: Cal establir els permisos correctament!:

$ sudo chown quagga.quaggavty /etc/quagga/*.conf
$ sudo chmod 640 /etc/quagga/*.conf

O per a OSPF:

$ sudo cp /usr/share/doc/quagga/examples/ospfd.conf.sample /etc/quagga/ospfd.conf

Al utilitzar els exemples ja podreu accedir a la interfície de configuració del dimoni per Telnet amb vtsh

Recordeu que per aplicar els canvis cal reiniciar el servei:

$ sudo /etc/init.d/quagga restart

Ara hi ha dos formes d'accedir a la configuració:

Accés per Telnet

Cada dimoni és diferent, per accedir al dimoni zebra:

$ 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: 

La paraula de pas és la definida al fitxer de configuració /etc/quagga/zebra.conf. Com podeu veure cada servei té un port, podeu utilitzar el numero de port o el nom del port segons el fitxer /etc/services:

$ cat /etc/services | grep zebra
zebrasrv	2600/tcp			# zebra service
zebra		2601/tcp			# zebra vty
ripd		2602/tcp			# ripd vty (zebra)
ripngd		2603/tcp			# ripngd vty (zebra)
ospfd		2604/tcp			# ospfd vty (zebra)
bgpd		2605/tcp			# bgpd vty (zebra)
ospf6d		2606/tcp			# ospf6d vty (zebra)
isisd		2608/tcp			# ISISd vty (zebra)

Per veure quines comandes podeu aplicar escriviu ?

> 
 echo      Echo a message back to the vty
 enable    Turn on privileged mode command
 exit      Exit current mode and down to previous mode
 help      Description of the interactive help system
 list      Print command list
 quit      Exit current mode and down to previous mode
 show      Show running system information
 terminal  Set terminal line parameters
 who       Display who is on vty

NOTA: Les comandes poden ser diferents segons el dimoni

Un cop escolliu una comanda concreta per poder consultar les opcions d'aquella comanda escriviu:

> comanda ?

Per exemple:

> show ?
 debugging    Zebra configuration
 history      Display the session command history
 interface    Interface status and configuration
 ip           IP information
 ipv6         IPv6 information
 logging      Show current logging configuration
 memory       Memory statistics
 table        default routing table to use for all clients
 thread       Thread information
 version      Displays zebra version
 work-queues  Work Queue information

I així successivament, per exemple:

> show ip ?
 forwarding   IP forwarding status
 prefix-list  Build a prefix list
 protocol     IP protocol filtering status
 route        IP routing table

Un cop ja sabeu la comanda la podeu escriure. Per exemple per consultar la taula de rutes:

> show ip route 
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
      I - ISIS, B - BGP, > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.0.1, eth0
K>* 10.0.0.0/8 via 10.36.253.1, eth1
C>* 10.36.253.0/27 is directly connected, eth1
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0

Cal tenir en compte que per accedir a les comandes amb privilegis (com per exemple write) cal activar el mode privilegiat amb l'ordre enable:

> enable
Password: 
# 
 clear      Reset functions
 configure  Configuration from vty interface
 copy       Copy configuration
 debug      Debugging functions (see also 'undebug')
 disable    Turn off privileged mode command
 echo       Echo a message back to the vty
 end        End current mode and change to enable mode.
 exit       Exit current mode and down to previous mode
 help       Description of the interactive help system
 list       Print command list
 logmsg     Send a message to enabled logging destinations
 no         Negate a command or set its defaults
 quit       Exit current mode and down to previous mode
 show       Show running system information
 terminal   Set terminal line parameters
 who        Display who is on vty
 write      Write running configuration to memory, network, or terminal

Com podeu veure canvia el prompt a # i apareixen més comandes possibles.

Recursos:

Accés per vtysh

Consulteu vtysh.

Activar l'encaminament. ip_forward

No us oblideu que si la màquina té múltiples targetes heu d'activar el ip_forwarding. Consulteu Encaminament. Podeu comprovar el ip_forwarding des de quagga amb:

$ vtysh
# show ip forwarding

Fitxers de configuració

Els fitxers instal·lats són:

$ dpkg -L quagga | grep etc
/etc
/etc/logrotate.d
/etc/logrotate.d/quagga
/etc/pam.d
/etc/pam.d/quagga
/etc/init.d
/etc/init.d/quagga
/etc/quagga
/etc/quagga/daemons
/etc/quagga/debian.conf

Però a més cal tenir en compte que poden haver-hi més fitxers. Podeu trobar exemples a la carpeta /usr/share/doc/quagga/examples/:

$ ls -la /usr/share/doc/quagga/examples
total 44
drwxr-xr-x 2 root root 4096 2012-01-12 11:09 .
drwxr-xr-x 4 root root 4096 2012-01-12 11:17 ..
-rw-r--r-- 1 root root  582 2011-10-12 16:36 bgpd.conf.sample
-rw-r--r-- 1 root root 2801 2011-10-12 16:36 bgpd.conf.sample2
-rw-r--r-- 1 root root  805 2011-10-12 16:36 isisd.conf.sample
-rw-r--r-- 1 root root 1110 2011-10-12 16:36 ospf6d.conf.sample
-rw-r--r-- 1 root root  182 2011-10-12 16:36 ospfd.conf.sample
-rw-r--r-- 1 root root  422 2011-10-12 16:36 ripd.conf.sample
-rw-r--r-- 1 root root  390 2011-10-12 16:36 ripngd.conf.sample
-rw-r--r-- 1 root root  126 2011-10-12 16:36 vtysh.conf.sample
-rw-r--r-- 1 root root  385 2011-10-12 16:36 zebra.conf.sample

/etc/quagga/

Originalment el paquet Debian instal·la els següents fitxers (provat a una Ubuntu Server 11.10 )

$ ls -la /etc/quagga/
total 16
drwxrwxr-x  2 quagga quaggavty 4096 2012-01-12 11:09 .
drwxr-xr-x 94 root   root      4096 2012-01-12 11:11 ..
-rw-r--r--  1 root   root       848 2011-10-12 16:36 daemons
-rw-r--r--  1 root   root       471 2011-10-12 16:36 debian.conf

Consulteu:

/etc/quagga/daemons
/etc/quagga/debian.conf

/etc/pam.d/quagga

Cal tenir en compte que la versió de Debian/Ubuntu utilitza PAM:

$ cat /etc/pam.d/quagga
# Any user may call vtysh but only those belonging to the group quaggavty can
# actually connect to the socket and use the program.
auth	sufficient	pam_permit.so

És a dir que cal ser del grup quaggavty per tal de poder utilitzar l'ordre vtysh.

/etc/quagga/daemons

Inicialment el contingut del fitxer és:

$ cat /etc/quagga/daemons
# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
#   0, "no"  = disabled
#   1, "yes" = highest priority
#   2 .. 10  = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION: 
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
#
zebra=no
bgpd=no
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no 

És a dir, per defecte no hi ha cap servidor d'encaminament activat i ni tan sols el gestor zebra.

/etc/quagga/debian.conf

Per defecte els dimonis quagga només escolten la interfície de loopback (IP 127.0.0.1) de forma que només podeu fer un Telnet als dimonis des de la mateixa màquina on heu instal·lat Quagga i no hi podreu accedir de forma remota (o us caldrà primer fer un SSH al servidor i després un telnet!). Aquesta configuració per defecte la teniu al fitxer:

$ cat /etc/quagga/debian.conf
#
# If this option is set the /etc/init.d/quagga script automatically loads
# the config via "vtysh -b" when the servers are started. 
# Check /etc/pam.d/quagga if you intend to use "vtysh"!
#
vtysh_enable=yes
zebra_options=" --daemon -A 127.0.0.1"
bgpd_options="  --daemon -A 127.0.0.1"
ospfd_options=" --daemon -A 127.0.0.1"
ospf6d_options="--daemon -A ::1"
ripd_options="  --daemon -A 127.0.0.1"
ripngd_options="--daemon -A ::1"
isisd_options=" --daemon -A 127.0.0.1"

NOTA: L'accés remot per Telnet pot ser útil per accedir a Quagga des de altres dispositius com una routerboard però també cal recordar que Telnet no és precisament un protocol segur (vegeu Ettercap i Eines de hacking)

Per activar l'accés remot elimineu l'opció -A del fitxer debian.conf. Per exemple:

zebra_options=" --daemon -A"
bgpd_options="  --daemon -A "
ospfd_options=" --daemon -A"
...

L'opció:

vtysh_enable=yes

És necessària per tal de poder utilitzar vtysh

Recordeu de reiniciar el servidor Quagga per aplicar els canvis:

$ sudo etc/init.d/quagga restart

/etc/quagga/Quagga.conf

Aquest fitxers s'utilitza quan està activa l'opció service integrated-vtysh-config al fitxer /etc/quagga/vtysh.conf. Vegeu també vtysh.

Conté tota la configuració de quagga per a tots els dimonis.

/etc/quagga/zebra.conf

Aquest és el fitxers de configuració del dimoni principal de quagga (zebra és el nom de l'aplicació de la qual bé quagga). El més habitual és crear aquest fitxer a partir del fitxer d'exemple que es proporciona el paquet Debian:

$ sudo cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf

Per defecte el fitxer conté el següent:

NOTA: Les línies que comencen per ! són comentaris

$ sudo cat /etc/quagga/zebra.conf 
! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
!
hostname Router
password zebra
enable password zebra
!
! Interface's description. 
!
!interface lo
! description test of desc.
!
!interface sit0
! multicast 

!
! Static default route sample.
!
!ip route 0.0.0.0/0 203.181.89.241
!
!log file /var/log/quagga/zebra.log

Com podeu veure en aquest fitxer podeu donar un nom al encaminador amb la variable hostname:

hostname NOMDELROUTER

Com podeu veure hi ha dos paraules de pas, una és per accedir al mode consultar i l'altre és per accedir al mode privilegiat (ordre enable)

Per a més informació consulteu:

http://www.quagga.net/docs/quagga.html#SEC16

/etc/quagga/bgpd.conf

Fitxer de configuració del protocol d'encaminament dinàmic BGP

Cas Pràctic utilitzant el protocol BGP amb un servidor Quagga: enllaç

/etc/quagga/ospfd.conf

exemple:

!
! Zebra configuration saved from vty
!   2012/03/27 20:15:03
!
hostname ospfd
password zebra
log file /var/log/quagga/ospfd.log
log stdout
!
!
!
interface eth0
!
interface eth1
!
interface lo
!
router ospf
 network 10.0.0.160/27 area 0.0.0.0
 network 172.16.20.0/30 area 0.0.0.0
!
line vty
!

/etc/quagga/ospf6d.conf

/etc/quagga/ripd.conf

/etc/quagga/ripngd.conf

Exemples

Consultar la versió de quagga

$ apt-cache policy quagga
quagga:
 Instal·lat: 0.99.17-1ubuntu0.1
 Candidat:   0.99.17-1ubuntu0.1
 Taula de versió:
*** 0.99.17-1ubuntu0.1 0
       500 http://es.archive.ubuntu.com/ubuntu/ maverick-updates/main amd64 Packages
       500 http://security.ubuntu.com/ubuntu/ maverick-security/main amd64 Packages
       100 /var/lib/dpkg/status
    0.99.17-1 0
       500 http://es.archive.ubuntu.com/ubuntu/ maverick/main amd64 Packages

Dins la consola també es pot mostrar amb:

$ show version
Quagga 0.99.18 (tallafocsASI).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

Mostra l'ajuda

Per mostra l'ajuda (mostra les comandes possibles) escriviu ?:

# ?
 clear        Reset functions
 configure    Configuration from vty interface
 copy         Copy from one file to another
 debug        Debugging functions (see also 'undebug')
 disable      Turn off privileged mode command
 end          End current mode and change to enable mode
 exit         Exit current mode and down to previous mode
 list         Print command list
 no           Negate a command or set its defaults
 ping         Send echo messages
 quit         Exit current mode and down to previous mode
 show         Show running system information
 ssh          Open an ssh connection
 start-shell  Start UNIX shell
 telnet       Open a telnet connection
 terminal     Set terminal line parameters
 traceroute   Trace route to destination
 undebug      Disable debugging functions (see also 'debug')
 write        Write running configuration to memory, network, or terminal

Mostrar la configuració

# show run
Building configuration...

Current configuration:
!
log stdout
hostname tallafocsASI
!
password zebra
enable password zebra
!
interface eth0
 ipv6 nd suppress-ra
!
interface eth1
 ipv6 nd suppress-ra
!
interface lo
!
router bgp 7675
 bgp router-id 10.36.253.4
!
ip forwarding
!
line vty
!
end

BGP

Recursos


Exemple amb redundància

En aquest exemple intervenen dos encaminadors amb routerOS i un amb quagga.

TODO: Gràfica de la xarxa

Configuració de quagga:

Instal·lació:

$ sudo apt-get install quagga

Configuració dels dimonis:

$ sudo cat /etc/quagga/daemons
...
zebra=yes
bgpd=yes
ospfd=no
ospf6d=no
ripd=no
ripngd=no
isisd=no

No hem tocat res del fitxer /etc/quagga/debian.conf

$ sudo cat /etc/quagga/debian.conf
...
vtysh_enable=yes
zebra_options=" --daemon -A 127.0.0.1"
bgpd_options="  --daemon -A 127.0.0.1"
ospfd_options=" --daemon -A 127.0.0.1"
ospf6d_options="--daemon -A ::1"
ripd_options="  --daemon -A 127.0.0.1"
ripngd_options="--daemon -A ::1"
isisd_options=" --daemon -A 127.0.0.1"

IMPORTANT: No hi ha hagut manera de configurar vtysh per a treballar amb diferents fitxers de configuració per a cada protocol

$ sudo cp /usr/share/doc/quagga/examples/vtysh.conf.sample /etc/quagga/vtysh.conf
$ sudo cat /etc/quagga/vtysh.conf
!
! Sample configuration file for vtysh.
!
service integrated-vtysh-config
!hostname quagga-router
username root nopassword
!

Hem afegit l'usuari que ha d'utilitzar vtysh al grup quaggavty

$ sudo usermod -a -G GRUPSPREVI1. GRUPPREVI2 quaggavty sergi

NOTA: Canvieu l'exemple al vostre cas. Cal canviar l'usuari sergi pel que us pertoqui i consultar els grups previs amb $ groups usuari

Ara muntem temporalment un fitxer d'exemple per a zebra.conf:

$ sudo cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf

I reiniciem el servidor:

$ sudo /etc/init.d/quagga restart

Ara entrem amb vtysh. Abans és possible que haguiu de tornar a iniciar sessió amb l'usuari que esteu utilitzant per tal que formi part del grup quaggavty:

$ su sergi
$ vtysh
Hello, this is Quagga (version 0.99.18).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

TallafocsASI# 

NOTA: TallafocsASI és el nom del servidor a l'exemple, en el vostre cas pot ser diferent

Guardeu una primera configuració i sortiu:

# write
Building Configuration...
Integrated configuration saved to /etc/quagga/Quagga.conf
[OK]

Ara ja tenim fitxer /etc/quagga/Quagga.conf. Editem-lo i posem el següent:

log file /var/log/quagga/bgpd.log
!
debug bgp events
debug bgp keepalives
debug bgp updates
debug bgp fsm
debug bgp filters
!
password Pyr554Grdtpto
enable password Pyr554Grdtpto
!
interface eth0
 ipv6 nd suppress-ra
!
interface eth1
 ipv6 nd suppress-ra
!
interface lo
!
router bgp 19639
 bgp router-id 10.36.253.4
 network 10.36.253.0/27
 neighbor 10.36.253.1 remote-as 19633
 neighbor 10.36.253.1 distribute-list local_nets in
 neighbor 192.168.0.16 remote-as 29363
 neighbor 192.168.0.16 distribute-list local_nets in
! 
access-list local_nets permit 192.168.0.0/16
access-list local_nets permit 172.16.0.0/12
access-list local_nets permit 10.0.0.0/8
access-list local_nets deny any
!
ip forwarding
!
line vty
!

IMPORTANT: Temporalment activem el debug de BGP. Un cop tot funcioni correctament és interessant treure la depuració.

Els detalls del fitxer són:

Configuració general

Activar el IP forwarding (consulteu també l'article ip forwarding i feu que la màquina sigui un encaminador de forma permanent)

 ip forwarding

Llistes d'accés:

! 
access-list local_nets permit 192.168.0.0/16
access-list local_nets permit 172.16.0.0/12
access-list local_nets permit 10.0.0.0/8
access-list local_nets deny any

Les llistes d'accés són filtres de l'encaminament. A l'exemple només es permeten rutes de xarxes privades. Si qualsevol peer anuncia rutes fora d'aquest rang aquestes rutes seran descartades.

Configuració de BGP:

router bgp 19639
 bgp router-id 10.36.253.4
 network 10.36.253.0/27
 neighbor 10.36.253.1 remote-as 19633
 neighbor 10.36.253.1 distribute-list local_nets in
 neighbor 192.168.0.16 remote-as 29363
 neighbor 192.168.0.16 distribute-list local_nets in

La primera línia:

router bgp 19639

Defineix el AS number del encaminador Linux.

NOTA: En aquest l'exemple el AS number l'hem escollit segons els criteris de guifi.net. Els dispositius són:

AS 29363: TortosaINSEbreRB1100 (routerOS) http://guifi.net/ca/guifi/device/29363 
AS 19633: TortosaINSEbreRd1 (routerOS) http://guifi.net/guifi/device/19633
AS 19639: TortosaINSEbreSrvr1 (Ubuntu Server + Quagga) http://guifi.net/ca/guifi/device/19639

La línia:

bgp router-id 10.36.253.3

Assigan un identificador al router. Li hem donat la IP de guifi que té.

En aquest exemple el router Linux està connectat a xarxes privades les quals no vol anunciar (xarxes privades de un Institut) i està connectat a la xarxa guifi.net a través de dos possibles sortides (els encaminadors routerOS amb els que farà peering). A l'exemple només anunciem una xarxa molt concreta:

network 10.36.253.0/27

I no anunciem cap altre més.

Finalment configurem els peers:

neighbor 10.36.253.1 remote-as 19633
neighbor 10.36.253.1 distribute-list local_nets in

neighbor 192.168.0.16 remote-as 29363
neighbor 192.168.0.16 distribute-list local_nets in

En aquest dos n'hi ha dos de peers. Fixeu-vos com apliquem un filtre d'entrada (només xarxes locals). El router té accés a un encaminador per una targeta de xarxa i a l'altre per un altre i d'aquí les dues subxarxes.

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
10.36.253.0     0.0.0.0         255.255.255.224 U     0      0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
...

Finalment hem activat la depuració i hem indicat el fitxer de log:

log file /var/log/quagga/bgpd.log
!
debug bgp events
debug bgp keepalives
debug bgp updates
debug bgp fsm
debug bgp filters

Al fitxer de log:

$ cat /var/log/quagga/bgpd.log
...
2012/01/12 15:05:23 BGP: 10.36.253.1 sending KEEPALIVE
2012/01/12 15:05:24 BGP: 10.36.253.1 [FSM] Timer (routeadv timer expire)
2012/01/12 15:05:34 BGP: Import timer expired.
2012/01/12 15:05:38 BGP: 192.168.0.16 [FSM] Timer (routeadv timer expire)
2012/01/12 15:05:46 BGP: 10.36.253.1 KEEPALIVE rcvd
2012/01/12 15:05:49 BGP: Import timer expired.
2012/01/12 15:05:54 BGP: 10.36.253.1 [FSM] Timer (routeadv timer expire)
2012/01/12 15:06:03 BGP: Performing BGP general scanning
2012/01/12 15:06:03 BGP: scanning IPv4 Unicast routing tables
2012/01/12 15:06:03 BGP: scanning IPv6 Unicast routing tables
2012/01/12 15:06:03 BGP: 192.168.0.16 KEEPALIVE rcvd
2012/01/12 15:06:04 BGP: Import timer expired.
2012/01/12 15:06:07 BGP: 192.168.0.16 [FSM] Timer (keepalive timer expire)
2012/01/12 15:06:07 BGP: 192.168.0.16 sending KEEPALIVE
2012/01/12 15:06:08 BGP: 192.168.0.16 [FSM] Timer (routeadv timer expire)
2012/01/12 15:06:19 BGP: Import timer expired.
2012/01/12 15:06:23 BGP: 10.36.253.1 [FSM] Timer (keepalive timer expire)
2012/01/12 15:06:23 BGP: 10.36.253.1 sending KEEPALIVE
2012/01/12 15:06:24 BGP: 10.36.253.1 [FSM] Timer (routeadv timer expire)
2012/01/12 15:06:34 BGP: Import timer expired.
2012/01/12 15:06:38 BGP: 192.168.0.16 [FSM] Timer (routeadv timer expire)
2012/01/12 15:06:40 BGP: 10.36.253.1 KEEPALIVE rcvd
2012/01/12 15:06:49 BGP: Import timer expired.
2012/01/12 15:06:54 BGP: 10.36.253.1 [FSM] Timer (routeadv timer expire)
2012/01/12 15:06:59 BGP: 192.168.0.16 KEEPALIVE rcvd
2012/01/12 15:07:03 BGP: Performing BGP general scanning
2012/01/12 15:07:03 BGP: scanning IPv4 Unicast routing tables
2012/01/12 15:07:03 BGP: scanning IPv6 Unicast routing tables
2012/01/12 15:07:04 BGP: Import timer expired.
2012/01/12 15:07:07 BGP: 192.168.0.16 [FSM] Timer (keepalive timer expire)
2012/01/12 15:07:07 BGP: 192.168.0.16 sending KEEPALIVE
2012/01/12 15:07:08 BGP: 192.168.0.16 [FSM] Timer (routeadv timer expire)
2012/01/12 15:07:19 BGP: Import timer expired.
2012/01/12 15:07:23 BGP: 10.36.253.1 [FSM] Timer (keepalive timer expire)
2 012/01/12 15:07:23 BGP: 10.36.253.1 sending KEEPALIVE
2 012/01/12 15:07:24 BGP: 10.36.253.1 [FSM] Timer (routeadv timer expire)
2 012/01/12 15:07:31 BGP: 10.36.253.1 KEEPALIVE rcvd
2 012/01/12 15:07:34 BGP: Import timer expired.

La resta de configuració és automàtica (és el que ja us trobareu al fitxer, excepte que hem canviat la paraula de pas).

Els peers routerOS es configuren seguint els passos de RouterOS#BGP.

Activar suport per a SNMP

Per una qüestió de llicències per defecte el quagga de Debian no està compilat amb suport per a SNMP. Del fitxer /usr/share/doc/quagga/README.Debian:

* Why has SNMP support been disabled?
=====================================
Quagga used to link against the NetSNMP libraries to provide SNMP
support. Those libraries sadly link against the OpenSSL libraries
to provide crypto support for SNMPv3 among others.
OpenSSL now is not compatible with the GNU GENERAL PUBLIC LICENSE (GPL)
licence that Quagga is distributed under. For more explanation read:   
  http://www.gnome.org/~markmc/openssl-and-the-gpl.html
  http://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs
Updating the licence to explecitly allow linking against OpenSSL
would requite the affirmation of all people that ever contributed
a significant part to Zebra or Quagga and thus are the collective
"copyright holder". That's too much work. Using a shrinked down  
version of NetSNMP without OpenSSL or convincing the NetSNMP people
to change to GnuTLS are maybe good solutions but not reachable
during the last days before the Sarge release :-(

        *BUT*

It is allowed by the used licence mix that you fetch the sources and
build Quagga yourself with SNMP with
        <remove the "grep ^smux" block at the end of debian/quagga.preinst>
        # export WANT_SNMP=1
        # apt-get -b source quagga
Just distributing it in binary form, linked against OpenSSL, is forbidden.

La sol·lució és compilar a mida el paquet.

Documentació

/usr/share/doc/quagga

$ ls -la /usr/share/doc/quagga
total 56
drwxr-xr-x   4 root root  4096 2012-01-12 11:17 .
drwxr-xr-x 471 root root 20480 2012-01-12 11:09 ..
-rw-r--r--   1 root root  2175 2011-10-12 16:36 changelog.Debian.gz
-rw-r--r--   1 root root  1208 2011-10-12 16:34 copyright
drwxr-xr-x   2 root root  4096 2012-01-12 11:09 examples
-rw-r--r--   1 root root  4445 2011-10-12 16:34 README.Debian
-rw-r--r--   1 root root   203 2011-10-12 16:34 README.Debian.MD5
-rw-r--r--   1 root root   118 2011-10-12 16:34 README.Debian.Woody
drwxr-xr-x   2 root root  4096 2012-01-12 11:09 tools

Comparativa

A la següent pàgina existeix una taula comparativa entre Quagga, Vyatta i CISCO IOS:

http://openmaniak.com/quagga_func.php

Troubleshooting

Al entrar a vtysh es mostra només un text que posa MORE

Podeu sortir amb la tecla q. Per arreglar aquest problema cal definir la variable d'entorn VTYSH_PAGER.

Can't save to configuration file, using vtysh.

Al fitxer /usr/share/doc/quagga/README.Debian:

* vtysh immediately exists:
===========================

Check /etc/pam.d/quagga, it probably denies access to your user. The passwords
configured in /etc/quagga/Quagga.conf are only for telnet access.

Failed to connect to any daemons.

Si al executar:

$ vtysh 
Exiting: failed to connect to any daemons.

Pot ser que no estiguin els dimonis en execució. Consulteu /etc/init.d/quagga i el fitxer /etc/quagga/daemons. Tingueu en compte que a més per tal que s'executin els dimonis cal que tinguin fitxer de configuració (o la configuració integrada /etc/quagga/Quagga.conf o un fitxer de configuració per a cada dimoni /etc/quagga/zebra.conf,/etc/quagga/bgpd.conf, etc)

També cal tenir en compte el tema de permisos. Aquí hi ha dos qüestions:

  • Els usuaris que vulguin utilitzar vtysh han de formar part del grup quaggavty.
  • Un tema és accedir a vtysh i un altre diferent és que un cop dins pugueu modificar fitxers de configuració. Els fitxers de configuració també han de ser del grup [[quaggavty] (inclosa la carpeta /etc/quagga? )

Can't backup old configuration file ...

Per exemple si dins de vtysh executeu:

# write 

I us dona l'error:

Can't backup old configuration file /etc/quagga/zebra.conf.sav.

Segurament és que vtysh no té permisos per escriure a la carpeta /etc/quagga/. Els permisos haurien de ser:

$ ls -la /etc/quagga
total 28
drwxrwxr-x  2 quagga quaggavty 4096 2012-01-12 12:38 .

A més cal tenir en compte que no existeixi ja un fitxer que sigui d'un propietari diferent o amb permisos incorrectes.

vtysh només funciona amb service integrated-vtysh-config

Només amb el paràmetre service integrated-vtysh-config activat:

$ cat /etc/quagga/vtysh.conf
!
! Sample configuration file for vtysh.
!
service integrated-vtysh-config
!hostname quagga-router
username root nopassword
!

Puc utilitzar l'ordre write. En canvi si està desactivat:

 $ cat /etc/quagga/vtysh.conf
!
! Sample configuration file for vtysh.
!
no service integrated-vtysh-config
!hostname quagga-router
username root nopassword
!

dona l'error:

# write
Building Configuration...
Can't save to configuration file, using vtysh.

Vegeu també

Enllaços externs