29/10/2026

Exponiendo Hugo a la LAN desde VirtualBox

Si eres como yo, cuando estás picando código, escribiendo un nuevo post o retocando los estilos CSS de tu web, lo primero que haces es lanzar el servidor local de Hugo para ver los cambios al instante. Todo va de lujo en tu localhost:1313, pero… ¿qué pasa cuando quieres ver cómo luce tu web en el móvil, en la tablet o en otra máquina de la casa para comprobar el diseño responsive?

Ahí es donde el localhost se nos queda corto.

Hace un tiempo me topé con un post de Nathan Craddock, Running a Hugo server on local and public networks, donde explicaba cómo solucionar esto de forma nativa. Por suerte, los creadores de Hugo pensaron en los geeks que amamos trastear y metieron un par de flags (banderas) integradas que nos permiten enlazar el servidor directamente a la IP de nuestra máquina. De esta forma, cualquier dispositivo de la red local puede cotillear lo que estamos cocinando.

Pero hoy vamos a darle una vuelta de tuerca más. Vamos a adaptar esta idea a nuestro entorno de laboratorio: una máquina virtual Debian 13 corriendo en VirtualBox con Modo Puente (Bridged), viviendo dentro de un sistema anfitrión MAX (Madrid Linux). ¡Vamos al lío!


El Secreto de los Flags: ¿Por qué no funciona mi localhost?

Por defecto, cuando ejecutas hugo server, el binario levanta un entorno cerrado que solo escucha peticiones internas dentro del propio bucle del sistema (127.0.0.1). Si otra máquina de tu casa intenta acceder, se dará de bruces contra la pared.

La solución oficial de Nathan consiste en usar dos flags mágicos:

  • --bind: Le dice a Hugo a qué dirección IP debe “atarse” en lugar de a localhost.
  • --baseURL: Es crucial porque Hugo lo usa para prefijar todos los enlaces internos, imágenes y hojas de estilo de la web. Si lo olvidas, tu maquetación se romperá en el resto de dispositivos porque buscarán el CSS en sus propios localhosts.

📖 Todas las opciones, con sus valores por defecto (--bind escucha en 127.0.0.1 y el puerto es el 1313), están en la documentación oficial de hugo server.

El comando base que propone Nathan es este:

hugo server --bind 192.168.1.20 --baseURL http://192.168.1.20/

(Ojo: alternativamente puedes usar --bind 0.0.0.0 para escuchar en todas las interfaces de red de golpe, pero la clave real está en el --baseURL). Es justo lo que propone también Bino Varghese en Start the Hugo server with your local IP: --bind 0.0.0.0 y --baseURL apuntando a tu IP y al puerto 1313.


Adaptando el invento a nuestro mini Laboratorio (VirtualBox + Debian + MAX)

Al meter una máquina virtual en la ecuación, la cosa se pone más divertida. Sigue estos pasos para que todo fluya a la primera:

Paso 1: La magia del “Modo Puente” (Anfitrión: MAX Linux)

Para que este truco funcione, tu máquina virtual Debian no puede estar detrás de un NAT cerrado. Necesita ser un ciudadano de pleno derecho en tu red local (los modos de red están explicados en el capítulo Virtual Networking del manual de VirtualBox).

  1. Abre la configuración de tu máquina en VirtualBox.
  2. Ve a Red -> Adaptador 1.
  3. En “Conectado a:”, selecciona Adaptador puente (o Bridged Adapter).
  4. Elige la interfaz de red activa de tu equipo MAX (generalmente tu tarjeta Wi-Fi o el cable Ethernet).

Al arrancar, la red del centro (o el router de casa, según el caso) le asignará a Debian una IP propia dentro del mismo rango que tu PC con MAX, tu móvil y el resto de la casa (por ejemplo, 192.168.1.X).

Paso 2: Cazar la IP dentro de Debian 13

Entra en la terminal de tu Debian 13 y averigua qué IP te ha tocado. Al ser un sistema moderno, olvídate del viejo ifconfig y usa el estándar actual:

ip a

Busca tu interfaz de red principal (suele llamarse algo como enp0s3 o eth0). Ahí verás una línea que dice algo como inet 192.168.1.15/24. Esa IP (192.168.1.15) es tu santo grial.

Paso 3: Lanzar el comando Hugo en la VM

Ahora combinamos la teoría de Nathan con nuestra infraestructura. Ejecuta esto dentro de tu terminal de Debian:

hugo server --bind 0.0.0.0 --baseURL http://192.168.1.15:1313
  • ¿Por qué 0.0.0.0? Porque le dice a Debian que escuche en cualquier interfaz disponible, lo cual evita problemas de enrutamiento dentro del entorno virtualizado de VirtualBox.

Paso 4: ¡A disfrutar desde cualquier cacharro!

¡Ya está todo listo! Abre el navegador de tu móvil, de otra PC o del propio sistema operativo MAX anfitrión y navega a:

http://192.168.1.15:1313

Verás tu sitio de Hugo cargando perfectamente, con los estilos intactos y refrescándose en tiempo real cada vez que guardes un archivo en la VM.


🛠️ S.O.S - Errores comunes: Si algo falla, mira aquí

Si te sale el temido error de “Conexión rechazada”, la culpa casi siempre es de los porteros de la discoteca: los firewalls.

  1. El Firewall de Debian (El Huésped): Debian 13 suele venir bastante limpio, pero si tienes instalado ufw o nftables, asegúrate de que el puerto 1313 está abierto al tráfico entrante:

    sudo ufw allow 1313/tcp
    
  2. El Firewall de MAX / Ubuntu (El Anfitrión): Dado que estás usando el Modo Puente, los paquetes van directos del router a la interfaz virtual, pero a veces las reglas de filtrado de red del sistema MAX anfitrión pueden ponerse estrictas con el tráfico entrante a los adaptadores virtuales. Si experimentas problemas de visibilidad entre el anfitrión y el huésped, revisa el estado del firewall en MAX.

¡Y eso es todo! Una solución limpia, nativa y 100% local para probar tus desarrollos web como un auténtico profesional sin salir de tu propia red de casa. ¡A seguir picando código!


Documentación y referencias: Hugo · hugo server · Running a Hugo server on local and public networks — Nathan Craddock · Start the Hugo server with your local IP — Bino Varghese · Localhost — Wikipedia · Diseño web responsivo — MDN · Virtual Networking — manual de VirtualBox