1. Preparación del entorno
En esta parte vamos a construir la infraestructura virtual del laboratorio anterior. Utilizaremos Containerlab porque permite definir topologías de red mediante YAML, crear conexiones entre dispositivos y gestionar su ciclo de vida desde la terminal.
El controlador seguirá siendo nuestro Manjaro Linux, donde ya tenemos Docker y Ansible.
Containerlab admite tanto sistemas de red ejecutados directamente en contenedores como dispositivos virtuales basados en QEMU. Es el caso de Cisco IOSv, que funciona dentro de un contenedor gestionado mediante vrnetlab.
Vamos a utilizar:
| Equipo | Plataforma | Tipo Containerlab |
|---|---|---|
| cisco01 | Cisco IOSv | cisco_vios |
| arista01 | Arista cEOS | arista_ceos |
| vyos01 | VyOS 1.5 | vyosnetworks_vyos |
Estos tipos están documentados oficialmente por Containerlab.
2. Instalar Containerlab en Manjaro
En Manjaro podemos instalar Containerlab desde AUR.
pamac build containerlab
Comprobamos:
containerlab version
Y verificamos Docker:
sudo docker info
Si Docker todavía no está activo:
sudo systemctl enable --now docker
Para los dispositivos basados en QEMU necesitamos comprobar la aceleración por hardware:
ls -l /dev/kvm
Si no existe /dev/kvm, tendremos que revisar la configuración de virtualización del sistema.
3. Preparar las imágenes
Hay una diferencia respecto a los laboratorios Docker convencionales: las imágenes de Cisco, Arista y VyOS no se obtienen necesariamente mediante un simple docker pull.
Cisco IOSv: necesitamos una imagen obtenida legalmente y convertida al formato compatible con vrnetlab. Utilizaremos la implementación srl-labs/vrnetlab y el tipo cisco_vios.
Arista cEOS: descargamos el archivo de cEOS desde el portal de Arista y lo importamos a Docker. Por ejemplo, para una versión concreta:
docker import \
cEOS64-lab-4.32.0F.tar.xz \
ceos:4.32.0F
VyOS: utilizaremos la variante de VyOS compatible con Containerlab, que requiere preparar una imagen de contenedor a partir de la distribución de VyOS. La integración documentada se ha probado con VyOS 1.5 Q1 Stream o posterior.
Antes de continuar verificamos que tenemos disponibles las tres imágenes:
docker image ls
Para los ejemplos siguientes asumiremos estas etiquetas locales:
vrnetlab/cisco_vios:lab
ceos:4.32.0F
vyos:1.5-lab
Son nombres de referencia para imágenes que debemos construir o importar previamente; no son imágenes públicas garantizadas.
4. Definir la topología
Creamos el directorio:
mkdir -p ~/proyectos/ansible-network-lab
cd ~/proyectos/ansible-network-lab
Archivo network.clab.yml:
name: ansible-network
mgmt:
network: ansible-network-mgmt
ipv4-subnet: 172.31.100.0/24
topology:
nodes:
cisco01:
kind: cisco_vios
type: router
image: vrnetlab/cisco_vios:lab
mgmt-ipv4: 172.31.100.11
arista01:
kind: arista_ceos
image: ceos:4.32.0F
mgmt-ipv4: 172.31.100.12
vyos01:
kind: vyosnetworks_vyos
image: vyos:1.5-lab
mgmt-ipv4: 172.31.100.13
links:
- endpoints:
- cisco01:Gi0
- arista01:eth1
- endpoints:
- arista01:eth2
- vyos01:eth1
Tenemos dos conexiones de datos y una red de gestión común.
<text preserveWhitespace={false}>La topología se ajusta a la nomenclatura de Containerlab: en Cisco vIOS, Gi0 representa el primer puerto de datos y GigabitEthernet0/0 corresponde a gestión. Por tanto, en los playbooks de la parte anterior sustituiremos GigabitEthernet0/1 por la interfaz real correspondiente a Gi0, una vez comprobada con show ip interface brief.</text>
También actualizaremos el inventario para utilizar las nuevas direcciones 172.31.100.11 a 172.31.100.13.
5. Desplegar los dispositivos
Ejecutamos:
sudo containerlab deploy -t network.clab.yml
Containerlab crea los contenedores, la red de gestión y los enlaces virtuales.
Consultamos:
sudo containerlab inspect -t network.clab.yml
Y comprobamos los contenedores:
sudo docker ps
Deberíamos encontrar los tres nodos una vez que hayan arrancado correctamente.
Los nombres utilizados por Docker seguirán el esquema:
clab-ansible-network-cisco01
clab-ansible-network-arista01
clab-ansible-network-vyos01
6. Comprobar acceso a los dispositivos
Probamos Cisco:
ssh admin@172.31.100.11
Arista:
ssh admin@172.31.100.12
VyOS:
ssh admin@172.31.100.13
Las credenciales iniciales dependen de las imágenes y su configuración de arranque. Para el laboratorio crearemos un usuario específico de Ansible o configuraremos el inventario con un usuario autorizado.
También podemos entrar directamente en Arista desde Docker:
sudo docker exec -it \
clab-ansible-network-arista01 Cli
En VyOS comprobamos las interfaces:
show interfaces
Y en Cisco:
show ip interface brief
En este punto todavía no necesitamos configurar OSPF ni BGP. Únicamente queremos confirmar que cada dispositivo arranca, reconoce sus interfaces y permite el acceso administrativo.
7. Integrar Containerlab con Ansible
Podemos reutilizar el inventario anterior cambiando las IP de gestión:
---
all:
children:
network:
children:
cisco:
hosts:
cisco01:
ansible_host: 172.31.100.11
arista:
hosts:
arista01:
ansible_host: 172.31.100.12
vyos:
hosts:
vyos01:
ansible_host: 172.31.100.13
Mantenemos los group_vars con los transportes y sistemas operativos correspondientes.
La primera comprobación será obtener la versión de los dispositivos:
ansible-playbook playbooks/01-audit.yml
No utilizaremos ansible.builtin.ping, porque estos equipos de red no son hosts Linux convencionales preparados para ejecutar módulos Python remotos.
Nuestro primer objetivo será que los tres devuelvan correctamente show version.
8. Validar los enlaces de datos
Una vez confirmada la gestión SSH, configuramos únicamente las direcciones IP de los enlaces.
| Enlace | Equipo | Interfaz | Dirección |
|---|---|---|---|
| 1 | Cisco | Gi0 | 10.0.12.1/30 |
| 1 | Arista | Ethernet1 | 10.0.12.2/30 |
| 2 | Arista | Ethernet2 | 10.0.23.1/30 |
| 2 | VyOS | eth1 | 10.0.23.2/30 |
El orden de validación será:
Comprobar que las interfaces están activas.
Verificar la conectividad directa Cisco–Arista.
Verificar la conectividad directa Arista–VyOS.
Aplicar OSPF y comprobar adyacencias.
Configurar BGP entre Arista y VyOS.
En los enlaces de Arista configuraremos no switchport, porque necesitamos interfaces L3.
Cuando los dos enlaces respondan a ping, podremos aplicar los playbooks OSPF y BGP desarrollados en la segunda parte.
9. Guardar y recuperar el laboratorio
Containerlab permite administrar el ciclo de vida de la topología sin tener que gestionar manualmente cada contenedor.
Consultar los nodos:
sudo containerlab inspect -t network.clab.yml
Guardar las configuraciones de los nodos compatibles:
sudo containerlab save -t network.clab.yml
Destruir el laboratorio:
sudo containerlab destroy -t network.clab.yml
Reconstruirlo:
sudo containerlab deploy -t network.clab.yml
Antes de eliminar el laboratorio también realizaremos backups desde Ansible, almacenándolos fuera de los contenedores.
10. Qué tendremos preparado
Al finalizar el montaje dispondremos de una red virtual multi-vendor, con enlaces de datos y gestión independiente.
La ventaja de trabajar así es que podemos modificar topologías, crear nuevas conexiones y reconstruir dispositivos sin depender de hardware físico.
Sobre esta infraestructura podremos realizar automatizaciones progresivamente más avanzadas: routing dinámico, políticas de seguridad, validación de configuraciones, recuperación de fallos y pruebas de cambios antes de llevarlos a producción.