Gestión de redes en Openstack

Índice

En este post se muestra un caso práctica de gestión de redes en un escenario de OpenStack formado por una instancia que funciona como router y otra máquina, conectada a una red interna, que cuenta con un servidor web.

Para generar el escenario se crea, en primer lugar, una red.

openstack network create red-externa

Para configurar la red se crea una subred.

openstack subnet create --network red-externa --subnet-range 192.168.0.0/24 --dns-nameserver 172.22.0.1 subred-externa

Se crea también un router para poder acceder desde la nueva red a Internet.

openstack router create taller3

Por último se conecta el router a la nueva red, por una interfaz y a la red que le da conexión a Internet por la otra.

openstack router set taller3 --external-gateway ext-net
openstack router add subnet taller3 subred-externa

Además de los routers propios de OpenStack, en este tipo de escenarios también se pueden crear instancias que funcionen como router. Para ello, se genera una instancia conectada al router que se acaba de crear.

openstack server create --flavor m1.normal --image "Debian 12 Bookworm" --security-group default --key-name claveSSH --network red-externa maquina-router

La nueva máquina obtiene una IP de la red que se ha creado previamente.

+-------------+-------------+---------+-------------+--------------+-----------+
| ID          | Name        | Status  | Networks    | Image        | Flavor    |
+-------------+-------------+---------+-------------+--------------+-----------+
| 74a0a734-   | maquina-    | ACTIVE  | red-externa | Debian 12    | m1.normal |
| 9d10-4e2e-  | router      |         | =192.168.0. | Bookworm     |           |
| 9041-       |             |         | 214         |              |           |
| e76638f019d |             |         |             |              |           |
| 5           |             |         |             |              |           |
+-------------+-------------+---------+-------------+--------------+-----------+

Para poder acceder a ella se le asocia una IP flotante.

openstack server add floating ip maquina-router 172.22.201.193

Para que esta máquina funciona como router se crea una nueva red interna, se configura creando una subred y se conecta a ella.

openstack network create red-interna
openstack subnet create --network red-interna --subnet-range 10.0.100.0/24 --dns-nameserver 172.22.0.1 subred-interna

Para conectar la maquina-router a la red interna y que funcione como router de esta red conviene que obtenga la primera dirección del pool DHCP que se ha configurado. Para conseguir esto, es necesario usar los puertos de OpenStack.

En primer lugar hay que crear un puerto.

openstack port create --network red-interna --fixed-ip ip-address=10.0.100.1 maquina-router

Después, se conecta la mquina-router a este puerto a través de una nueva interfaz.

openstack server add port maquina-router maquina-router

Como la máquina se conecta al nuevo puerto después de haberse creado, no puede configurar la red de la instancia de forma automática usando cloud init. Para establecer la configuración de la nueva interfaz se usa el fichero /etc/netplan/50-cloud-init.yaml. En él se asigna el direccionamiento a cada interfaz. En este caso, se asigna la IP 10.0.100.1 a la nueva interfaz.

network:
    version: 2
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:47:71:d9
            mtu: 1442
            set-name: ens3
        ens4:
            dhcp4: false
            dhcp6: false
            addresses:
            - 10.0.100.1/24

A continuación, a la nueva red se conecta la maquina-cliente, que tiene una dirección estática. Para asignarle la dirección esática hay que crear de nuevo un puerto antes de crear la máquina y después se crea la instancia conectada a este puerto.

openstack port create --network red-interna --fixed-ip ip-address=10.0.100.200 maquina-cliente
openstack server create --flavor m1.normal --image "Debian 12 Bookworm" --security-group default --key-name ClaveSSH --port maquina-cliente maquina-cliente

Para que la maquina-router puede actuar como router en este escenario, se deben realizar varias configuraciones. En la máquina se activa el bit de forwarding y se añade una regla de SNAT para permitir que el tráfico de la red-interna llegue al exterior.

apt install iptables iptables-persistent
iptables -t nat -A POSTROUTING -o ens3 -s 10.0.100.0/24 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

En el escenario hay que eliminar los grupos de seguridad de ambas máquinas para que no interfieran en las comunicaciones entre las diferentes redes creadas en el proyecto.

openstack server remove security group maquina-router default
openstack server remove security group maquina-cliente default
openstack port set --disable-port-security maquina-router
openstack port set --disable-port-security 6ff1dbe2-f08d-48d3-aa1a-ac65f9244cbe
openstack port set --disable-port-security maquina-cliente

Note

Se deben eliminar los grupos de seguridad para todos los puertos del escenario. En este caso, no es suficiente con eliminar la seguridad de los puertos asociados a las interfaces que conectan a la máquina-router con la máquina- clinete, sino que también hay que eliminar los grupos de seguridad de la interfaz que conecta la máquina-router al router de OpenStack.

Así, se consigue que la máquina-cliente tenga conexión a Internet.

debian@maquina-cliente:~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=103 time=17.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=103 time=18.7 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=103 time=19.2 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=103 time=17.3 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 17.347/18.270/19.243/0.743 ms

En esta instancia, se instala un servidor web.

sudo apt update
sudo apt install git apache2
git clone https://github.com/fjhuete/javi_webte_public
sudo cp -ra javi_webte_public/* /var/www/html/

Para que el servidor web sea accesible desde el exterior, el router tiene que contar con una regla de DNAT que redirija el tráfico HTTP al servidor.

iptables -t nat -A PREROUTING -p tcp --dport 80 -i ens3 -j DNAT --to 10.0.100.200
iptables-save > /etc/iptables/rules.v4

Tras realizar esta configuración, al acceder a la IP flotante de la máquina-router desde un navegador se accede al contenido alojado en el servidor web.

comments powered by Disqus

Relacionados

Instalación desatendida de Debian12

Aquí se recoge una breve guía para la creación de una iso instalable de Debian usando un fichero de preseed.

Leer

Sistemas operativos inmutables

La inmutabilidad de los sistemas operativos se refiere a la característica de estos que impide al usuario modificar libremente el sistema de archivos raíz con el objetivo de evitar los problemas que esto puede provocar. En este post se analizan algunos de estos sistemas operativos y se valoran sus ventajas e inconvenientes.

Leer

Configuración de switches en GNS3

En este post se muestran varios ejemplos de configuración de switches gestionables en el simulador GNS3. A los dispositivos se les aplican configuraciones como la creación de VLAN, la configuración del port bonding entre switches o el uso del port mirroring para monitorizar el tráfico de la red.

Leer