Inicio Linux & Systems Networks & Infrastructure Cybersecurity Cloud & DevOps SIEM & Monitoring DFIR & Threat Intel Development & Other Todas las categorias Herramientas

Despliegue de Múltiples Máquinas Virtuales con Vagrant

Despliegue de Múltiples Máquinas Virtuales con Vagrant

Tabla de contenidos

En este tutorial, aprenderás cómo desplegar múltiples máquinas virtuales utilizando Vagrant, una herramienta para la creación y gestión de entornos de desarrollo virtualizados. Utilizaremos un script Bash para automatizar el proceso de configuración y despliegue de las máquinas virtuales. Además, te mostraré cómo listar, detener, iniciar, acceder y eliminar estas máquinas una vez desplegadas.

El Script Bash

El script Bash que utilizaremos automatiza la instalación de VirtualBox y Vagrant, crea un directorio de proyecto, inicializa un archivo de configuración Vagrantfile y despliega las máquinas virtuales Debian.

BASH
#!/bin/bash

# Función para verificar si un comando existe
command_exists() {
    command -v "$1" >/dev/null 2>&1
}

# Función para detectar la interfaz de red activa con una dirección IP configurada
detect_active_interface() {
    active_interface=$(ip -o -4 addr show up | awk '{print $2,$4}' | grep -vE 'lo|docker' | awk '{print $1}')
    echo "$active_interface"
}

# Instalar VirtualBox
if ! command_exists virtualbox; then
    echo "Instalando VirtualBox..."
    echo "deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian $(lsb_release -cs) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
    sudo apt update
    sudo apt install -y linux-headers-$(uname -r) dkms
    sudo apt install -y virtualbox-7.0

    # Instalar VirtualBox Extension Pack
    VER=$(curl -s https://download.virtualbox.org/virtualbox/LATEST.TXT)
    wget https://download.virtualbox.org/virtualbox/$VER/Oracle_VM_VirtualBox_Extension_Pack-$VER.vbox-extpack
    sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-$VER.vbox-extpack
    rm Oracle_VM_VirtualBox_Extension_Pack-$VER.vbox-extpack
else
    echo "VirtualBox ya está instalado."
fi

# Instalar Vagrant
if ! command_exists vagrant; then
    echo "Instalando Vagrant..."
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
    wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update
    sudo apt install -y vagrant
else
    echo "Vagrant ya está instalado."
fi

# Crear el directorio de proyecto
PROJECT_DIR="debian_vms"
mkdir -p "$PROJECT_DIR"
cd "$PROJECT_DIR" || exit

# Inicializar Vagrant
if [ ! -f Vagrantfile ]; then
    vagrant init debian/bookworm64
fi

# Detectar la interfaz de red activa con una dirección IP configurada
active_interface=$(detect_active_interface)

# Configurar el Vagrantfile
cat > Vagrantfile <<EOF
Vagrant.configure("2") do |config|
  config.vm.box = "debian/bookworm64"

  # Definir las máquinas virtuales
  machines = {
    "srvlwm01" => "192.168.1.100",
    "srvlww01" => "192.168.1.101",
    "srvlww02" => "192.168.1.102",
    "srvlwd01" => "192.168.1.103",
    "srvlwi01" => "192.168.1.104",
    "srvlwi02" => "192.168.1.105"
  }

  machines.each do |name, ip|
    config.vm.define name do |node|
      node.vm.hostname = name
      node.vm.network "public_network", ip: ip, bridge: "${active_interface}"
      
      node.vm.provider "virtualbox" do |vb|
        vb.name = name
        vb.memory = "1024"
        vb.cpus = 1
      end
      
      # Provisionar con un script de shell
      node.vm.provision "shell", inline: <<-SHELL
        apt-get update
        apt-get install -y apache2
      SHELL
    end
  end
end
EOF

# Levantar las máquinas virtuales
vagrant up

echo "Las máquinas virtuales Debian han sido desplegadas y configuradas."

Funciones Bash:

  • command_exists(): Esta función verifica si un comando está disponible en el sistema. Utiliza command -v para buscar la ruta de un comando.
  • detect_active_interface(): Esta función detecta la interfaz de red activa con una dirección IP configurada. Utiliza ip addr show up para mostrar las interfaces de red activas y grep para filtrar las direcciones IP, excluyendo la interfaz de bucle local y Docker.

Instalación de VirtualBox:

  • Verifica si VirtualBox está instalado utilizando la función command_exists.
  • Si VirtualBox no está instalado, agrega el repositorio de VirtualBox a sources.list, actualiza los paquetes, instala las cabeceras del kernel y DKMS (Dynamic Kernel Module Support), y finalmente instala VirtualBox. También instala el VirtualBox Extension Pack para agregar funcionalidades adicionales a VirtualBox.

Instalación de Vagrant:

  • Similar a la instalación de VirtualBox, esta sección verifica la existencia de Vagrant utilizando command_exists.
  • Si Vagrant no está instalado, agrega la clave GPG de HashiCorp, agrega el repositorio de HashiCorp, actualiza los paquetes y finalmente instala Vagrant.

Creación del Directorio de Proyecto:

  • Define una variable PROJECT_DIR con el nombre del directorio de proyecto.
  • Crea el directorio si no existe y navega hasta él.

Inicialización de Vagrant:

  • Verifica si existe el archivo Vagrantfile en el directorio de proyecto.
  • Si no existe, inicializa un nuevo archivo Vagrantfile utilizando la imagen de Debian debian/bookworm64.

Configuración del Vagrantfile:

  • Define la configuración de Vagrant utilizando Ruby DSL en el bloque Vagrant.configure.
  • Configura la caja (box) a utilizar, que es debian/bookworm64.
  • Define un conjunto de máquinas virtuales con nombres y direcciones IP asociadas.
  • Para cada máquina virtual, configura el nombre, la red pública y las especificaciones de VirtualBox (nombre, memoria y CPUs).
  • Además, se provisiona cada máquina con un script de shell que actualiza los paquetes e instala Apache.

Levantamiento de las Máquinas Virtuales:

  • Inicia las máquinas virtuales utilizando el comando vagrant up.

Mensaje de Finalización:

  • Imprime un mensaje indicando que las máquinas virtuales Debian han sido desplegadas y configuradas.

Gestión de las Máquinas Virtuales

Una vez desplegadas las máquinas virtuales, aquí te mostramos cómo gestionarlas:

Listar las Máquinas Virtuales

Para listar las máquinas virtuales desplegadas, utiliza el siguiente comando en el directorio del proyecto:

CODE
vagrant status

Parar una Máquina Virtual

Para detener una máquina virtual específica, ejecuta:

CODE
vagrant halt <nombre_de_la_maquina>

Iniciar una Máquina Virtual

Para iniciar una máquina virtual detenida, utiliza:

CODE
vagrant up <nombre_de_la_maquina>

Acceder a una Máquina Virtual

Para acceder a una máquina virtual mediante SSH, utiliza:

CODE
vagrant ssh <nombre_de_la_maquina>

Eliminar una Máquina Virtual

Para eliminar una máquina virtual y sus recursos asociados, ejecuta:

CODE
vagrant destroy <nombre_de_la_maquina>

:wq!