# Ejercicio Práctico de RANCID

# Introducción

## Metas

- Instalar y configurar RANCID para respaldar configuraciones de los enrutadores del taller.
- Revisar los registros de RANCID para ver los cambios en las configuraciones de los enrutatores.

## Notas

- Los comandos precedidos por el signo de pesos “$”, deben ser ejecutados como un usuario general - y no como superusuario (root).
- Los comandos precedidos por el signo de número “#”, deben ser ejecutados por el superusuario (root).
- Los comandos precedidos por lineas de comando más específicas (Ej. “rtrX>” or “mysql>”) deben ser ejecutados en equipos remotos, o dentro de otras aplicaciones.
- Si la línea de comandos termina con una barra invertida “\”, quiere decir que el comando continua en la próxima línea y todas líneas deben ser tratadas como un comando de una sola línea.
- Referencias a “Y”, representan su número de grupo.

# Instalar RANCID

Conectese a su PC con ssh y el usuraio sysadm y convertimos en root:

    $ sudo -s
    #

Ahora instalamos el sistema de control de versiones Subversion:

Además de Subversion, instalaremos telnet y el cliente de correo Mutt. Puede ser que ambos paquetes ya hayan sido instalados en un ejercicio previo. En tal caso, no se preocupe, el comando `apt` simplemente no los instalará.

     # apt install subversion telnet mutt

Instalar Rancid mismo:

     # apt install rancid

- Le mostrará una advertencia. Seleccione <Ok> y oprima <ENTER> para continuar.
- Le mostrará otra advertencia sobre la necesidad de hacer una copia de sus datos en Rancid. Como no tenemos datos, simplemente seleccione <YES> y oprima <ENTER> para continuar.

## Agregue un alias

Agregue un alias para el usuario rancid en el archivo `/etc/aliases`.

Por defecto, RANCID envía correos electrónicos a los usuarios rancid-<GRUPO> y rancid-admin-<GRUPO>. Como queremos que los mensajes sean enviados al usuario sysadmin, vamos a crear un alias:

     # editor /etc/aliases

Agregue las lineas:

    rancid-routers:         sysadm
    rancid-admin-routers:   sysadm

Grabe el archivo, salga del editor y ejecute:

     # newaliases

## Edite la configuración de Rancid

     # nano /etc/rancid/rancid.conf

Busque esta línea:

     # list of rancid groups
     #LIST_OF_GROUPS="sl joebobisp"; export LIST_OF_GROUPS

Y debajo de ésta, agregue:

     LIST_OF_GROUPS="routers"

(sin el carácter “#” al comienzo de la línea, y alineada hacia la izquierda)

Busque la línea con CVSROOT:

     CVSROOT=$BASEDIR/CVS; export CVSROOT

y cámbiela a:

     CVSROOT=$BASEDIR/svn; export CVSROOT

Asegúrese de que “svn” esté en minúscula.

Vamos a usar Subversion con nuestro sistema de control de versiones, y no CVS, así que busque la línea con el parámetro RCSSYS:

            RCSSYS=cvs; export RCSSYS

Y cámbiela a:

            RCSSYS=svn; export RCSSYS

Graba el archivo y salga.

# Cambie al usuario rancid

# IMPORTANTE! IMPORTANTE! IMPORTANTE!

Ponga mucha atención a cuál ID de usuario (userid) está usando durante el resto de los ejercicios. Si no está seguro, simplemente ejecute “id” en la línea de comandos en cualquier momento.

Desde una línea de comandos de root (“#”), cambie su identidad para convertirse en el usuario ‘rancid’:

     # su - rancid

Confirme que es el usuario rancid ahora:

     $ id

Debería ver algo similar a esto (puede que los números no concuerden):

    uid=118(rancid) gid=124(rancid) groups=124(rancid)

SI UD NO ES EL USUARIO RANCID AHORA, NO SIGA

## Configure el script para iniciar sesiones automáticamente:

    $ editor /var/lib/rancid/.cloginrc

Agregue las siguientes líneas:

    add method * {ssh}
    add cyphertype *.ws.nsrc.org {aes128-ctr,3des-cbc}
    add user *.ws.nsrc.org campusY
    add password *.ws.nsrc.org lab-PW lab-EN

(La primera línea indica que el método de conexión hacia todos los dispositivos (*) es “ssh”. La segunda línea indica que debe usarse el nombre de usuario “campusY”. En la tercera línea, el primer “Lab-PW” es el password de acceso y el segundo “lab-EN” es el password de modo privilegiado (enable) para el enrutador. El asterisco “*” en los nombres es un comodín, lo cual indica que Rancid deberá usar estas credenciales para todos los dispositivos cuyos nombres terminen en .ws.nsrc.org)

Grabe y salga.

Ahora proteja este archivo para que no pueda ser leído por otros usuarios:

     $ chmod 600 /var/lib/rancid/.cloginrc

## Compruebe que puede iniciar sesiones hacia el enrutador de su grupo

Ingrese a su enrutador con clogin. La primera vez probablemente recibirá una advertencia de SSH sobre la clave pública. Confirme con “y”, pero no debería tener que escribir la contraseña del enrutador. Debería ser automático.

     $ /var/lib/rancid/bin/clogin bdr1-campusY.ws.nsrc.org

(reemplace Y con su número de campus. Por ejemplo, si usted es el campus 1, el nombre sería bdr1-campus1.ws.nsrc.org)

Debería ver algo como esto:

    bdr1-campus6.ws.nsrc.org
    spawn ssh -c aes128-ctr,3des-cbc -x -l campus6 bdr1-campus6.ws.nsrc.org
    <BANDERA DE ENTRADA CISCO>
    Password:
    bdr1-campus6>enable
    Password:
    bdr1-campus6#

Termine la conexión al enrutador:

    bdrX-campusX# exit

## Inicialize el repositorio SVN para Rancid:

Asegúrese de ser el usuario rancid antes de continuar:

    $ id

Si no ve algo como

    uid=118(rancid) gid=124(rancid) groups=124(rancid)

NO CONTINUE hasta haberse convertido en el usuario rancid. Vea la sección anterior para más detalles.

Ahora inicialize el repositorio SVN:

    $ /usr/lib/rancid/bin/rancid-cvs

Deberias ver algo como:

    Committing transaction...
    Committed revision 1.
    Checked out revision 1.
    Updating '.':
    At revision 1.
    A         configs
    Adding         configs
    Committing transaction...
    Committed revision 2.
    A         router.db
    Adding         router.db
    Transmitting file data .done
    Committing transaction...
    Committed revision 3.

> Sólo haga lo siguiente si tiene problemas > > Si esto no funciona, entonces puede que le falte el paquete subversion, o que algo no se configuró apropiadamente durante los pasos anteriores. Debe verificar que Subversion está instalado, así que antes de ejecutar rancid-cvs, haga lo siguiente: > > ~~~ $ exit # apt-get install subversion # su -s /bin/bash rancid $ cd /var/lib/rancid $ rm -rf routers $ rm -rf svn ~~~
> Ahora intente de nuevo:
~~~ $ /usr/lib/rancid/bin/rancid-cvs ~~~

## Cree el archivo que contendrá la lista de dispositivos

    $ editor /var/lib/rancid/routers/router.db

Agregue estas líneas (SIN espacios al inicio de la linea):

    bdr1-campusY.ws.nsrc.org;cisco;up
    core1-campusY.ws.nsrc.org;cisco;up

(recuerde reemplazar Y con su número de grupo, según corresponda)

Grabe y salga.

## Vamos a correr rancid!

Todavia como el usuario rancid:

    $ rancid-run

Esto tardará unos momentos, sea paciente.

Corralo de nuevo porque la primera vez puede que no registre correctamente:

    $ rancid-run

## Revise los registros de eventos (logs) de Rancid:

    $ cd /var/lib/rancid/logs
    $ ls -l

… Inspeccione el contenido de los archivos:

    $ less routers.*

NOTA: Cuando usa “less” - para ver el siguiente archivo presione “:n”. Para ver el archivo anterior, presione “:p”. Para salir, presione “q”.

## Mire las configuraciones

    $ cd /var/lib/rancid/routers/configs
    $ less bdr1-campusY.ws.nsrc.org

NOTA: Re-emplace “Y” con el numero de su grupo.

Si todo salió bien, debería ver la configuración del enrutador.

# Dandole seguimiento a los cambios

Vamos a cambiar la descripción de una interfaz en el enrutador

    $ /usr/lib/rancid/bin/clogin bdr1-campusY.ws.nsrc.org

Donde debe reemplazar “Y” con su número de grupo.

En la línea de comandos “bdr1-campusY#” escriba:

    bdr1-campusY# conf term

Verá algo similar a:

    Enter configuration commands, one per line.  End with CNTL/Z.
    bdr1-campusY(config)#

Ingrese:

    bdr1-campusY(config)# interface LoopbackXX              (sustitya XX con el No. de su  Servidor)

Verá lo siguiente:

    bdr1-campusN(config-if)#

Ingrese:

    bdr1-campusN(config-if)# description <put your name here>
    bdr1-campusN(config-if)# end

Ahora debería tener este mensaje:

    bdr1-campusY#

Para guardar la configuración en la memoria:

    bdr1-campusY# write memory

Ustede debería ver:

    Building configuration...
    [OK]

Para salir escriba:

    bdr1-campusY# exit

Ahora debería estar de vuelta en el indicador de usuario rancid en su sistema:

## Ejecutemos Rancid de nuevo:

    $ rancid-run

Mire los registros de eventos

    $ ls /var/lib/rancid/logs/

Debería ver un nuevo archivo de eventos indicando la última ejecución de Rancid con la fecha y hora como parte del nombre.

## Veamos las diferencias

    $ cd /var/lib/rancid/routers/configs
    $ ls -l

Debería ver el archivo de configuración del enrutador de su grupo:

    $ svn log bdr1-campusY.ws.nsrc.org

(Donde “Y” es el numero de su grupo)

Fíjese en las revisiones. Debería ver diferentes números de revisión como r6, r9 y r8. Elija el más bajo y el más alto.

    ------------------------------------------------------------------------
    r8 | rancid | 2019-11-15 14:49:02 +0000 (Fri, 15 Nov 2019) | 1 line

    updates
    ------------------------------------------------------------------------
    r7 | rancid | 2019-11-15 14:47:11 +0000 (Fri, 15 Nov 2019) | 1 line

    updates
    ------------------------------------------------------------------------
    r5 | rancid | 2019-11-15 14:47:06 +0000 (Fri, 15 Nov 2019) | 1 line

    new router
    ------------------------------------------------------------------------

Veamos la diferencia entre dos versiones. En este caso entre los “diffs” 5 y 8 y los “diffs” 7 y 8. Los numerous pueden ser diferente. Y, reemplace el “Y” con el número de su campus:

    $ svn diff -r5:8 bdr1-campusY.ws.nsrc.org | less
    $ svn diff -r7:8 bdr1-campusY.ws.nsrc.org | less

… Puede ver los cambios?

Note que svn es el comando del sistema de control de versiones para manejar repositorios de información. Si escribe:

    $ cd /var/lib/rancid/routers
    $ ls -lah

Verá un directorio escondido llamado “.svn” - este contiene toda la información sobre los cambios entre las configuraciones de los enrutadores, capturada cada vez que se ejecuta rancid.

Nunca, nunca toque o edite el directorio `.svn# directamente!

## Revise su correo

Ahora saldremos del shell de rancid para volver al shell de root, y de ahí saldremos al shell de “sysadmin”. Vamos a usar el programa “mutt” para ver si rancid nos ha estado enviando correos:

     $ exit                 (salir del shell de rancid)
     # exit                 (salir del shell de root)
     $ id

… comprobar que somos sysadmin de nuevo; … si no, salga e ingrese de nuevo a su PC como sysadmin.

     $ mutt

(Cuando se le pregunte sobre crear el directorio Mail, diga Yes)

Si todo sale como está planificado, debería poder leer los e-mails enviados por Rancid. Puede seleccionar el e-mail enviado por “rancid@hostX-campusY.ws.nsrc.org” y ver qué tiene dentro.

Note que será la descripción de su enrutador y cualquier diferencia que se haya registrado desde la última vez que se ejecutó rancid-run.

Salga de mutt.

(use ‘q’ para salir al índice, y ‘q’ de nuevo para salir de mutt)

# Configuración de Cron

Hagamos que Rancid se ejecute cada 30 minutos por medio de Cron

Cron es un sistema disponible en Linux para automatizar la ejecución de tareas. Primero debemos convertirnos de nuevo en root:

    $ sudo -s
    #

Ahora crearemos una nueva tarea para el usuario rancid:

     # editor /etc/cron.d/rancid

Encuentra esta linea:

    #1  *  *  *  *  /usr/lib/rancid/bin/rancid-run

and change it to the following, replacing “X” with your group number: y cambiarla a lo siguiente, reemplazando “X” con el numero de su grupo:

    X-3X/30 * * * * rancid /usr/bin/rancid-run

(e.j. grupo 2 empezaría la linea con `2-32/30`, remueve el “#”, también)

Graba y salga del archivo.

That’s it. The command “rancid-run” will execute automatically from now on every 30 minutes all the time (every day, week and month). Each group will start at a slightly different time to avoid overloading the training platform.

Ya está. El comando “rancid-run” se ejecutará automáticamente cada 30 minutos a partir de ahora (todos los días, semanas y meses). Cada grupo va a correr el comando en un tiempo un poquito diferente que lo demás para evitar que sobrecargar la plataforma del curso.

# Mas dispositivos

Conviértase en el usuario `rancid` y actualice el archivo router.db:

     # su - rancid
     $ editor /var/lib/rancid/routers/router.db

Agregue los dos dispositivos restantes en su campus para que el archivo termine luciendo así, donde “Y” es su número de campus.

    bdr1-campusY.ws.nsrc.org;cisco;up
    core1-campusY.ws.nsrc.org;cisco;up
    dist1-b1-campusY.ws.nsrc.org;cisco;up
    dist1-b2-campusY.ws.nsrc.org;cisco;up

(Note que “cisco” significa que estos son equipos Cisco. Esta información ayuda a Rancid a identificar cómo debe comunicarse con el equipo. Rancid también soporta otros fabricantes, tales como Juniper, HP, etc.)

Asegúrese de que las entradas están alineadas hacia la izquierda del archivo.

Ejecute rancid otra vez (todavia como el usuario ‘rancid’):

    $ rancid-run

Tomará un minuto o más, sea paciente.

Revise los registros:

    $ cd /var/lib/rancid/logs
    $ ls -l

… Busque el último archivo y mírelo

    $ less routers.YYYYMMDD.HHMMSS

Este debería ser el último archivo en la lista producida por “ls -l”

Debería haber un número de entradas indicando que los enrutadores se han agregado a Subversion, y otras informaciones.

## Revise las configuraciones

    $ cd /var/lib/rancid/routers/configs
    $ less *.ws.nsrc.org

Y oprima la barra espaciadora para desplazarse hacia abajo en la página y luego presione “:n” para ver el próximo archivo. Recuerde que en ambos casos puede salir con “q”.

Si todo salió bien, debería ver las configuraciones de todos los enrutadores.

## Ejecute rancid de nuevo

Ejecute RANCID de nuevo para ver si alguien ha cambiado la configuración de su enrutador.

    $ rancid-run

Esto podría tomar unos momentos, así que tenga paciencia …

## Juegue con clogin:

    $  /usr/lib/rancid/bin/clogin -c "show clock" bdr1-campusY.ws.nsrc.org

Donde Y es su número de grupo.

Qué puede observar?

Y lo que es mas interesante es que podemos sacar provecho de esta herramienta y escribir un script sencillo para hacer cambios en múltiples dispositivos rápidamente:

    $ editor /tmp/newuser

… en este archivo escriba los siguientes comandos (o COPIE Y PEGUE):

    configure terminal
    username pc<número_de_PC> secret 0 NewPassword
    exit
    write

Guarde, salga y ejecute lo siguiente:

    $ for device in bdr1 core1 dist1-b1 dist1-b2

Su línea de comandos cambiará a “>”. Continue escribiendo:

    > do
    > /var/lib/rancid/bin/clogin -x /tmp/newuser $device-campusY.ws.nsrc.org
    > done

Ahora su línea de comandos volverá a ser “$” y el comando clogin de Rancid se ejecutará y enviará los comandos que acaba de escribir a los dispositivos. Esto es programa sencillo en el shell de Linux, pero es muy poderoso.

Q. Cómo verificaría que esto se ha ejecutado correctamente? Pista: “show run | inc ”

A. Conéctese al bdr1 y core1. Escriba “enable” y luego “show run | inc username” para verificar que el nuevo usuario “pc” existe. Salga con “exit”. Naturalmente esto lo podríamos automatizar de la misma manera.

# Instalar ViewVC

Ahora agregaremos el repositorio de RANCID SVN (Subversion) a ViewVC para que pueda ver las configuraciones a través de la web.

Si todavía está conectado como usuario rancid, regrese a la raíz. Recuerde que puede escribir “id” para verificar qué ID de usuario es usted.

    $ exit
    #

Instalar ViewVC:

     # apt install viewvc

Agregue el informe Rancid SVN al archivo de configuración de ViewVC. Edite el archivo

     # editor /etc/viewvc/viewvc.conf

Busque esta línea en el archivo de configuración y configúrela así:

    svn_roots = rancid: /var/lib/rancid/svn

Nota: Si utiliza una linea existente, recuerde remover el signo de # del principio de la línea.

Guardar y Salir.

A continuación, debemos agregar el usuario del servidor web de apache (www-data) al grupo rancid para otorgar acceso al servidor web apache y ver el repositorio SVN de rancid.

     # usermod -a -G rancid www-data

Reinicializar el servidor apache

    # systemctl restart apache2

¡Explore los archivos rancid desde su navegador web!

(reemplace el ‘X’ y el ‘Y’ con su host y su campus)

- http://hostX-campusY.ws.nsrc.org/cgi-bin/viewvc.cgi/rancid/

Revisa los archivos debajo el directorio ‘routers/configs’. Puede ver todo los archivos de configuración de su enrutador aquí.

# Protegiendo ViewVC

Usted no querrá que cualquier persona pueda ver sus archivos de configuración. A continuación hay algunos pasos que puede seguir para proteger el acceso a ViewVC. Un paso no incluido en este laboratorio es habilitar el uso de https (ssl). Recomendamos esto para todos sus sitios web siempre que sea posible.

Crea el archivo de configuración de Apache para ViewVC

     # cd /etc/apache2/conf-available
     # editor viewvc.conf

En este archivo ponga:

    <DirectoryMatch "^/usr/lib/cgi-bin/viewvc">
        AuthName "viewvc RANCID Repository Access"
        AuthType Basic
        AuthUserFile /etc/viewvc/htpasswd
        require valid-user
    </DirectoryMatch>

Graba y salir del archivo. Habilitar esta configuración y reinicializa Apache para activarlo:

    # a2enconf viewvc
    # systemctl reload apache2

A continuación, tenemos que crear un archivo htpasswd en el directorio /etc/viewvc:

     # cd /etc/viewvc
     # htpasswd -c htpasswd sysadm

(Solamente usa la opción `-c` la primera vez para crear este archivo. Si la usa otra vez la opción boraría todas las contraseñas que ya estan en el archivo.)

Proporcione una contraseña para el usuario sysadm (¿tal vez la contraseña de la clase?). Debería ver lo siguiente:

    New password:
    Re-type new password:
    Adding password for user sysadm

Asegura el archivo:

    # chgrp www-data htpasswd
    # chmod 640 htpasswd

Intente navegar a la página de WebSVN en http://hostX-campusY.ws.nsrc.org/cgi-bin/viewvc.cgi y le debe pedir un nombre de usuario y contraseña para poder ver las páginas.

Ahora debería poder hacer un login usando su usuario y contraseña que acaba de poner en el archivo de htpasswd.

## Examinar las revisiones

ViewVC le permite ver fácilmente los cambios entre versiones.

- Vaya a http://hostX-campusX.ws.nsrc.org/viewvc/rancid de nuevo, vaya a `routers/` luego a `configs/
- Haga clic en el nombre de su archivo de enrutador (bdr1-campusX.ws.nsrc.org). Obtendrá una nueva pantalla con el título “Log of /routers/configs/bdr1-campusY.ws.nsrc.org”
- Busque por “Diffs between” en la parte inferior de la pantalla.
- Entre las versiones a revisar (Ej. 3 y 5) y presione “Get Diffs”.

Esto le mostrará las diferencias entre las dos configuraciones de enrutador.

ViewVC es una forma conveniente de ver rápidamente las diferencias entre múltiples archivos de configuración a través de una GUI. Tenga en cuenta que esto es un posible riesgo de seguridad, por lo que debe limitar el acceso a la URL http://hostX/viewvc utilizando contraseñas (y SSL) o listas de control de acceso apropiadas.

# Opcional: recuperación de configuraciones con un usuario `rancid` no privilegiado

En un entorno de producción, probablemente querríamos agregar un usuario “rancid” en los dispositivos, sin privilegios de configuración, pero capaz de hacer un `show running-config`.

Una forma de hacerlo es agregar un usuario en el modo de configuración:

    bdr1-campusY# conf term
    Enter configuration commands, one per line.  End with CNTL/Z.
    bdr1-campusY(config)# username rancid privilege 4 secret password
    bdr1-campusY(config)# privilege exec level 4 show running-config view full

Esto crea un usuario `rancid` con nivel de privilegio 4. En la línea siguiente, permitimos que el usuario ejecute `show running-config`

También necesita agregar el nombre de usuario y la contraseña a su /var/lib/rancid/.cloginrc

    add method * {ssh}
    add cyphertype *.ws.nsrc.org {aes128-ctr,3des-cbc}
    add user *.ws.nsrc.org rancid
    add password *.ws.nsrc.org password
    add autoenable *.ws.nsrc.org 1

El `autoenable` significa que el usuario estará en el nivel de privilegio correcto inmediatamente después del inicio de sesión y no se necesita `enable` para ejecutar `show running-config`.

Nota: consulte la página de manual de `clogin` para ver cómo puede especificar otro usuario (por ejemplo: campusY) cuando use clogin de forma interactiva, para realizar cambios con -c o -x (como se muestra arriba).

Ver más en http://www.toms-blog.com/backup-cisco-config-with-rancid-and-an-un-priviledged-user/

# Notas

## Sobre el uso de nombres de host vs. Direcciones IP en RANCID

Nota: también se permite el uso de direcciones IP, y también se puede escribir:

    add user 100.68.* campusY
    add password 100.68.* lab-PW lab-EN
    add user bdr1.ws.nsrc.org campusY
    add password bdr1.ws.nsrc.org lab-PW lab-EN