Gestión de redes en Openstack
- Francisco Javier Huete
- Servicios
- January 13, 2025
Í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.