Creación Del Escenario De Trabajo En Openstack

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 3 instancias con nombres relacionados con el libro “Don Quijote de la Mancha”.

Pasos a realizar:

1. Creación de la red interna:

Vamos a llevar a cabo la creación de la red interna 10.0.1.0/24, a la cuál pertenecerán las máquinas Dulcinea, Sancho y Quijote.

Antes de nada, para trabajar con el cloud tendremos que levantar la VPN:

systemctl start openvpn.service

Una vez estemos dentro de nuestro gestor de proyectos de OpenStack, empezaremos la creación de la red. Nos dirigimos al apartado Redes, y seleccionamos la opción + Crear red:

Se nos abre esta ventana en la que estableceremos la configuración de la nueva red:

Indicamos la dirección de la red y deshabilitamos la puerta de enlace ya que no nos va hacer falta debido a que vamos a poner a Dulcinea como gateway:

Dejamos marcada la opción de Habilitar DHCP que viene de manera predeterminada, para que de esta forma, nos dé una dirección IP de manera automática cuando levantemos las instancias.

Y esta sería la red que hemos creado:

2. Creación de las instancias:

Vamos a realizar el proceso de la creación de Dulcinea. Esta máquina hará de puerta de enlace para el resto de máquinas de la red 10.0.1.0/24.

Vamos a crear las instancias a partir de un volumen con una imagen, por tanto, creamos el volumen:

Dulcinea incorporará un sistema Debian Buster 10.6.

Una vez hemos creado el volumen, podemos crear la instancia a partir de éste. Asignamos un nombre a la instancia:

Establecemos que el origen de arranque sea el volumen creado previamente:

Como Sabor indicamos que tenga un m1.mini.

Y por último, le asignamos las redes a las que va a pertenecer esta máquina.

Dulcinea necesita conectividad al exterior, ya que con ella vamos a hacer NAT, por tanto le asignamos una IP flotante. El resultado de la máquina creada sería este:

Comprobamos que nos podemos conectar a Dulcinea mediante nuestro par de claves, ya que tengo configurado para que todas las instancias que se creen posean mi clave pública, para así yo poder identificarme con mi clave privada. Introduzco la opción -A, que sirve para que la máquina Dulcinea, nos herede las claves de la primera, de forma que así podremos establecer una conexión mediante el par de claves con las máquinas Sancho y Quijote.

javier@debian:~$ ssh -A debian@172.22.200.183
The authenticity of host '172.22.200.183 (172.22.200.183)' can't be established.
ECDSA key fingerprint is SHA256:1wDmV/NJYTeQhItsUhSJlPsidjDLiqt0oUOmx+e3d8M.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.22.200.183' (ECDSA) to the list of known hosts.
Linux dulcinea 4.19.0-11-cloud-amd64 #1 SMP Debian 4.19.146-1 (2020-09-17) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

debian@dulcinea:~$

Vamos a repetir el mismo proceso para crear la máquina Sancho que incorporará un sistema Ubuntu 20.04.

Creamos el volumen:

El resultado de la instancia creada sería este:

Comprobamos que desde Dulcinea nos podemos conectar a esta nueva máquina:

debian@dulcinea:~$ ssh ubuntu@10.0.1.8
The authenticity of host '10.0.1.8 (10.0.1.8)' can't be established.
ECDSA key fingerprint is SHA256:LNxHmLUNlXhnC2jDs2DZ6EAs+4kPca2/LBCtKfmNtLQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.1.8' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat Nov 14 18:03:38 UTC 2020

  System load:  0.08              Processes:             95
  Usage of /:   12.8% of 9.52GB   Users logged in:       0
  Memory usage: 35%               IPv4 address for ens3: 10.0.1.8
  Swap usage:   0%

1 update can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

ubuntu@sancho:~$

Y por último repetimos el proceso para crear a Quijote que incorporará un sistema CentOS 7.

Creamos el volumen:

El resultado de la instancia creada sería este:

Comprobamos que desde Dulcinea nos podemos conectar a esta nueva máquina:

debian@dulcinea:~$ ssh centos@10.0.1.13
The authenticity of host '10.0.1.13 (10.0.1.13)' can't be established.
ECDSA key fingerprint is SHA256:kZHztAbFW707wQg8BfcVd8+R/Kp/DZJseK5kwLO/xTU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.1.13' (ECDSA) to the list of known hosts.

[centos@quijote ~]$

3. Configuración de NAT en Dulcinea (Es necesario deshabilitar la seguridad en todos los puertos de Dulcinea) Ver este vídeo.

Para hacer NAT en Dulcinea y que así Quijote y Sancho tengan acceso a internet, tenemos que modificar el grupo de seguridad de Dulcinea y deshabilitar la seguridad de todos sus puertos, es decir, quitarle las reglas de cortafuegos, para luego añadirle nuestra propia regla de iptables.

Para ello tenemos que configurar OpenStack para administrar nuestro proyecto desde la línea de comandos, que es desde donde vamos a realizar este proceso.

Vamos a crear un entorno virtual y trabajaremos desde aquí. Es necesario instalar estos paquetes:

apt install python-virtualenv python3-pip -y

Creamos nuestro entorno virtual:

javier@debian:~/openstack$ python3 -m venv openstack

javier@debian:~/openstack$ source openstack/bin/activate

(openstack) javier@debian:~/openstack$

Una vez estemos en nuestro entorno virtual, vamos a realizar la instalación del paquete python-openstackclient, que es el que necesitamos para administrar nuestra cuenta de OpenStack. Antes de realizar la instalación recomiendo actualizar la herramienta pip.

(openstack) javier@debian:~/openstack$ pip install --upgrade pip

(openstack) javier@debian:~/openstack$ pip install python-openstackclient

Una vez tenemos instalado este paquete, nos quedaría vincular nuestra cuenta. Para llevar a cabo el proceso de vinculación, debemos dirigirnos desde el navegador hacia el gestor de nuestro proyecto, e irnos al apartado de Acceso y seguridad y Acceso a la API. Obtendremos esta salida:

Podemos observar que nos muestra unos ficheros para descargar, debemos hacer click en el llamado Descargar fichero RC de OpenStack v3. Una vez descargado, lo movemos al directorio donde hemos creado el entorno virtual.

(openstack) javier@debian:~/openstack$ ls
 openstack  'Proyecto de javier.perezh-openrc.sh'

En mi caso, el archivo descargado recibe el nombre Proyecto de javier.perezh-openrc.sh, y en él, vamos a introducir la siguiente línea, donde especificaremos la ruta donde se encuentra el certificado del Gonzalo Nazareno, que es la entidad que maneja los proyectos de OpenStack, entre los cuáles se encuentra el mío.

export OS_CACERT=/etc/ssl/certs/gonzalonazareno.crt

En este punto, ya podríamos iniciar el proceso de vinculación desde la terminal. Ejecutamos el siguiente comando para verificar nuestras credenciales e iniciar sesión.

(openstack) javier@debian:~/openstack$ source 'Proyecto de javier.perezh-openrc.sh'
Please enter your OpenStack Password for project Proyecto de javier.perezh as user javier.perezh:

Si hemos introducido correctamente la contraseña, ya podríamos administrar nuestro proyecto desde la terminal. Por ejemplo, podemos listar nuestras instancias:

javier@debian:~/openstack$ openstack server list
+--------------------------------------+-------------+--------+---------------------------------------------------------------------------------------+-------+---------+
| ID                                   | Name        | Status | Networks                                                                              | Image | Flavor  |
+--------------------------------------+-------------+--------+---------------------------------------------------------------------------------------+-------+---------+
| 5c572aa6-3ca4-49a8-8e1c-b9f472988b84 | Quijote     | ACTIVE | red interna de javier.perezh=10.0.1.13                                                |       | m1.mini |
| 044c375b-d088-4165-8668-a55775f9fabb | Sancho      | ACTIVE | red interna de javier.perezh=10.0.1.8                                                 |       | m1.mini |
| 73f609c8-9724-4e54-818d-a9bdf0cb43fe | Dulcinea    | ACTIVE | red de javier.perezh=10.0.0.8, 172.22.200.183; red interna de javier.perezh=10.0.1.11 |       | m1.mini |
| 650210f7-e31c-40e7-8a9d-53b7e6cb038e | PracticaDNS | ACTIVE | red de javier.perezh=10.0.0.11, 172.22.200.174                                        |       | m1.mini |
+--------------------------------------+-------------+--------+---------------------------------------------------------------------------------------+-------+---------+

Vemos como nos muestra las instancias creadas, entre las cuáles se encuentran las tres que formarán el escenario, Quijote, Sancho y Dulcinea.

Antes estuvimos realizando las comprobaciones de que efectivamente nos podíamos conectar a estas máquinas, esto se debe a que tiene un grupo de seguridad asociado, llamado default, que por defecto se asocia a las instancias que lanzamos, y que permite esta opción, entre otras.

Lo que vamos a hacer es eliminar este grupo de seguridad a Dulcinea, por tanto, ya no podríamos conectarnos a ella, pero luego vamos a deshabilitar la seguridad de puertos, y ya de nuevo, sería accesible mediante SSH.

Primeramente. vamos a ver los detalles de esta instancia:

(openstack) javier@debian:~/openstack$ openstack server show Dulcinea
+-----------------------------+---------------------------------------------------------------------------------------+
| Field                       | Value                                                                                 |
+-----------------------------+---------------------------------------------------------------------------------------+
| OS-DCF:diskConfig           | AUTO                                                                                  |
| OS-EXT-AZ:availability_zone | nova                                                                                  |
| OS-EXT-STS:power_state      | Running                                                                               |
| OS-EXT-STS:task_state       | None                                                                                  |
| OS-EXT-STS:vm_state         | active                                                                                |
| OS-SRV-USG:launched_at      | 2020-11-14T17:44:11.000000                                                            |
| OS-SRV-USG:terminated_at    | None                                                                                  |
| accessIPv4                  |                                                                                       |
| accessIPv6                  |                                                                                       |
| addresses                   | red de javier.perezh=10.0.0.8, 172.22.200.183; red interna de javier.perezh=10.0.1.11 |
| config_drive                |                                                                                       |
| created                     | 2020-11-14T17:43:42Z                                                                  |
| flavor                      | m1.mini (12)                                                                          |
| hostId                      | 1cd650c7bff842c92682e8bc3d0d184f4ddcc2e41fc41ae8487eeb6a                              |
| id                          | 73f609c8-9724-4e54-818d-a9bdf0cb43fe                                                  |
| image                       | N/A (booted from volume)                                                              |
| key_name                    | msi_debian_clave_publica                                                              |
| name                        | Dulcinea                                                                              |
| progress                    | 0                                                                                     |
| project_id                  | 678e0304a62c445ba78d3b825cb4f1ab                                                      |
| properties                  |                                                                                       |
| security_groups             | name='default'                                                                        |
|                             | name='default'                                                                        |
| status                      | ACTIVE                                                                                |
| updated                     | 2020-11-14T17:44:12Z                                                                  |
| user_id                     | fc6228f3de9b2e4abfc00a526192e37c323cde31412ffd98d1bf7c584915f35a                      |
| volumes_attached            | id='dab6f14b-ec83-4d5a-9940-0f4bb35f864a'                                             |
+-----------------------------+---------------------------------------------------------------------------------------+

Vemos como efectivamente posee el grupo de seguridad default comentando anteriormente.

Procedemos a eliminar este grupo de seguridad:

(openstack) javier@debian:~/openstack$ openstack server remove security group Dulcinea default

Si vemos de nuevo los detalles de Dulcinea:

(openstack) javier@debian:~/openstack$ openstack server show Dulcinea
+-----------------------------+---------------------------------------------------------------------------------------+
| Field                       | Value                                                                                 |
+-----------------------------+---------------------------------------------------------------------------------------+
| OS-DCF:diskConfig           | AUTO                                                                                  |
| OS-EXT-AZ:availability_zone | nova                                                                                  |
| OS-EXT-STS:power_state      | Running                                                                               |
| OS-EXT-STS:task_state       | None                                                                                  |
| OS-EXT-STS:vm_state         | active                                                                                |
| OS-SRV-USG:launched_at      | 2020-11-14T17:44:11.000000                                                            |
| OS-SRV-USG:terminated_at    | None                                                                                  |
| accessIPv4                  |                                                                                       |
| accessIPv6                  |                                                                                       |
| addresses                   | red de javier.perezh=10.0.0.8, 172.22.200.183; red interna de javier.perezh=10.0.1.11 |
| config_drive                |                                                                                       |
| created                     | 2020-11-14T17:43:42Z                                                                  |
| flavor                      | m1.mini (12)                                                                          |
| hostId                      | 1cd650c7bff842c92682e8bc3d0d184f4ddcc2e41fc41ae8487eeb6a                              |
| id                          | 73f609c8-9724-4e54-818d-a9bdf0cb43fe                                                  |
| image                       | N/A (booted from volume)                                                              |
| key_name                    | msi_debian_clave_publica                                                              |
| name                        | Dulcinea                                                                              |
| progress                    | 0                                                                                     |
| project_id                  | 678e0304a62c445ba78d3b825cb4f1ab                                                      |
| properties                  |                                                                                       |
| status                      | ACTIVE                                                                                |
| updated                     | 2020-11-14T17:44:12Z                                                                  |
| user_id                     | fc6228f3de9b2e4abfc00a526192e37c323cde31412ffd98d1bf7c584915f35a                      |
| volumes_attached            | id='dab6f14b-ec83-4d5a-9940-0f4bb35f864a'                                             |
+-----------------------------+---------------------------------------------------------------------------------------+

Podemos apreciar como ya no nos muestra el apartado security_groups ya que no posee ningún grupo de seguridad, lo que significa por tanto, que lo hemos eliminado.

Al eliminar el grupo de seguridad, se habilita un cortafuegos por defecto de OpenStack, que es la seguridad del puerto, que no permite el tráfico.

Por tanto, si ahora intentamos hacer un ping, o conectarnos mediante SSH:

(openstack) javier@debian:~/openstack$ ping 172.22.200.183
PING 172.22.200.183 (172.22.200.183) 56(84) bytes of data.
^C
--- 172.22.200.183 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 106ms

(openstack) javier@debian:~/openstack$ ssh debian@172.22.200.183
^C

Ya no responde y por tanto hemos perdido la conectividad a ella.

Si miramos la lista de los puertos:

javier@debian:~/openstack$ openstack port list
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------+--------+
| ID                                   | Name | MAC Address       | Fixed IP Addresses                                                       | Status |
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------+--------+
| 2531063e-74f3-44d3-a268-0d2868599eee |      | fa:16:3e:2b:1c:c7 | ip_address='10.0.0.8', subnet_id='98c0ae2f-d2ee-48a3-9122-f1369a6e99b3'  | ACTIVE |
| 2cffa116-c4b4-45e5-865f-5c40f6868eaa |      | fa:16:3e:5c:3d:c5 | ip_address='10.0.1.13', subnet_id='87427d1a-bd9d-400a-935b-02c56aaf7748' | ACTIVE |
| 34576fb0-2015-4d8d-b4c4-4e506713a84b |      | fa:16:3e:08:8c:c3 | ip_address='10.0.1.1', subnet_id='87427d1a-bd9d-400a-935b-02c56aaf7748'  | ACTIVE |
| 4b74d3ee-c877-4c20-820d-69e502c51034 |      | fa:16:3e:28:24:d0 | ip_address='10.0.0.2', subnet_id='98c0ae2f-d2ee-48a3-9122-f1369a6e99b3'  | ACTIVE |
| 50c06762-bfce-499f-95b3-ef3a3708f906 |      | fa:16:3e:4b:ab:f9 | ip_address='10.0.0.1', subnet_id='98c0ae2f-d2ee-48a3-9122-f1369a6e99b3'  | ACTIVE |
| a849802c-5c9d-41c1-94c5-59226fb2fe1a |      | fa:16:3e:65:96:2b | ip_address='10.0.0.11', subnet_id='98c0ae2f-d2ee-48a3-9122-f1369a6e99b3' | ACTIVE |
| e1517753-2766-4856-a1aa-9f6df4e70d8d |      | fa:16:3e:24:f3:f9 | ip_address='10.0.1.11', subnet_id='87427d1a-bd9d-400a-935b-02c56aaf7748' | ACTIVE |
| e225a306-9713-4e4a-bd14-888c01479784 |      | fa:16:3e:84:9b:94 | ip_address='10.0.1.8', subnet_id='87427d1a-bd9d-400a-935b-02c56aaf7748'  | ACTIVE |
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------+--------+

Sabiendo que Dulcinea posee dos puertos, y estos corresponden a las IPs de Dulcinea, es decir, la 10.0.0.8 y la 10.0.1.11, podemos apreciar el ID de cada uno de los puertos, las MAC, … Nos interesan los ID de los puertos, ya que necesitamos utilizar el siguiente comando para deshabilitar la seguridad de estos puertos:

(openstack) javier@debian:~/openstack$ openstack port set --disable-port-security 2531063e-74f3-44d3-a268-0d2868599eee
(openstack) javier@debian:~/openstack$ openstack port set --disable-port-security e1517753-2766-4856-a1aa-9f6df4e70d8d

Una vez hemos deshabilitado el cortafuegos que establece la seguridad del puerto, la máquina vuelve a estar accesible, ya que ahora la máquina tiene abiertos todo el rango de puertos completo, porque ahora no posee ningún cortafuegos.

Obviamente esto, no es recomendable en situaciones donde la máquina no se encuentre en un entorno que tengamos controlado, yo lo hago porque Dulcinea se encuentra en una nube privada, además de que vamos a establecer un cortafuegos desde dentro de la instancia.

Si volvemos a hacerle ping y a intentar una conexión mediante SSH:

(openstack) javier@debian:~/openstack$ ping 172.22.200.183
PING 172.22.200.183 (172.22.200.183) 56(84) bytes of data.
64 bytes from 172.22.200.183: icmp_seq=1 ttl=61 time=94.7 ms
64 bytes from 172.22.200.183: icmp_seq=2 ttl=61 time=181 ms
64 bytes from 172.22.200.183: icmp_seq=3 ttl=61 time=111 ms
^C
--- 172.22.200.183 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 94.691/128.790/180.895/37.426 ms

(openstack) javier@debian:~/openstack$ ssh -A debian@172.22.200.183
Linux dulcinea 4.19.0-11-cloud-amd64 #1 SMP Debian 4.19.146-1 (2020-09-17) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Nov 14 17:48:05 2020 from 172.23.0.46

debian@dulcinea:~$

Vemos que Dulcinea es completamente accesible.

4. Definición de contraseña en todas las instancias (para poder modificarla desde consola en caso necesario).

Vamos a establecerle contraseñas a los usuarios, tanto al usuario sin privilegios como a root, de las tres instancias. Normalmente no nos va a ser necesario ya que accedemos mediante el par de claves, pero es muy recomendable para poder acceder a ellas si fuera necesario mediante la consola. Para ello vamos a utilizar la herramienta passwd.

Dulcinea:

root@dulcinea:/home/debian# passwd debian
New password:
Retype new password:
passwd: password updated successfully

root@dulcinea:/home/debian# passwd root
New password:
Retype new password:
passwd: password updated successfully

Sancho:

root@sancho:/home/ubuntu# passwd ubuntu
New password:
Retype new password:
passwd: password updated successfully

root@sancho:/home/ubuntu# passwd root
New password:
Retype new password:
passwd: password updated successfully

Quijote:

[root@quijote centos]# passwd centos
Changing password for user centos.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

[root@quijote centos]# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

5. Modificación de las instancias sancho y quijote para que usen direccionamiento estático y dulcinea como puerta de enlace.

Para realizar este paso, en Dulcinea debemos habilitar el bit de forward y añadir la regla de iptables necesaria.

Para habilitar el bit de forward de manera permanente necesitamos editar el siguiente fichero de configuración:

root@dulcinea:~# nano /etc/sysctl.conf

Dentro de este, debemos buscar la línea #net.ipv4.ip_forward=1 y descomentarla.

Ejecutamos el siguiente comando para aplicar los cambios:

root@dulcinea:~# sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1

Nos faltaría añadir la regla de iptables necesaria, para ello vamos a visualizar nuestras interfaces de red:

root@dulcinea:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:2b:1c:c7 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.8/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 83294sec preferred_lft 83294sec
    inet6 fe80::f816:3eff:fe2b:1cc7/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:24:f3:f9 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.11/24 brd 10.0.1.255 scope global dynamic eth1
       valid_lft 83294sec preferred_lft 83294sec
    inet6 fe80::f816:3eff:fe24:f3f9/64 scope link
       valid_lft forever preferred_lft forever

Queremos que todo el tráfico que provenga de la red 10.0.1.0/24, sea reconducido hacia la interfaz eth0 para que así salga por esta, por tanto la regla a añadir es:

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE

Hemos habilitado el bit de forward y hemos añadido la regla de iptables que necesitamos para que todo el tráfico que provenga de la red 10.0.1.0/24, salga por la interfaz eth0, que es la red que se conecta con el exterior, por tanto ya habríamos configurado lo necesario en Dulcinea.

Importante: es muy recomendable instalar el paquete iptables-persistent, ya que esto hará que en cada arranque del sistema las reglas que hemos configurado se levanten automáticamente, siempre y cuando las guardemos en el fichero /etc/iptables/rules.v4. Por tanto vamos a guardar esta regla para que se levente en cada inicio:

iptables-save > /etc/iptables/rules.v4

Dulcinea

Vamos a establecerle una IP estática. Como se trata de un sistema operativo Debian, debemos editar el fichero /etc/network/interfaces.

nano /etc/network/interfaces

En este fichero vamos a escribir la siguiente configuración:

# The normal eth0
allow-hotplug eth0
iface eth0 inet static
address 10.0.0.8
netmask 255.255.255.0
gateway 10.0.0.1

# Additional interfaces, just in case we're using
# multiple networks

allow-hotplug eth1
iface eth1 inet static
address 10.0.1.11
netmask 255.255.255.0

En este bloque indicamos que:

Reiniciamos y aplicamos los cambios en las interfaces de red:

systemctl restart networking

Sancho

Para establecer el direccionamiento estático en Ubuntu, debemos editar el fichero /etc/netplan/50-cloud-init.yaml.

nano /etc/netplan/50-cloud-init.yaml

En este fichero nos encontramos con esta configuración predeterminada:

network:
    version: 2
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:84:9b:94
            mtu: 8950
            set-name: ens3

Debemos sustituirlo por este bloque, en el que indicamos que el DHCP4 pasa a ser desactivado, que la IP estática que le estamos asignando es la 10.0.1.8, cuya máscara de red es una 255.255.255.0, de ahí el /24, que la puerta de enlace es la 10.0.1.11, es decir, la IP de Dulcinea, y que utilice esos DNS indicados.

network:
    version: 2
    ethernets:
        ens3:
            dhcp4: false
            match:
                macaddress: fa:16:3e:84:9b:94
            mtu: 8950
            set-name: ens3
            addresses: [10.0.1.8/24]
            gateway4: 10.0.1.11
            nameservers:
              addresses: [10.0.1.11, 8.8.8.8]

Reiniciamos y aplicamos los cambios en las interfaces de red:

netplan apply

También reinicio la máquina para verificar que en cada inicio se aplicará esta configuración (aunque realmente es lo mismo):

root@sancho:~# reboot

root@sancho:~# Connection to 10.0.1.8 closed by remote host.
Connection to 10.0.1.8 closed.

debian@dulcinea:~$ ssh ubuntu@10.0.1.8
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-53-generic x86_64)

...

Last login: Sat Nov 14 18:41:41 2020 from 10.0.1.11

ubuntu@sancho:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:84:9b:94 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.8/24 brd 10.0.1.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe84:9b94/64 scope link
       valid_lft forever preferred_lft forever

ubuntu@sancho:~$ ip r
default via 10.0.1.11 dev ens3 proto static
10.0.1.0/24 dev ens3 proto kernel scope link src 10.0.1.8

ubuntu@sancho:~$ ping www.google.es
PING www.google.es (172.217.168.163) 56(84) bytes of data.
64 bytes from mad07s10-in-f3.1e100.net (172.217.168.163): icmp_seq=1 ttl=112 time=43.2 ms
64 bytes from mad07s10-in-f3.1e100.net (172.217.168.163): icmp_seq=2 ttl=112 time=43.9 ms
64 bytes from mad07s10-in-f3.1e100.net (172.217.168.163): icmp_seq=3 ttl=112 time=43.2 ms
^C
--- www.google.es ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 43.166/43.438/43.925/0.345 ms

Podemos ver como efectivamente nos ha aplicado la configuración, poseemos una IP estática y la puerta de enlace es la IP de Dulcinea, y además comprobamos que poseemos conectividad al exterior, y podemos disfrutar de una resolución de nombres satisfactoria.

Quijote

Para establecer el direccionamiento estático en CentOS 7, debemos editar el fichero /etc/sysconfig/network-scripts/ifcfg-eth0. En CentOS por defecto no viene instalado el editor de texto nano, que es el que suelo utilizar y el que más me gusta, por tanto tenemos que utilizar vi, de momento…

[root@quijote ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

En este archivo nos encontramos con esta configuración predeterminada:

BOOTPROTO=dhcp
DEVICE=eth0
HWADDR=fa:16:3e:5c:3d:c5
MTU=8950
ONBOOT=yes
TYPE=Ethernet
USERCTL=no

Debemos sustituirlo por este bloque, en el que indicamos que en el apartado BOOTPROTO, la IP ahora se establece como estática, y el DHCP4 pasa a ser desactivado, que la IP estática que le estamos asignando es la 10.0.1.13, cuya máscara de red es una 255.255.255.0, que la puerta de enlace es la 10.0.1.11, es decir, la IP de Dulcinea, y que utilice esos DNS indicados. Es importante establecer en el apartado ONBOOT el valor yes, ya que esto hará que esta configuración se active en cada inicio del sistema.

BOOTPROTO=static
DEVICE=eth0
HWADDR=fa:16:3e:5c:3d:c5
MTU=8950
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPADDR=10.0.1.13
NETMASK=255.255.255.0
GATEWAY=10.0.1.11
DNS1=10.0.1.11
DNS2=8.8.8.8

Reiniciamos y aplicamos los cambios en las interfaces de red:

systemctl restart network.service

También reinicio la máquina para verificar que en cada inicio se aplicará esta configuración:

[root@quijote ~]# reboot
Connection to 10.0.1.13 closed by remote host.
Connection to 10.0.1.13 closed.

debian@dulcinea:~$ ssh centos@10.0.1.13

Last login: Sat Nov 14 18:43:37 2020 from gateway

[centos@quijote ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8950 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:5c:3d:c5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.13/24 brd 10.0.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe5c:3dc5/64 scope link
       valid_lft forever preferred_lft forever

[centos@quijote ~]$ ip r
default via 10.0.1.11 dev eth0
10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.13

[centos@quijote ~]$ ping www.google.es
PING www.google.es (216.58.209.67) 56(84) bytes of data.
64 bytes from mad07s22-in-f3.1e100.net (216.58.209.67): icmp_seq=1 ttl=112 time=42.9 ms
64 bytes from mad07s22-in-f3.1e100.net (216.58.209.67): icmp_seq=2 ttl=112 time=43.4 ms
64 bytes from mad07s22-in-f3.1e100.net (216.58.209.67): icmp_seq=3 ttl=112 time=57.3 ms
^C
--- www.google.es ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 42.978/47.944/57.388/6.680 ms

Podemos ver como efectivamente nos ha aplicado la configuración, poseemos una IP estática y la puerta de enlace es la IP de Dulcinea, y además comprobamos que poseemos conectividad al exterior, y podemos disfrutar de una resolución de nombres satisfactoria.

6. Modificación de la subred de la red interna, deshabilitando el servidor DHCP.

Esta modificación, la podemos llevar a cabo en nuestro gestor de proyectos de OpenStack desde el navegador, pero como ya tenemos configurada el administrador de OpenStack desde la terminal, vamos a probar a hacerlo desde aquí.

Listamos todas nuestra redes:

(openstack) javier@debian:~/openstack$ openstack network list
+--------------------------------------+------------------------------+----------------------------------------------------------------------------+
| ID                                   | Name                         | Subnets                                                                    |
+--------------------------------------+------------------------------+----------------------------------------------------------------------------+
| 446d94eb-183a-4f34-a05c-2dacc6cd3a54 | red de javier.perezh         | 98c0ae2f-d2ee-48a3-9122-f1369a6e99b3                                       |
| 49812d85-8e7a-4c31-baa2-d427692f6568 | ext-net                      | 158bbe3e-3c98-485e-8042-ba6402111ea6, 6218710b-aa05-46f7-b198-7639efe3da95 |
| 4fc06002-ccc1-4f22-af64-a5eb554d5e8b | red interna de javier.perezh | 87427d1a-bd9d-400a-935b-02c56aaf7748                                       |
+--------------------------------------+------------------------------+----------------------------------------------------------------------------+

Si vemos los detalles de nuestra red interna obtenemos:

(openstack) javier@debian:~/openstack$ openstack network show 4fc06002-ccc1-4f22-af64-a5eb554d5e8b
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        | nova                                 |
| created_at                | 2020-11-14T17:27:54Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | 4fc06002-ccc1-4f22-af64-a5eb554d5e8b |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| is_vlan_transparent       | None                                 |
| mtu                       | 8950                                 |
| name                      | red interna de javier.perezh         |
| port_security_enabled     | True                                 |
| project_id                | 678e0304a62c445ba78d3b825cb4f1ab     |
| provider:network_type     | None                                 |
| provider:physical_network | None                                 |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 5                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   | 87427d1a-bd9d-400a-935b-02c56aaf7748 |
| tags                      |                                      |
| updated_at                | 2020-11-14T17:27:54Z                 |
+---------------------------+--------------------------------------+

Pero nos encontramos con que no podemos apreciar ningún apartado que nos indique nada del servidor DHCP. He estado buscando un poco por internet pero no he conseguido averiguar nada. De hecho, ni siquiera sé si esta opción la podemos configurar desde aquí, aunque obviamente pienso que sí, por ello he intentado este proceso.

Dicho esto, nos dirigimos a nuestro proyecto de OpenStack en el navegador, a este apartado:

Seleccionamos la opción Editar subred, y se nos abrirá esta ventana en la que tendremos que desmarcar la opción llamada Habilitar DHCP.

Guardamos los cambios y ya tendríamos deshabilitado el servidor DHCP de nuestra red interna.

7. Creación del usuario profesor en todas las instancias. Usuario que puede utilizar sudo sin contraseña.

Dulcinea:

Para crear un usuario en Debian, tenemos que hacer uso del comando useradd, pero bien, si queremos que en el nuevo usuario se creen las carpetas automáticamente en el directorio /home debemos introducir la opción -m:

root@dulcinea:~# useradd profesor -m -s /bin/bash

root@dulcinea:~# passwd profesor
New password:
Retype new password:
passwd: password updated successfully

root@dulcinea:~# ls /home/
debian	profesor

También le he asignando una contraseña que es profesor, por si alguna vez nos es necesaria, aunque normalmente no nos hará falta ya que accederemos mediante claves públicas-privadas.

Sancho:

Para crear un usuario en Ubuntu, seguimos el mismo proceso que para Debian.

root@sancho:~# useradd profesor -m -s /bin/bash

root@sancho:~# passwd profesor
New password:
Retype new password:
passwd: password updated successfully

root@sancho:~# ls /home/
profesor  ubuntu

Quijote:

Para crear un usuario en CentOS, hacemos uso del comando adduser, que a diferencia de useradd, sí nos crea las carpetas automáticamente en el directorio /home:

[root@quijote ~]# adduser profesor

[root@quijote ~]# passwd profesor
Changing password for user profesor.
New password:
BAD PASSWORD: The password contains the user name in some form
Retype new password:
passwd: all authentication tokens updated successfully.

[root@quijote ~]# ls /home/
centos  profesor

Bien, ya habríamos creado todos los usuarios profesor en todas las instancias, y solo nos quedaría configurarlas para que este usuario pueda hacer uso de sudo sin tener que introducir la contraseña.

Este proceso va a ser el mismo en todos los sistemas.

Editamos el fichero /etc/sudoers:

nano /etc/sudoers

Recordemos que en CentOS no está instalado por defecto nano, por tanto o lo descargamos o utilizamos vi.

Debajo de la línea root ALL=(ALL) ALL, introducimos la siguiente línea:

profesor ALL=(ALL) NOPASSWD: ALL

Y fin, esto hará que cuando el usuario profesor haga uso de sudo, no le pida contraseña alguna.

8. Copia las claves públicas de todos los profesores en las instancias para que puedan acceder con el usuario profesor.

He copiado todas las claves públicas de los profesores al fichero .ssh/authorized_keys del usuario profesor.

Importante: hay que cambiar los permisos de la carpeta .ssh a 700, y del fichero authorized_keys a 600.

9. Realiza una actualización completa de todos los servidores.

Para realizar una actualización de todos los paquetes instalados en cada sistema, empleamos estos comandos:

Dulcinea:

apt update && apt upgrade -y

Sancho:

apt update && apt upgrade -y

Quijote:

Recordemos que en CentOS no se utiliza por defecto apt, sino que se sustituye por yum.

yum update -y

Cuando se ejecuta este comando, yum comenzará a comprobar en sus repositorios si existe una versión actualizada del software que el sistema tiene instalado actualmente. Una vez que revisa la lista de repositorios y nos informa de que paquetes se pueden actualizar, introducimos y y pulsando intro se nos actualizarán todos los paquetes.

10. Configura el servidor con el nombre de dominio (nombre-usuario).gonzalonazareno.org.

Dulcinea:

Me he dado cuenta de una cosa al reiniciar la máquina Dulcinea, y es que en cada inicio se restablece el fichero /etc/hosts. Para cambiar este funcionamiento, tenemos que dirigirnos al fichero /etc/cloud/cloud.cfg y buscar esta línea:

manage_etc_hosts: true

Le cambiamos el valor a false:

manage_etc_hosts: false

Hecho esto, ya podemos realizar las modificaciones necesarias en el fichero /etc/hosts. La línea editada tendría este aspecto:

127.0.1.1 dulcinea.javierpzh.gonzalonazareno.org dulcinea dulcinea.novalocal  

Sancho:

Añadimos al fichero /etc/hosts la siguiente línea:

127.0.1.1 sancho.javierpzh.gonzalonazareno.org sancho

Quijote:

En los sistemas CentOS de OpenStack, el hostname se asigna durante la creación es (hostname).novalocal, cosa que no nos interesa. Para llevar a cabo dicho cambio, vamos a modificar el fichero /etc/hostname. Quedando la línea de este fichero:

quijote

11. Hasta que no esté configurado el servidor DNS, incluye resolución estática en las tres instancias tanto usando nombre completo como hostname.

Para configurar la resolución estática de las instancias, debemos modificar el fichero /etc/hosts y añadir unas líneas con este aspecto:

XXX.XXX.XXX.XXX nombre

Esto lo que hace, es que cuando intentemos resolver un nombre, busca en este fichero si tiene su dirección IP guardada, por lo que nos facilita y nos acomoda mucho el trabajo.

Dulcinea:

Añadimos estas líneas:

127.0.1.1 dulcinea.javierpzh.gonzalonazareno.org dulcinea dulcinea.novalocal
127.0.0.1 localhost

10.0.1.8 sancho.javierpzh.gonzalonazareno.org sancho
10.0.1.13 quijote.javierpzh.gonzalonazareno.org quijote

Me he dado cuenta de una cosa al reiniciar la máquina Dulcinea, y es que en cada inicio se restablece el fichero /etc/hosts. Para cambiar este funcionamiento, tenemos que dirigirnos al fichero /etc/cloud/cloud.cfg y buscar esta línea:

manage_etc_hosts: true

Le cambiamos el valor a false:

manage_etc_hosts: false

Y ya habríamos configurado la resolución estática en Dulcinea.

Sancho:

Añadimos estas líneas:

127.0.1.1 sancho.javierpzh.gonzalonazareno.org sancho
127.0.0.1 localhost

10.0.1.11 dulcinea.javierpzh.gonzalonazareno.org dulcinea
10.0.1.13 quijote.javierpzh.gonzalonazareno.org quijote

Quijote:

Añadimos estas líneas:

127.0.1.1 quijote.javierpzh.gonzalonazareno.org quijote
10.0.1.11 dulcinea.javierpzh.gonzalonazareno.org dulcinea
10.0.1.8 sancho.javierpzh.gonzalonazareno.org sancho

12. Asegúrate que el servidor tiene sincronizado su reloj utilizando un servidor NTP externo.

Dulcinea:

Para configurar nuestro reloj utilizando un servidor NTP externo, introducimos el siguiente comando y seleccionamos la configuración que nos interese:

dpkg-reconfigure tzdata

Comprobamos que tenemos la hora correcta y el servidor NTP activo y sincronizado:

root@dulcinea:~# timedatectl
               Local time: Sat 2020-11-14 21:51:13 CET
           Universal time: Sat 2020-11-14 20:51:13 UTC
                 RTC time: Sat 2020-11-14 20:51:14
                Time zone: Europe/Madrid (CET, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Sancho:

Para configurar nuestro reloj utilizando un servidor NTP externo, introducimos el siguiente comando y seleccionamos la configuración que nos interese:

dpkg-reconfigure tzdata

Comprobamos que tenemos la hora correcta y el servidor NTP activo y sincronizado:

root@sancho:~# timedatectl
               Local time: Sat 2020-11-14 21:53:48 CET
           Universal time: Sat 2020-11-14 20:53:48 UTC
                 RTC time: Sat 2020-11-14 20:53:49    
                Time zone: Europe/Madrid (CET, +0100)
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no

Quijote:

Para configurar nuestro reloj utilizando un servidor NTP externo, introducimos el siguiente comando y seleccionamos la configuración que nos interese:

tzselect

Comprobamos que tenemos la hora correcta y el servidor NTP activo y sincronizado:

[root@quijote ~]# timedatectl
      Local time: Sat 2020-11-14 21:56:25 CET
  Universal time: Sat 2020-11-14 20:56:25 UTC
        RTC time: Sat 2020-11-14 20:56:26
       Time zone: UTC (CET, +0100)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: no
 Last DST change: DST ended at
                  Sun 2020-10-25 02:59:59 CEST
                  Sun 2020-10-25 02:00:00 CET
 Next DST change: DST begins (the clock jumps one hour forward) at
                  Sun 2021-03-28 01:59:59 CET
                  Sun 2021-03-28 03:00:00 CEST