Qué es y para qué sirve: El reenvío de puertos permite exponer servicios que corren dentro de una máquina virtual al equipo host o a la red sin cambiar el modo de red de la VM. En este artículo aprenderás, paso a paso, a configurar el reenvío de puertos (NAT) en VirtualBox tanto desde la interfaz gráfica como desde la línea de comandos; verá ejemplos útiles (SSH, HTTP, RDP, UDP), comprobaciones y soluciones a errores comunes. La reenvío de puertos VirtualBox es la forma más rápida de acceder a un servicio guest cuando el adaptador está en NAT.
Requisitos previos y comprobaciones
Antes de empezar asegúrate de:
- Tener VirtualBox instalado y la VM creada.
- El adaptador de la VM configurado en NAT (o en una NAT Network si usarás ese modo).
- Disponer de privilegios para ejecutar
VBoxManageen el host (en Windows abrir CMD/PowerShell como administrador; en Linux/Mac usar el usuario normal si VirtualBox está en PATH). - Comprobar la versión de VBoxManage si dudas de la sintaxis:
VBoxManage --version.
Conceptos rápidos: NAT vs NAT Network vs Bridged
Breve resumen para elegir la opción correcta:
- NAT (adaptador clásico): la VM tiene su propia red «detrás» del host; ideal para acceso saliente. El reenvío de puertos se define por adaptador/VM y se usa cuando quieres abrir puertos puntuales del host hacia el guest.
- NAT Network: crea una red NAT administrada por VirtualBox a la que varias VMs pueden conectarse. Las reglas de port-forward se aplican al nivel de la NAT Network y pueden direccionar hacia IPs concretas de guests dentro de esa red.
- Bridged (puente): la VM actúa como nodo más de la LAN; no necesitas reenvío salvo que quieras llegar desde fuera de la LAN al host intermedio.
Si no estás seguro de qué modo usar, revisa las diferencias en profundidad para escoger la mejor alternativa (en algunos casos una guía sobre modos de red de VirtualBox y/o una red interna pueden ayudar).
Opción A — GUI paso a paso (VirtualBox Manager)
- Abre VirtualBox Manager y selecciona la VM.
- Click en Settings → Network.
- En el adaptador que esté en Attached to: NAT, pulsa Advanced → Port Forwarding.
- En el editor añade una regla con estos campos: Name, Protocol (TCP/UDP), Host IP, Host Port, Guest IP (opcional), Guest Port. Guardar y cerrar.
Verás la regla aplicada cuando inicies la VM. Usar la GUI es rápido para reglas puntuales y pruebas.
Opción B — Línea de comandos para NAT clásico (VBoxManage –natpf1 / –nat-pf1)
La sintaxis para un adaptador NAT en la VM 1 es:
VBoxManage modifyvm "MiVM" --natpf1 "nombre,proto,[hostip],hostport,[guestip],guestport"
Notas:
- Si dejas
hostipvacío (,,) o pones0.0.0.0, el puerto estará accesible en todas las interfaces del host. Para limitar a localhost usa127.0.0.1. - Para eliminar una regla:
VBoxManage modifyvm "MiVM" --natpf1 delete "nombre". - Ejemplo: abrir SSH del guest 22 al host 2222:
VBoxManage modifyvm "MiVM" --natpf1 "guestssh,tcp,,2222,,22"
Después arranca la VM (si estaba apagada) y prueba desde el host: ssh -p 2222 [email protected].
Comprobación de reglas en CLI
VBoxManage showvminfo "MiVM" | grep -i Forwarding
o inspecciona toda la info con VBoxManage showvminfo "MiVM" --details. También puedes listar reglas con utilidades como awk para extraer campos.
Opción C — NAT Network y port-forward con VBoxManage natnetwork (–port-forward-4 / –port-forward-6)
Si tu VM está en una NAT Network (varias VMs comparten la misma red), las reglas se crean a nivel de la red NAT:
VBoxManage natnetwork modify --netname natnet1 --port-forward-4 "nombre:tcp:[hostip]:hostport:[guestip]:guestport"
Ejemplo (host 1022 → guest 192.168.15.5:22):
VBoxManage natnetwork modify --netname natnet1 --port-forward-4 "ssh:tcp:[]:1022:[192.168.15.5]:22"
Para borrar la regla:
VBoxManage natnetwork modify --netname natnet1 --port-forward-4 delete ssh
Usar NAT Network es mejor cuando necesitas múltiples VMs con reglas centralizadas o direccionamiento a IPs estáticas dentro de la red NAT.
Ejemplos prácticos
- SSH:
VBoxManage modifyvm "MiVM" --natpf1 "ssh,tcp,127.0.0.1,2222,,22". Conexión:ssh -p 2222 [email protected]. - HTTP:
VBoxManage modifyvm "MiVM" --natpf1 "http,tcp,,8080,,80". Prueba:curl http://127.0.0.1:8080/. - RDP:
VBoxManage modifyvm "MiVM" --natpf1 "rdp,tcp,,3389,,3389". Cliente RDP a host:puerto. - UDP (ej. DNS):
VBoxManage modifyvm "MiVM" --natpf1 "dns,udp,,1053,,53". Prueba:dig @127.0.0.1 -p 1053 example.com.
Binding y conflictos (qué tener en cuenta)
- Host IP binding: usar
127.0.0.1limita el acceso al propio host (más seguro para pruebas). Dejar vacío o usar0.0.0.0expone el puerto en todas las interfaces. - Puerto en uso: si el puerto host ya está ocupado recibirás error o la regla fallará. Comprueba puertos libres antes de elegirlos:
ss -tulno en Windowsnetstat -an | findstr <puerto>. - Si la VM usa IP estática dentro de NAT, especifica el
guestipal crear la regla (requerido para NAT clásico en algunos casos).
Firewall del host e invitado: comprobar y abrir puertos
Host Windows (ejemplo abrir 2222 TCP):
netsh advfirewall firewall add rule name="Open SSH 2222" dir=in action=allow protocol=TCP localport=2222
Host Linux con UFW:
sudo ufw allow 2222/tcp
En el guest Linux comprueba que el servicio escucha:
ss -tuln | grep :22
En Windows guest revisa Windows Firewall o usa netsh advfirewall. En general, abre el puerto en ambos lados si hay cortafuegos activos.
Comprobaciones y solución de problemas (lista rápida)
- ¿El adaptador está en NAT o NAT Network? (Settings → Network)
- ¿La regla aparece en
showvminfoo en la GUI? - ¿El servicio está escuchando en el guest? (
ss/netstat/lsof) - ¿El firewall del host/guest permite el puerto? (UFW, iptables, Windows Firewall)
- ¿El puerto host está libre? (
ss/netstat) - Prueba desde el host:
telnet 127.0.0.1 2222onc -vz 127.0.0.1 2222,curlpara HTTP. - Si usas NAT Network, verifica que la regla apunta a la IP correcta del guest dentro de esa red.
Seguridad y buenas prácticas
- Para desarrollo, usa binding a
127.0.0.1para evitar exponer servicios a la LAN. - Si expones un servicio a la red, asegura el servicio con autenticación, claves (SSH) o TLS (HTTPs).
- Evita reenvíos masivos: crea solo las reglas necesarias y bórralas cuando ya no las uses.
- Registra y documenta las reglas para mantenimiento (nombre de regla descriptivo).
Resumen y recomendaciones finales
El reenvío de puertos en VirtualBox es una herramienta práctica y no invasiva para acceder a servicios de un guest cuando usas NAT. Para tareas puntuales la GUI es cómoda; para automatización y entornos con muchas VMs, usa VBoxManage con --natpf1 (NAT clásico) o --port-forward-4/6 sobre natnetwork. Comprueba siempre binding, puertos en uso y firewalls en host e invitado. Si necesitas que varias VMs compartan reglas centralizadas, prefiere NAT Network.
Preguntas frecuentes
- ¿Puedo reenviar un rango de puertos? VirtualBox no tiene una sintaxis directa para rangos en
--natpf1; crea reglas por puerto o automatiza la creación con scripts. - ¿Cómo borro todas las reglas de una VM? Borra regla por regla con
VBoxManage modifyvm "MiVM" --natpf1 delete "nombre". Antes lista las reglas conshowvminfo. - ¿Qué uso si quiero que la VM sea un equipo más de la red? Usa Bridged adapter en vez de NAT; así la VM obtiene IP en la LAN y no necesitas reenvío.
Si necesitas ejemplos concretos para un sistema operativo host (Windows/Linux) o un script para automatizar varias reglas, dime cuál y te preparo los comandos listos para copiar y ejecutar.
