Acceder por LAN a una dirección global con un router que no soporta NAT loopback

Hace unos días que me enfrento a un problema que por fin hoy he conseguido solucionar. Si es que le puedo llamar solución a esto, no es más que un parche pero para mi situación me sirve.

Os cuento: tengo una Raspberry Pi para hacer pruebas con un servidor web y tener un pequeño servidor Git. Con el servicio de noip.com tengo un dominio asignado a la IP pública de mi router, y los puertos SSH y HTTP redirigidos desde el router a mi Raspberry Pi, que tiene una dirección IP estática dentro la red local.

Vamos a suponer que esta es mi red local:
IP local Router: 192.168.1.1 (fija)
IP pública Router: 11.12.13.14 (dinámica)
IP Raspberry Pi: 192.168.1.112 (fija)
IP ordenador: 192.168.1.37 (dinámica)
Dominio Noip: midominio.no-ip.org

Antes de hacer la redirección de puertos, la dirección local 192.168.1.112 me servía tanto para acceder al servidor web como para entrar por SSH a mi Raspberry. 
Después de hacer la redirección de puertos desde el router lógicamente la dirección local seguía funcionando, pero el dominio no me funcionaba. Acceder a minominio.no-ip.org o intentar hacer una conexión por SSH con dicho dominio producía un mensaje de error. Tras un rato intentando solucionar el problema, intenté acceder al dominio usando al red 3G del móvil desconectando el WiFi, y funcionó.

Total, que el router funcionaba y la redirección de puertos también, pero si intentaba acceder al dominio desde dentro de la misma red a la que apunta algo en el router impedía conectarme al dominio.

Este error no es común a todos los routers, aquellos que permiten NAT loopback o NAT reflection consiguen enrutar los paquetes vengan de dónde vengan, pero los que no soportan NAT loopback como mi arcaico Xavi 7968 no pueden enrutar correctamente paquetes que salen y se dirigen a la misma red usando una dirección global.

La solución que he encontrado yo es muy sencilla: modificar el archivo hosts de Windows y Linux para que la resolución DNS no la realice el router sino el propio ordenador, y así mandará los paquetes directamente por red local.

En Windows este archivo hosts se encuentra en \system32\drivers\etc\ y basta con añadir la linea:
192.168.1.112     midominio.no-ip.org
para que todas las resoluciones del dominio se traduzcan a la dirección IP local, que será la dirección a la que se mandarán los paquetes y a la que el router sabrá llegar perfectamente.

En Linux este archivo lo encontramos en /etc/hosts.

Y así es como he logrado conectarme a una dirección global que apunta a la red desde la que inició la petición, espero que os sea útil.

Para leer un poco más sobre el tema recomiendo:
votar
edit post

Comments

Publicar un comentario

Hola, si tienes algo que decirnos este es tu sitio.