Enrutamiento en OpenStack
En esta práctica, exploraremos la creación de un escenario mediante la orquestación de OpenStack y, posteriormente, llevaremos a cabo el enrutamiento para asegurar la conectividad entre las distintas máquinas virtuales. Este ejercicio nos permitirá comprender y aplicar el uso de OpenStack para gestionar entornos virtuales, además de configurar la red de manera eficiente para facilitar la comunicación entre los diferentes dispositivos en el escenario.
Escenario a montar en OpenStack
Para poder montar nuestro escenario en OpenStack, debido a la situación actual de las imágenes disponibles, necesitaremos preparar una instancia que tenga habilitado el acceso por contraseña. Además, si posteriormente queremos configurar otra a partir de una existente, debemos habilitar el acceso SSH por contraseña para este usuario.
Esta debe crearse con el mismo flavour que el resto del escenario para evitar errores.
Una vez que la instancia esté lista, comprobaremos que se puede iniciar sesión desde Horizon:

Ahora crearemos una instantánea:

Copiaremos el ID de la instantánea:

Y lo añadiremos al fichero:

Y la desplegaremos:

Vemos que se ha creado correctamente:

Esquema gráfico de la configuración
El esquema quedaría de la siguiente manera:

Teniendo la siguiente relación de IPs:
| MAQUINA | IP | INTERFAZ |
|---|---|---|
| PC1 | 10.0.100.144 |  , ens3 |
| R1-PC1 | 10.0.100.68 |  , ens3 |
| R1-R2 | 10.0.110.78 |  , ens4 |
| R2-R1 | 10.0.110.30 |  , ens3 |
| R2-PC2 | 10.0.120.191 |  , ens4 |
| PC2 | 10.0.120.203 |  , ens3 |
| R2-R3 | 10.0.130.146 |  , ens5 |
| R3-R2 | 10.0.130.36 |  , ens3 |
| R3-PC3 | 10.0.140.127 |  , ens4 |
| PC3 | 10.0.140.158 |  , ens3 |
| R1 | ||
|---|---|---|
| 10.0.100.0/24  , | 0.0.0.0 |  , ens3  , |
| 10.0.110.0/24  , | 0.0.0.0 |  , ens4  , |
| 10.0.120.0/24  , | 10.0.110.30 |  , ens4  , |
| 10.0.130.0/24  , | 10.0.110.30 |  , ens4  , |
| 10.0.140.0/24  , | 10.0.110.30 |  , ens4  , |
| 0.0.0.0/0  , | 10.0.110.30 |  , ens4  , |
*Para las redes en las que estamos directamente conectados, las rutas se crearán automáticamente.
| R2 | ||
|---|---|---|
| 10.0.100.0/24  , | 10.0.110.178 |  , ens3  , |
| 10.0.110.0/24  , | 0.0.0.0 |  , ens3  , |
| 10.0.120.0/24  , | 0.0.0.0 |  , ens4  , |
| 10.0.130.0/24  , | 0.0.0.0 |  , ens5  , |
| 10.0.140.0/24  , | 10.0.130.36 |  , ens5  , |
| 0.0.0.0/0  , | 10.0.130.36 |  , ens5  , |
*Para las redes en las que estamos directamente conectados, las rutas se crearán automáticamente.
| R3 | ||
|---|---|---|
| 10.0.100.0/24  , | 10.0.130.146 |  , ens3  , |
| 10.0.110.0/24  , | 10.0.130.146 |  , ens3  , |
| 10.0.120.0/24  , | 10.0.130.146 |  , ens3  , |
| 10.0.130.0/24  , | 0.0.0.0 |  , ens3  , |
| 10.0.140.0/24  , | 0.0.0.0 |  , ens4  , |
| 0.0.0.0/0  , | 10.0.130.146 |  , ens4  , |
Comandos de configuración de cada nodo
Router 1
Como es un router, deberemos activar el bit de forwarding. Para ello, introduciremos el siguiente comando:
echo 1 > /proc/sys/net/ipv4/ip\_forward

Crearemos la tabla de enrutamiento:
Las rutas estáticas:
ip route add 10.0.100.0/24 via 0.0.0.0 dev ens3

La ruta por defecto:
ip route add default via 10.0.110.30 dev ens4

Nos quedaría así la tabla de enrutamiento:

PC1
Borraremos la ruta por defecto existente en el dispositivo:

Y añadiremos la nueva ruta:

Router 2
Como es un router, deberemos activar el bit de forwarding. Para ello, introduciremos el siguiente comando:
echo 1 > /proc/sys/net/ipv4/ip\_forward

Crearemos la tabla de enrutamiento:

Quedaría así:

PC2
Al igual que hicimos anteriormente, eliminaremos la ruta por defecto y añadiremos la nueva:


Activaremos el bit de forwarding con el siguiente comando:
echo 1 > /proc/sys/net/ipv4/ip\_forward

Crearemos la tabla de enrutamiento para nuestro escenario:

La tabla de enrutamiento quedaría así:

PC3
Al igual que con los demás, deberemos cambiar la ruta por defecto por la IP del router al que estemos conectados:

Resumen de configuración y aclaraciones
Para los routers
- Activar el bit de forwarding
- Crear las tablas de enrutamiento
- Modificar la ruta por defecto
Para los PCs
- Modificar la ruta por defecto
La modificación de la ruta por defecto es necesaria ya que no es posible modificar la configuración de las tarjetas de red, y por tanto, la puerta de enlace.
Por defecto, al utilizar el script, la puerta de enlace es X.X.X.1. Sin embargo, esta no coincide con la de los clientes.
Para los routers, también debemos modificarla para indicar por dónde se enviará el tráfico por defecto.
Si queremos que el bit de forwarding se guarde permanentemente para que, al reiniciar el equipo, este no vuelva a 0:
–> Escribimos directamente en el archivo /etc/sysctl.conf:

Para volcar la configuración de las tablas de enrutamiento en un archivo y tener una copia de seguridad, usamos:

Si queremos restaurar la copia:

Verificación de conectividad (ping) entre nodos
PC1
PC1 – PC2

PC1-PC3

PC2
PC2-PC1

PC2-PC3

PC3
PC3-PC1

PC3-PC2

Captura de tráfico en el router R2 o R3 mostrando el tráfico entre H1 y H3.
Para hacer una captura de una determinada interfaz y guardarla en un archivo utilizaremos tcpdump:
tcpdump -i NOMBRE\_INTERFAZ -w NOMBRE\_ARCHIVO

Si queremos tener una salida del comando en lugar de guardar el archivo, usaremos el parámetro -n. Aquí vemos cómo llegan los ICMP REQUEST de PC3 a PC1 y los ICMP REPLY de PC1 a PC3.

Además, he capturado una petición y respuesta ARP de PC3:

