Cómo montar un servidor Linux casero: guía completa con VirtualBox y hardware real

Montar un servidor en casa es, probablemente, el proyecto que más te va a enseñar durante el grado de DAW. No porque sea difícil, sino porque te obliga a pelearte con redes, permisos, servicios y seguridad de verdad, no en un ejercicio de clase. Y cuando algo falla, no hay profesor: te toca leer logs.

Esta guía cubre las dos formas de hacerlo: en una máquina virtual, para aprender sin riesgo y sin gastar un euro, y en hardware real, cuando quieras tenerlo encendido 24/7. Empieza por la primera aunque tengas el hardware: romper una VM cuesta treinta segundos de recuperar.

Ruta A: en una máquina virtual con VirtualBox

La ventaja de empezar aquí es que puedes hacer snapshots. Antes de tocar algo delicado guardas el estado, y si lo destrozas vuelves atrás en un clic. En hardware real eso significa reinstalar.

Antes de empezar: activa la virtualización

Este es el primer muro con el que choca casi todo el mundo. Si al arrancar la máquina virtual te aparece un error de VT-x/AMD-V no disponible, no es culpa de VirtualBox: tu placa tiene la virtualización desactivada en la BIOS.

  • Entra en la BIOS/UEFI al arrancar (normalmente Supr, F2 o F10).
  • Busca Intel VT-x, Intel Virtualization Technology o SVM Mode en placas AMD. Actívalo.
  • Si usas Windows y sigue fallando, el culpable suele ser Hyper-V. Desactiva «Plataforma de máquina virtual» y «Hyper-V» en Activar o desactivar características de Windows y reinicia.

Crear la máquina virtual

Descarga VirtualBox (la serie 7.2 es la actual) y la ISO de Ubuntu Server. Te recomiendo 26.04 LTS, que salió en abril de 2026 y tiene soporte hasta mayo de 2031. Si prefieres ir sobre seguro, 24.04 LTS sigue mantenida hasta mayo de 2029.

Fíjate en que sea la versión Server y no la Desktop. Server no trae entorno gráfico, y eso es exactamente lo que quieres: toda la RAM se va a tus servicios en vez de a un escritorio que nunca vas a mirar.

Creación de una nueva máquina virtual en VirtualBox para instalar Ubuntu Server

Al crear la VM, estos son los recursos que funcionan bien en la práctica:

  • RAM: 2 GB es suficiente para el sistema y un par de contenedores. Si vas a levantar Nextcloud con su base de datos, ponle 4 GB.
  • CPU: 2 núcleos. Con 1 va, pero las actualizaciones se hacen eternas.
  • Disco: 25 GB mínimo, y déjalo en reservado dinámicamente para que no ocupe ese espacio de golpe en tu disco real.
Selección de la imagen ISO de Ubuntu Server y asignación de recursos a la máquina virtual

La parte que todo el mundo falla: la red

Aquí es donde se atasca el 90% de la gente. Instalas Ubuntu, intentas conectarte por SSH desde tu PC y no hay manera. El motivo es el modo de red que VirtualBox pone por defecto.

NAT (el que viene por defecto): la VM puede salir a internet, pero es invisible desde tu red local. Tu PC no puede conectarse a ella. Sirve para navegar y actualizar, no para servir.

Adaptador puente: la VM recibe una IP de tu router, como si fuera un ordenador más enchufado a tu red. Tu PC, tu móvil y tu tele la ven. Esta es la que quieres para un servidor.

Cámbialo en Configuración → Red → Conectado a: Adaptador puente, y selecciona tu tarjeta de red real (la wifi o la ethernet que estés usando). Si te empeñas en quedarte en NAT, tendrás que añadir a mano una regla de reenvío de puertos del 2222 de tu PC al 22 de la VM, y conectarte con ssh -p 2222 usuario@127.0.0.1. Funciona, pero complica todo lo demás.

Instalar Ubuntu Server

El instalador es de texto pero se navega con las flechas y el tabulador. Puedes aceptar los valores por defecto en casi todo. Dos cosas a las que sí tienes que prestar atención:

  1. En el particionado, deja «Use an entire disk». Está hablando del disco virtual, no del tuyo: no hay riesgo.
  2. Cuando llegues a la pantalla de software, marca la casilla «Install OpenSSH server». Si se te olvida tendrás que instalarlo después a mano desde la consola de la VM, que es mucho más incómodo.

Ruta B: en hardware real

Cuando ya te manejes, pasar a hardware real tiene sentido: la VM depende de que tu PC esté encendido, y un servidor de verdad está siempre disponible.

Un portátil viejo es la mejor opción de entrada y casi nadie lo dice: trae SAI incorporado. La batería aguanta los cortes de luz que tumbarían a un sobremesa, y encima consume poco. Con un i3 y 4 GB vas sobrado.

Un mini PC de oficina reacondicionado (los típicos Dell OptiPlex o Lenovo ThinkCentre) se encuentra por 60-100 € de segunda mano y rinde mucho más que una Raspberry Pi, que con el precio actual ha dejado de ser la opción barata que era.

Sobre el consumo, que es la duda habitual: un equipo de estos tira entre 15 y 30 W en reposo. A unos 0,15 €/kWh, 20 W encendido todo el año salen alrededor de 26 € anuales. Menos de lo que cuestan dos meses de un VPS modesto.

Un detalle que te ahorrará disgustos: entra en la BIOS y busca «Restore on AC Power Loss» o «After Power Failure», y ponlo en Power On. Así, si se va la luz mientras no estás en casa, el servidor vuelve solo en lugar de quedarse apagado hasta que llegues.

Los primeros pasos tras instalar

Conectarte por SSH

Desde la consola del servidor, mira qué IP le ha tocado:

ip a

Busca la línea inet del adaptador que no sea lo: algo como 192.168.1.45. Desde tu PC (el terminal de Windows vale perfectamente):

ssh tuusuario@192.168.1.45

A partir de aquí ya puedes cerrar la ventana de VirtualBox o desenchufar el monitor del PC viejo. El servidor se gestiona entero desde tu terminal.

Ponle IP fija

Si dejas la IP por DHCP, un día reinicias el router y tu servidor cambia de dirección. Edita el archivo de netplan:

sudo nano /etc/netplan/50-cloud-init.yaml
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.1.50/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]

Cambia enp0s3 por el nombre real que te dio ip a, y 192.168.1.1 por la IP de tu router. Aplica con sudo netplan apply. Ojo con la indentación: YAML no perdona, y si mezclas tabuladores con espacios te quedas sin red.

La alternativa, más cómoda y sin tocar nada del servidor, es reservar la IP por MAC desde el panel de tu router. Cualquiera de las dos vale.

Entra con clave en vez de contraseña

Desde tu PC, genera un par de claves y cópiala al servidor:

ssh-keygen -t ed25519
ssh-copy-id tuusuario@192.168.1.50

Comprueba que puedes entrar sin que te pida contraseña antes de desactivarla. Si funciona, edita /etc/ssh/sshd_config, pon PasswordAuthentication no y reinicia el servicio con sudo systemctl restart ssh. Si lo haces al revés y algo falla, te quedas fuera.

Cortafuegos y actualizaciones

sudo ufw allow OpenSSH
sudo ufw enable
sudo apt install unattended-upgrades

Abre el puerto de SSH antes de activar UFW. Es el clásico error de dejarse fuera de la propia máquina.

Docker: donde esto empieza a merecer la pena

Instala Docker desde el repositorio oficial, no desde snap ni desde el paquete de Ubuntu, que suele ir desactualizado:

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Añade tu usuario al grupo para no tener que escribir sudo cada vez. Tienes que cerrar sesión y volver a entrar para que surta efecto:

sudo usermod -aG docker $USER

Tu primer servicio: Nextcloud

Crea una carpeta, un archivo compose.yaml dentro y pega esto:

services:
  db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: cambia_esto
      MARIADB_DATABASE: nextcloud
      MARIADB_USER: nextcloud
      MARIADB_PASSWORD: cambia_esto_tambien
    volumes:
      - db:/var/lib/mysql

  app:
    image: nextcloud:stable
    restart: unless-stopped
    ports:
      - 8080:80
    depends_on:
      - db
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: cambia_esto_tambien
    volumes:
      - nextcloud:/var/www/html

volumes:
  db:
  nextcloud:

Levántalo con docker compose up -d y entra desde el navegador en http://192.168.1.50:8080. Ya tienes tu propio Drive.

Los volumes son la parte importante y la que más gente pasa por alto: son los que hacen que tus datos sobrevivan cuando borres y recrees el contenedor. Sin ellos, un docker compose down se lleva todo por delante.

Con el mismo patrón puedes levantar Pi-hole (bloquea la publicidad en toda la red de casa, incluido el móvil y la tele), Jellyfin (tu propio Netflix con tus archivos) o Vaultwarden (gestor de contraseñas). Cada uno es otro compose.yaml en su carpeta.

Acceder desde fuera de casa (sin abrir puertos)

Vas a encontrar mil tutoriales que te dicen que abras el puerto 80 y el 443 en el router. No lo hagas. Estás exponiendo un servicio de tu casa a todo internet, y los escaneos automáticos lo encontrarán en cuestión de horas. Hay dos formas mejores:

Tailscale monta una VPN entre tus dispositivos en unos cinco minutos y sin configurar nada en el router. Instalas el cliente en el servidor y en el móvil, y desde fuera accedes como si estuvieras en el salón. Para uso personal es la opción más sencilla y la que yo recomendaría para empezar.

Cloudflare Tunnel tiene sentido cuando quieres que algo sea público de verdad: por ejemplo, enseñar tu portfolio desde tu propio servidor. El túnel sale desde tu máquina hacia Cloudflare, así que sigues sin abrir ni un puerto.

Errores típicos y cómo salir de ellos

  • «Connection refused» al hacer SSH: el servicio no está instalado o no arrancó. Desde la consola del servidor, sudo apt install openssh-server y sudo systemctl enable --now ssh.
  • «Connection timed out»: problema de red, no de SSH. Casi siempre es que la VM sigue en NAT en lugar de Adaptador puente, o que UFW está bloqueando.
  • «Permission denied (publickey)»: desactivaste la contraseña antes de que la clave funcionara. Entra por la consola física de la VM y vuelve a poner PasswordAuthentication yes temporalmente.
  • La VM no arranca desde la ISO: comprueba que la imagen está montada en la unidad óptica y que el orden de arranque la pone por delante del disco.
  • Sin internet dentro de la VM: si acabas de tocar netplan, revisa la indentación del YAML. Un espacio de más deja la interfaz sin configurar.
  • Un contenedor se cae al reiniciar el servidor: te faltó restart: unless-stopped en el compose.

Lo que te llevas de todo esto

Más allá de tener tu nube privada, este proyecto te toca de lado casi todo el temario de DAW y del ciclo de sistemas: direccionamiento IP y máscaras, servicios y demonios, permisos de usuario, cortafuegos, contenedores y despliegue. La diferencia es que aquí, cuando algo no arranca, no puedes entregarlo a medias.

Si te has quedado atascado en algún paso, déjamelo en los comentarios y le echo un ojo.