2 Uso básico de Kathará
Kathará es un sistema ligero y de software libre para la emulación de redes basado en contenedores Docker. Permite crear escenarios de red en los que los dispositivos se emulan mediante contenedores interconectados por redes virtuales de nivel de enlace. Es el sucesor de una herramienta previa similar, Netkit. Está desarrollado por investigadores del grupo de Redes de la Universidad Roma Tre. El nombre Kathará procede del griego Καθαρά (kathará), que significa «puro» o «puramente».
2.1 netgui-kathará
NetGUI-Kathará es un frontend gráfico para Kathará desarrollado en GSyC/MobiQuo URJC. Su objetivo es facilitar la creación, configuración y ejecución de laboratorios de Kathará mediante una interfaz gráfica, evitando tener que trabajar directamente con los ficheros de configuración y los comandos de Kathará.
Es especialmente útil para crear escenarios. Pero teniendo en cuenta que en PST2 los estudiantes trabajarán con unos pocos escenarios, preconfigurados por los profesores, no es necesario que los alumnos usen NetGUI, pueden usar Kathará directamente.
2.2 El aboratorio
En Kathará, un laboratorio (lab) es un escenario completo de experimentación que describe una topología de red y todos los elementos necesarios para reproducirla.
Un laboratorio está formado por:
- Un conjunto de máquinas (hosts, routers, switches, etc.).
- Las conexiones entre ellas.
- La configuración inicial de cada dispositivo.
- Los ficheros y scripts necesarios para su funcionamiento.
Cada máquina del laboratorio se ejecuta como una máquina virtual, concretamente un contenedor Docker, con su propio sistema de ficheros, sus interfaces de red y sus procesos. Kathará crea automáticamente las redes virtuales necesarias para interconectar los dispositivos según la topología definida.
Un laboratorio se representa simplemente mediante un directorio del sistema de ficheros. En él se encuentran los ficheros de configuración generales, los directorios correspondientes a cada máquina y, opcionalmente, recursos compartidos por todas ellas. De esta forma, todo el escenario puede copiarse, comprimirse, almacenarse o distribuirse fácilmente a otros usuarios.
2.3 Estructura básica de un laboratorio Kathará
Un laboratorio sencillo puede tener esta estructura:
mi-laboratorio/
├── lab.conf
├── pc1/
├── r1/
├── pc2/
├── pc1.startup
├── r1.startup
├── pc2.startup
└── shared/
Cada elemento tiene una función diferente.
2.3.1 lab.conf
Es el fichero principal de configuración del laboratorio.
Define principalmente:
- qué dispositivos forman parte del laboratorio;
- qué interfaces de red tiene cada dispositivo;
- a qué redes (collision domains) está conectada cada interfaz;
- y, opcionalmente, otras opciones de configuración de los dispositivos.
Por ejemplo:
pc1[0]=A
r1[0]=A
r1[1]=B
pc2[0]=B
Esto conecta:
pc1 ─── A ─── r1 ─── B ─── pc2
El fichero lab.conf pertenece al laboratorio y no se copia dentro de los contenedores.
2.3.2 pc1/, r1/, pc2/
Son directorios que contienen archivos adicionales específicos de cada dispositivo.
El contenedor ya dispone de su propio sistema de ficheros, proporcionado por la imagen Docker que utiliza Kathará. El contenido de pc1/ se copia / monta sobre el sistema de ficheros raíz (/) del contenedor pc1, complementándolo. Lo mismo sucede con r1/ y pc2/.
Por ejemplo, si el laboratorio contiene:
pc1/
├── etc/
│ └── mi-config.conf
└── scripts/
└── prueba.sh
dentro del contenedor pc1 esos archivos aparecerán como:
/etc/mi-config.conf
/scripts/prueba.sh
Los directorios y archivos que ya proporciona la imagen Docker, como /bin, /usr, /var, etc., siguen estando presentes aunque no aparezcan en pc1/. Por tanto, pc1/ no es una copia ni una representación completa del sistema de ficheros del contenedor: es un conjunto de archivos adicionales que Kathará monta sobre él.
Por este motivo, los directorios pc1/, r1/ y pc2/ pueden estar completamente vacíos en un laboratorio sencillo. Solo son necesarios cuando queremos proporcionar archivos específicos a esos dispositivos.
2.3.3 pc1.startup, r1.startup, pc2.startup
Son scripts de shell que Kathará ejecuta durante el arranque de cada dispositivo.
Por ejemplo:
pc1.startup
podría contener:
ip addr add 192.168.1.10/24 dev eth0
ip link set eth0 up
Cuando se inicia pc1, Kathará ejecuta esas órdenes dentro del contenedor pc1.
Por tanto, pc1.startup:
- no es un fichero que normalmente tengamos que buscar dentro del contenedor;
- es un script que Kathará utiliza para inicializar el dispositivo;
- sus órdenes se ejecutan en el contexto del sistema de ficheros y la red de
pc1.
Lo mismo sucede con r1.startup para r1 y pc2.startup para pc2.
Los scripts se ejecutan utilizando como intérprete el device_shell configurado en Kathará (normalmente /bin/bash).
2.4 Comandos básicos de Kathará
En el directorio con el lab, ejecutar
kathara lstart:Arranca el laboratorio.
kathara lclean:Detiene y elimina el laboratorio.
kathara connect <dispositivo>:Abre una consola en un dispositivo ya arrancado. Ejemplo:
kathara connect pc1Normalmente no será necesario, Kathará abrirá automáticamente un terminal para cada dispositivo.
kathara list:Muestra los laboratorios/dispositivos en ejecución.
kathara check:Comprueba que el entorno de Kathará está correctamente configurado.
2.5 tests
Para ejecutar los test de integración,
- Iniciar el lab Kathará, ejecutando desde su directorio
kathara lstart- Exportar en la shell la variable de entorno ROUTER_LAB_DIR, dándole como valor la dirección del directorio con el laboratorio Kathará. Ejemplo:
export ROUTER_LAB_DIR=~/pst2/lab01- Ejecutar dentro del directorio del proyecto PDRouter
cargo test