Escenario en OpenStack
Descripción
En esta tarea se va a crear el escenario de trabajo que se va a usar durante todo el curso, que va a constar inicialmente de 4 máquinas: 2 instancias en OpenStack y dos contenedores LXC que se ejecutarán en una de las instancias.
Para nombrar las máquinas se va a utilizar alfa, bravo, charlie y delta, que son las primeras letras de un alfabeto que nació antes de la Primera Guerra Mundial en respuesta a los avances en la radio bidireccional compatible con la voz, para mejorar la comunicación en circuitos telefónicos de baja calidad y de larga distancia.
Además el dominio será un subdominio de la forma tunombre.gonzalonazareno.org. De esta forma tendremos:
- Máquina 1: Instancia en OpenStack con Debian 11 Bullseye que se llama
alfa.tunombre.gonzalonazareno.org. - Máquina 2: Instancia en OpenStack con Rocky Linux 9 que se llama
bravo.tunombre.gonzalonazareno.org. - Máquina 3: Contenedor LXC con Ubuntu 20.04 que se llama
charlie.tunombre.gonzalonazareno.org. - Máquina 4: Contenedor LXC con Ubuntu 20.04 que se llama
delta.tunombre.gonzalonazareno.org.
La creación y configuración (conexión a las redes, creación de volumen, quitarle la seguridad alos puertos, …) de la máquina1 (alfa) la debes hacer con OSC. Lo demás lo puedes hacer con horizon.
Escenario

Instalación de las instancias en OpenStack
Creamos una red interna que se llame Red DMZ de tu_usuario, con las siguientes características:
- Direccionamiento: `172.16.0.0/16`.
- Con DHCP y DNS: `192.168.202.2`.
- La puerta de enlace de los dispositivos conectados a esta red será el `172.16.0.1`.
openstack network create Red\ DMZ\ de\ mariajesus
openstack subnet create --network Red DMZ de mariajesus --subnet-range 172.16.0.0/16 --dhcp --gateway 172.16.0.0 --dns-nameserver 192.168.202.2 Red\ DMZ\ de\ mariajesus
- Las dos instancias que vamos a crear se van a configurar con cloud-init de la siguiente manera:
- Deben actualizar los paquetes de la distribución de la instancia.
- El dominio utilizado será del tipo
tunombre.gonzalonazareno.org. Por lo tanto en la configuración con cloud-init habrá que indicar el hostname y el FQDN. - Se crearán dos usuarios:
- Un usuario sin privilegios. Se puede llamar como quieras (pero el nombre será el mismo en todas las máquinas) y accederás a las máquinas usando tu clave ssh privada.
- Un usuario
profesor, que puede utilizar sudo sin contraseña. Copia de las claves públicas de todos los profesores en las instancias para que puedan acceder con el usuarioprofesor.
- Cambia la contraseña al usuario root.
Creación de la máquina1 (alfa):
- Crea una instancia sobre un volumen de 30Gb, usando una imagen de **Debian 11 Bullseye**. Elige el sabor `vol.medium`. Y configuralá con `cloud-init` como se ha indicado anteriormente.
- Está instancia estará conectada a tu red interna. Asigna a la instancia una IP flotante.
openstack volume create --image "Debian 11 Bullseye" --size 30 vol.alfa
----
openstack server create --flavor vol.medium \
--volume vol.alfa \
--security-group default \
--key-name pass \
--network "red de mariajesus.alloza" \
--user-data config-alfa.yaml \
alfa
----
openstack floating ip create ext-net
openstack server add floating ip alfa 172.22.201.46
- Fichero config-alfa.yaml
#cloud-config
package_update: true
package_upgrade: true
preserve_hostname: false
fqdn: alfa.mariajesus.gonzalonazareno.org
hostname: alfa
# Crear un usuario y añadir clave pública ssh
users:
- name: profesor
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
passwd:
ssh_authorized_keys:
ssh-rsa AAAA************** jose@debian
ssh-rsa AAAA************** rafa@eco
- name: maria
shell: /bin/bash
passwd: debian
ssh_authorized_keys:
ssh-rsa *************************************************** maria@debian
chpasswd:
list: |
root:AkfJE64jFke82
expire: False
Configuración de la máquina1 (alfa):
- Conecta la instancia a tu Red DMZ, asígnale la dirección 172.16.0.1 para que sea la puerta de enlace las máquinas conectadas a esta red.
openstack port create --network Red\ DMZ\ de\ mariajesus --fixed-ip ip-address=172.16.0.1 alfa-port
openstack server add port alfa alfa-port
- Deshabilita la seguridad de los puertos en las dos interfaces de red para que funcione de manera adecuada el NAT.
openstack server remove security group alfa
openstack port set --disable-port-security alfa-port
openstack port set --disable-port-security
- Configura de forma permanente la regla SNAT para que las máquinas de la Red DMZ tengan acceso a internet.
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o ens3 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
Creación de la máquina2 (bravo):
-
Está instancia se conectará a la red DMZ. Usando un puerto asigna a esta máquina la dirección 172.16.0.200.
-
Crea una instancia sobre un volumen de 30Gb, usando una imagen de Rocky Linux 9. Elige el sabor vol.normal. Y configurala con cloud-init como se ha indicado anteriormente.
openstack volume create --image "Rocky Linux 9" --size 30 vol.bravo
openstack port create --network Red\ DMZ\ de\ mariajesus --fixed-ip ip-address=172.16.0.200 bravo-port
----
openstack server create --flavor vol.normal \
--volume vol.bravo \
--security-group default \
--key-name pass \
--port bravo-port \
--user-data config-bravo.yaml \
bravo
- Fichero config-bravo.yaml
#cloud-config
package_update: true
package_upgrade: true
preserve_hostname: false
fqdn: bravo.mariajesus.gonzalonazareno.org
hostname: bravo
# Crear un usuario y añadir clave pública ssh
users:
- name: profesor
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
passwd:
ssh_authorized_keys:
ssh-rsa AAAA************** jose@debian
ssh-rsa AAAA************** rafa@eco
- name: maria
shell: /bin/bash
passwd: debian
ssh_authorized_keys:
ssh-rsa *************************************************** maria@debian
chpasswd:
list: |
root:AkfJE64jFke82
expire: False
-
Deshabilita la seguridad de los puertos en la interfaz de red para que funcione de manera adecuada el NAT.
-
Comprueba que tiene acceso a internet. Si no tiene acceso a internet, no se han actualizado los paquetes con cloud-init, hazlo posteriormente.
Instalación de los contenedores LXC
En maquina1 vamos a crear dos contenedores en un red interna, para ello:
-
Crea en máquina1 (alfa) un linux bridge llamado
br-intray asigna una dirección IP estática192.168.0.1. Esta será la IP de máquina1 (alfa) conectada a este switch virtual y será la puerta de enlace de los contenedores. -
Instalamos el paquete
bridge-utilsyqemu-kvmpara crear el bridge.
apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst
apt install bridge-utils
- Definimos el archivo br-intra.xml
<network>
<name>br-intra</name>
<bridge name='br-intra'/>
<forward/>
<ip address='192.168.0.1' netmask='255.255.255.0'>
</ip>
</network>
- Creamos el bridge
virsh net-define br-intra.xml
virsh net-start br-intra
virsh net-autostart br-intra
- Instala LXC y crea dos contenedores con la distribución Ubuntu 20.04. Estos contenedores serán la máquina3 (charlie) y la máquina4 (delta).
sudo apt install lxc
- Creamos los contenedores
lxc-create -n charlie -t ubuntu -- -r focal
lxc-create -n delta -t ubuntu -- -r focal
- Configura de forma permanente la regla SNAT para que los contenedores tengan acceso a internet.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens3 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
- Conecta los contenedores al bridge
br-intray configúralo de forma estática con las siguientes direcciones: máquina3 (charlie) la192.168.0.2y máquina4 (delta) la192.168.0.3.
CHARLIE
lxc-start -n charlie
nano /var/lib/lxc/charlie/config
----
lxc.net.0.type = veth
lxc.net.0.link = br-intra
lxc.net.0.flags = up
---
lxc-stop -n charlie
lxc-start -n charlie
lxc-attach -n charlie
vim /etc/netplan/10-lxc.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.0.2/24]
gateway4: 192.168.0.1
netplan apply
DELTA
lxc-start -n delta
nano /var/lib/lxc/delta/config
----
lxc.net.0.type = veth
lxc.net.0.link = br-intra
lxc.net.0.flags = up
---
lxc-stop -n delta
lxc-start -n delta
lxc-attach -n delta
vim /etc/netplan/10-lxc.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [192.168.0.3/24]
gateway4: 192.168.0.1
netplan apply
- Para que la red de OpenStack funcione de forma adecuada las imágenes que usamos tienen configurado la mtu (Unidad máxima de transferencia) a 1450 bytes. Tenemos que adecuar los contenedores a este tamaño de trama. Para ello introduce en la configuración de los contenedores la línea:
lxc.net.0.mtu = 1450.
echo "lxc.net.0.mtu = 1450" >> /var/lib/lxc/charlie/config
echo "lxc.net.0.mtu = 1450" >> /var/lib/lxc/delta/config
- Configura los contenedores para que se auto inicien al reiniciar la instancia.
echo "lxc.start.auto = 1" >> /var/lib/lxc/charlie/config
echo "lxc.start.auto = 1" >> /var/lib/lxc/delta/config
-
Los contenedores tendrán características parecidas a las instancias anteriormente:
-
Debes actualizar los paquetes de la distribución instalada.
lxc-attach -n charlie -- apt install openssh-server
lxc-attach -n delta -- apt install openssh-server
- El dominio utilizado será del tipo
tunombre.gonzalonazareno.org. Por lo tanto configura de manera adecuda el hostname y el FQDN.
lxc-attach -n charlie -- hostnamectl set-hostname
charlie.maria.gonzalonazareno.org
lxc-attach -n delta -- hostnamectl set-hostname
delta.maria.gonzalonazareno.org
lxc-attach -n charlie -- hostnamectl
lxc-attach -n delta -- hostnamectl
- Para acceder a los contenedores vamos a usar ssh.
ssh ubuntu@192.168.0.2
ssh ubuntu@192.168.0.3
ssh-copy-id -i ~/.ssh/pass -o ProxyJump=maria@172.22.201.46 maria@192.168.0.2
ssh-copy-id -i ~/.ssh/pass -o ProxyJump=maria@172.22.201.46 maria@192.168.0.3
Crea dos usuarios:
- Un usuario sin privilegios. Se puede llamar como quieras (el nombre de usuario que usaste en las instancias) y accederás a los contenedores usando tu clave ssh privada.
lxc-attach -n charlie -- adduser maria
lxc-attach -n delta -- adduser maria
-
Un usuario
profesor, que puede utilizar sudo sin contraseña. Copia de las claves públicas de todos los profesores en los contenedores para que puedan acceder con el usuarioprofesor. -
Añadimos el usuario
profesora los contenedores.
lxc-attach -n charlie -- adduser profesor
lxc-attach -n delta -- adduser profesor
- Modificamos el ficher /etc/sudoers para que el usuario
profesorpueda utilizar sudo sin contraseña.
#CHARLIE
ssh -J maria@172.22.201.46 ubuntu@192.168.0.2
sudo visudo
---
profesor ALL=(ALL) NOPASSWD:ALL
-----
#DELTA
ssh -J maria@172.22.201.46 ubuntu@192.168.0.3
sudo visudo
---
profesor ALL=(ALL) NOPASSWD:ALL
-----
- Copiamos las claves públicas de los profesores en los contenedores.
#CHARLIE
ssh -J maria@172.22.201.46 ubunto@192.168.0.2
mkdir /home/profesor/.ssh
vim /home/profesor/.ssh/authorized_keys
#DELTA
sh -J maria@172.22.201.46 ubunto@192.168.0.3
mkdir /home/profesor/.ssh
vim /home/profesor/.ssh/authorized_keys
- Cambia la contraseña al usuario
root.
lxc-attach -n charlie -- passwd
#root
lxc-attach -n delta -- passwd
#root
Pruebas
-
Comprobación de los FQDN y acceso por ssh
- ALFA

- BRAVO

- CHARLIE

- DELTA

-
Comprobación de acceso a internet
- ALFA

- BRAVO

- CHARLIE

- DELTA
