Exponer un servicio local en Internet desde Ubuntu: Guía completa del reenvío de puertos
Publié le 28 May 2025
- El problema: NAT y direcciones privadas
- Paso 1: Identificar tu dirección IP pública
- Paso 2: Conocer la dirección IP local de tu máquina Ubuntu
- Paso 3: Configurar el reenvío de puertos en su router
- Paso 4: Configuración del servicio en Ubuntu
- Paso 5: Configuración del firewall Ubuntu
- Paso 6: Prueba y validación
- Buenas prácticas y seguridad
- Alternativas al reenvío de puertos
- Solución de problemas
- Conclusión
-
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
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!