Vagrant

📌 Introducción a Vagrant

Vagrant es una herramienta de software de código abierto que permite la creación y configuración de entornos virtuales de desarrollo de manera rápida y eficiente.

Con Vagrant, los desarrolladores pueden definir una infraestructura en un solo archivo (Vagrantfile) y compartirlo con otros, asegurando que todos trabajen en el mismo entorno sin importar su sistema operativo.

Beneficios principales:

  • Automatiza la creación de máquinas virtuales.
  • Permite compartir entornos de desarrollo fácilmente.
  • Asegura consistencia entre equipos de trabajo.
  • Compatible con múltiples proveedores de virtualización (VirtualBox, VMware, Docker, etc.).

📌 ¿Cómo funciona Vagrant?

Vagrant utiliza un Vagrantfile, que es un archivo de configuración donde se definen las máquinas virtuales y sus características.

🔹 Proceso básico de uso:
1️⃣ Instalar Vagrant y un proveedor de virtualización (ej. VirtualBox).
2️⃣ Crear un directorio de proyecto y un Vagrantfile:

3️⃣ Configurar la máquina en el Vagrantfile (ejemplo básico):

ruby
Vagrant.configure(“2”) do |config|
config.vm.box = “debian”
config.vm.network “private_network”, ip: “192.168.56.10”
end 

4️⃣ Levantar la máquina virtual con:

sh

vagrant up

5️⃣ Acceder a la máquina virtual:

shvagrant ssh

6️⃣ Apagar o destruir la máquina virtual cuando no se necesite:

shvagrant halt # Apagar
vagrant destroy # Eliminar completamente

Resultado: Se crea un entorno virtualizado con las configuraciones establecidas, listo para usarse en desarrollo o pruebas.


📌 Componentes clave de Vagrant

🔹 Vagrantfile → Archivo de configuración donde se define la máquina virtual.
🔹 Boxes → Imágenes preconfiguradas de sistemas operativos.
🔹 Proveedores → Software que ejecuta las máquinas virtuales (VirtualBox, VMware, Docker, etc.).
🔹 Provisioners → Scripts de automatización para configurar la VM al iniciarse.


📌 Ejemplo avanzado: Configurar múltiples máquinas

Si queremos definir varias máquinas virtuales en un solo Vagrantfile, podemos hacerlo de la siguiente manera:

ruby

Vagrant.configure("2") do |config|
config.vm.define "servidor1" do |servidor1|
servidor1.vm.box = "ubuntu/bionic64"
servidor1.vm.network "private_network", ip: "192.168.56.101"
end

config.vm.define “servidor2” do |servidor2|
servidor2.vm.box = “ubuntu/bionic64”
servidor2.vm.network “private_network”, ip: “192.168.56.102”
end
end

Resultado:

  • Se crean dos máquinas virtuales con Ubuntu y direcciones IP fijas.
  • Permiten comunicación en red privada entre ellas.

📌 Comparación entre VirtualBox y Vagrant

Característica VirtualBox Vagrant
Creación manual de VMs ✅ Sí ❌ No, automatiza el proceso
Configuración con código ❌ No ✅ Sí, con Vagrantfile
Facilidad para compartir entornos ❌ Difícil ✅ Muy fácil
Automatización de red y servicios ❌ Limitado ✅ Completo
Compatible con múltiples hipervisores ❌ Solo VirtualBox ✅ VirtualBox, VMware, Docker, etc.

¿Cuál elegir?

  • Usa VirtualBox si solo necesitas ejecutar una VM manualmente.
  • Usa Vagrant si necesitas automatizar y compartir entornos fácilmente.

 

📌 Vagrantfile Lady UP.

 

# -*- mode: ruby -*-
# vi: set ft=ruby :
#Lady UP
#Routers

#Router Ivan

Vagrant.configure (2) do |config|

config.vm.define “RouterI” do |routeri|
routeri.vm.box = “rocky”
routeri.vm.network “private_network”,
ip: “192.168.202.16”,
netmask: “255.255.255.240”,
virtualbox__intnet: “intdmz”
routeri.vm.network “public_network”,
ip: “172.25.210.4”,
netmask: “255.255.0.0”,
bridge: “eth0”
routeri.vm.provision “shell”, inline: <<-SHELL
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.4.248/29 -o enp0s9 -j MASQUERADE
ip route del default
ip route add default via 172.25.130.254
ip route add 192.168.202.10/28 via 172.25.213.11 #IP CRIS
ip route add 192.168.202.10/28 via 172.25.211.11 #IP NICO
ip route add 192.168.202.10/28 via 172.25.214.11 #IP MARC
SHELL
end

#Router Nico

config.vm.define “RouterN” do |routern|
routern.vm.box = “rocky”
routern.vm.network “private_network”,
ip: “192.168.202.15”,
netmask: “255.255.255.240”,
virtualbox__intnet: “intdmz”
routern.vm.network “public_network”,
ip: “172.25.210.3”,
netmask: “255.255.0.0”,
bridge: “eth0”
routern.vm.provision “shell”, inline: <<-SHELL
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.4.248/29 -o enp0s9 -j MASQUERADE
ip route del default
ip route add default via 172.25.130.254
ip route add 192.168.202.10/28 via 172.25.214.11 #IP CRIS
ip route add 192.168.202.10/28 via 172.25.217.11 #IP IVAN
ip route add 192.168.202.10/28 via 172.25.214.11 #IP MARC
SHELL
end

#Router Cris

config.vm.define “RouterC” do |routerc|
routerc.vm.box = “rocky”
routerc.vm.network “private_network”,
ip: “192.168.202.14”,
netmask: “255.255.255.240”,
virtualbox__intnet: “intdmz”
routerc.vm.network “public_network”,
ip: “172.25.210.2”,
netmask: “255.255.0.0”,
bridge: “eth0”
routerc.vm.provision “shell”, inline: <<-SHELL
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.4.248/29 -o enp0s9 -j MASQUERADE
ip route del default
ip route add default via 172.25.130.254
ip route add 192.168.202.10/28 via 172.25.211.11 #IP Nico
ip route add 192.168.202.10/28 via 172.25.217.11 #IP Ivan
ip route add 192.168.202.10/28 via 172.25.114.11 #IP Marc
SHELL
end

#Router Marc

config.vm.define “Router” do |router|
router.vm.box = “rocky”
router.vm.network “private_network”,
ip: “192.168.202.10”,
netmask: “255.255.255.240”,
virtualbox__intnet: “intdmz”
router.vm.network “public_network”,
ip: “172.25.210.1”,
netmask: “255.255.0.0”,
bridge: “eth0”
router.vm.provision “shell”, inline: <<-SHELL
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.4.248/29 -o enp0s9 -j MASQUERADE
ip route del default
ip route add default via 172.25.130.254
ip route add 192.168.4.192/28 via 172.25.210.2
ip route add 192.168.202.10/28 via 172.25.213.11 #IP Cris
ip route add 192.168.202.10/28 via 172.25.217.11 #IP Ivan
ip route add 192.168.202.10/28 via 172.25.211.11 #IP Nico
SHELL
end

#Red Servidores(LDAP , NFS , FTP)

#LDAP

config.vm.define “ldap” do |ldap|
ldap.vm.box = “debian”
ldap.vm.network “private_network”,
ip: “192.168.202.11”,
netmask: “255.255.255.240”,
gateway: “192.168.202.10”,
virtualbox__intnet: “intdmz”
ldap.vm.provision “shell”, inline: <<-SHELL
ip route del default
ip route add default via 192.168.202.10
SHELL
ldap.vm.provider “virtualbox” do |vb|
vb.gui = false
end
end

#NFS

config.vm.define “nfs” do |nfs|
nfs.vm.box = “debian”
nfs.vm.network “private_network”,
ip: “192.168.202.12”,
netmask: “255.255.255.240”,
gateway: “192.168.202.10”,
virtualbox__intnet: “intdmz”
nfs.vm.provision “shell”, inline: <<-SHELL
ip route del default
ip route add default via 192.168.202.10
SHELL
nfs.vm.provider “virtualbox” do |vb|
vb.gui = false
end
end

#FTP

config.vm.define “ftp” do |ftp|
ftp.vm.box = “debian”
ftp.vm.network “private_network”,
ip: “192.168.202.13”,
netmask: “255.255.255.240”,
virtualbox__intnet: “FTP”
ftp.vm.network “public_network”,
ip: “172.25.210.2”,
netmask: “255.255.0.0”,
bridge: “eth0”
ftp.vm.provision “shell”, inline: <<-SHELL
apt install -y iptables
echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.4.192/27 -o eth2 -j MASQUERADE
ip route del default
ip route add default via 172.25.130.254
ip route add 192.168.4.248/29 via 172.25.210.2
SHELL
ftp.vm.provider “virtualbox” do |vb|
vb.gui = false
end
end

#CLIENTES

#Linux
config.vm.define “Cliente1” do |linux|
linux.vm.box = “debian”
linux.vm.network “private_network”,
ip: “192.168.202.19”,
netmask: “255.255.255.224”,
gateway: “192.168.202.10”,
virtualbox__intnet: “FTP”
linux.vm.provision “shell”, inline: <<-SHELL
ip route del default
ip route add default via 192.168.202.10
SHELL
linux.vm.provider “virtualbox” do |vb|
vb.gui = false
end
end

#Windows
config.vm.define “Windows10” do |windows|
windows.vm.box = “w10”
windows.vm.boot_timeout = 300
windows.vm.communicator = “winrm”
windows.vm.network “private_network”,
ip: “192.168.202.220”,
netmask: “255.255.255.224”,
gateway: “192.168.202.10”,
virtualbox__intnet: “FTP”
windows.vm.network :forwarded_port,
guest: 3389,
host: 33810
windows.vm.provider “virtualbox” do |vb|
vb.memory = “4096”
end
end
end

Leave a Comment