Público objetivo : Intermedio
  • Requisitos asumidos : conocimientos básicos de Ubuntu, del terminal, conceptos básicos de redes

  • Conceptos técnicos : NAT, reenvío de puertos, cortafuegos, proxy inverso

  • Comandos de sistema: utilización del terminal, configuración de red

  • Secciones avanzadas : monitoring, seguridad, alternatives cloud

El problema: NAT y direcciones privadas

Problemática : ¿Estás desarrollando una aplicación web en tu máquina Ubuntu y deseas que sea accesible desde fuera de tu red doméstica? ¡Estás en el lugar correcto! En este artículo veremos cómo exponer un servicio local (por ejemplo en el puerto 8080) a Internet mediante la configuración del reenvío de puertos en tu caja de internet.

Por defecto, tu router de internet utiliza el NAT (Network Address Translation) para compartir una única dirección IP pública entre todos los dispositivos de tu red doméstica. Tus máquinas locales utilizan direcciones IP privadas (192.168.x.x, 10.x.x.x, etc.) que no son enrutables en Internet.

Cuando inicias un servicio en tu máquina Ubuntu (por ejemplo, un servidor web en el puerto 8080), solo es accesible desde tu red local. Para hacerlo accesible desde Internet, debemos configurar una redirección de puertos.

Paso 1: Identificar tu dirección IP pública

Antes de todo, obtengamos la dirección IP pública de tu conexión a Internet :

# Plusieurs méthodes au choix
curl ifconfig.me
curl ipecho.net/plain
wget -qO- http://ipecho.net/plain

# Ou encore
curl -s checkip.amazonaws.com

Esta dirección IP es la que los internautas utilizarán para acceder a su servicio.

Paso 2: Conocer la dirección IP local de tu máquina Ubuntu

Su máquina Ubuntu tiene una dirección IP privada en su red local. Para conocerla :

# Afficher toutes les interfaces réseau
ip addr show

# Ou plus spécifiquement pour l'interface principale
ip route get 1.1.1.1 | awk '{print $7; exit}'

# Alternative avec hostname
hostname -I | awk '{print $1}'

Anote esta dirección (por ejemplo`192.168.1.100`), lo necesitaremos para la configuración.

Paso 3: Configurar el reenvío de puertos en su router

La configuración varía según el modelo de tu box, pero el principio permanece el mismo :

Acceso a la interfaz de administración

Abre tu navegador y ve a la interfaz web de tu box :

  • Freebox:

(Note: The output preserves the exact characters you provided, including the leading space(s) around the colon.)192.168.1.1 ou mafreebox.freebox.fr

  • Livebox Orange : 192.168.1.1

  • SFR Caja:`192.168.1.1`

  • Bbox Bouygues:`192.168.1.254`

Configuración de la redirección

Busca la sección dedicada al port forwarding (los nombres varían):

  • Redirección de puertos

  • NAT/PAT

  • Reenvío de puertos

  • Servidores de juegos

Crea una nueva regla con estos parámetros:

campo Valor

Nombre/Descripción

Servicio Web Ubuntu" (o otro nombre explícito)

Puerto externo (o puerto público)

8080

Dirección IP interna

La IP de tu máquina Ubuntu (ej: 192.168.1.100)

Puerto interno (o puerto privado)

8080

protocolo

TCP

Estado

Activado

Paso 4: Configuración del servicio en Ubuntu

Asegúrate de que tu servicio escuche en todas las interfaces, no solo en localhost:

# ✅ Correct : écoute sur toutes les interfaces
python3 -m http.server 8080 --bind 0.0.0.0

# ❌ Incorrect : écoute seulement en local
python3 -m http.server 8080 --bind 127.0.0.1

Para comprobar que su servicio escucha correctamente :

# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080

Deberías ver algo como`0.0.0.0:8080`y no`127.0.0.1:8080`.

Paso 5: Configuración del firewall Ubuntu

Ubuntu utiliza UFW (Uncomplicated Firewall) por defecto. Verifique su estado y permita el puerto si es necesario:

# Vérifier le statut du pare-feu
sudo ufw status

# Si le pare-feu est actif, autoriser le port 8080
sudo ufw allow 8080/tcp

# Ou plus spécifiquement pour un service web
sudo ufw allow 'Apache'  # si vous utilisez Apache
sudo ufw allow 'Nginx Full'  # si vous utilisez Nginx

Paso 6: Prueba y validación

Prueba desde la red local

Primero, prueba el acceso desde otra máquina de tu red local:

# Remplacez par l'IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080

Prueba desde el exterior

Ahora, prueba desde Internet usando tu IP pública :

# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080

También puedes utilizar herramientas en línea como :

Buenas prácticas y seguridad

Seguridad básica

# Configurer fail2ban pour protéger contre les attaques par force brute
sudo apt update && sudo apt install fail2ban

# Limiter l'accès avec UFW (exemple : autoriser seulement certaines IP)
sudo ufw allow from 203.0.113.0/24 to any port 8080

Monitoreo de las conexiones

# Surveiller les connexions en temps réel
sudo netstat -an | grep :8080

# Logs des connexions (selon votre application)
sudo tail -f /var/log/nginx/access.log  # pour Nginx
sudo journalctl -f -u your-service      # pour un service systemd

Uso de un proxy inverso

Para una mejor seguridad y flexibilidad, considere el uso de un reverse proxy como Nginx:

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Alternativas al reenvío de puertos

Soluciones en la nube

  • ngrok: túnel seguro temporal

  • Cloudflare túnelsolución gratuita y segura

  • serveo.net: túnel SSH simple

# Exemple avec ngrok
ngrok http 8080

# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net

VPS y reverse proxy

Para uso profesional, considere el uso de un VPS con un proxy inverso que apunte a su infraestructura local a través de VPN.

Solución de problemas

Problemas comunes

Problema Solución

Servicio inaccesible desde el exterior

Verifique la configuración del reenvío de puertos y que el servicio escuche en 0.0.0.0

Conexión rechazada

El servicio no está iniciado o está escuchando solo en 127.0.0.1

Timeout de conexión

Problema de cortafuegos (box o Ubuntu) o reenvío de puertos mal configurado

IP pública cambia regularmente

Configure un DNS dinámico (DynDNS, No-IP, etc.).

Depuración de red

# Tester la connectivité locale
telnet localhost 8080

# Tester depuis une autre machine du réseau
telnet 192.168.1.100 8080

# Vérifier les routes réseau
ip route show

# Analyser le trafic réseau
sudo tcpdump -i any port 8080

Conclusión

Exponer un servicio local en Internet requiere una configuración cuidadosa del reenvío de puertos, de la seguridad y del monitoreo. Aunque este enfoque es perfecto para el desarrollo o para proyectos personales, considere las alternativas más robustas (VPS, CDN, servicios en la nube) para un uso en producción.

Lo importante es siempre tener la seguridad en mente: utilice contraseñas fuertes, actualice regularmente su sistema y vigile los accesos a sus servicios expuestos.

¡No dudes en compartir tus experiencias y preguntas en los comentarios!

Articles connexes