Redireccionar todas las peticiones a un puerto hacia localhost

El proyecto en el trabajo actualmente utiliza subdominios del dominio principal, y limita las capacidades o redirige a otro dominio en función del punto de entrada o del usuario, por lo que cuando desarrollo en local necesito que mi ordenador responda las peticiones a todos esos dominios como si fuera al localhost.

La solución rápida con la que he estado trabajando hasta ahora es modificar el fichero /etc/hosts y añadir tantos nombres a la IP 127.0.0.1 como dominios necesito. Algo como esto:

127.0.0.1 myproject.com www.myproject.com company1.myproject.com

Como digo, es la solución rápida, pero no la más cómoda, ya que para cada dominio nuevo que necesite tengo que modificar el fichero hosts, reiniciar el navegador (supongo que habría que limpiar la cache de DNS en lugar de hacer esto) y volver a probar.

Cansado de tener que hacerlo cada dos por tres (si repito algo más de 3 veces, siempre busco una solución para no tener que hacerlo más), he estado buscando una forma de agilizar el proceso, pero no daba con la solución.

En primer lugar intenté ver si con un proxy local me podía valer, pero no encontré ninguno que me permitiera cambiar la dirección IP destino en función del dominio. Por lo que me fui al tema de servidores de DNS locales, y ahí encontré una solución intermedia con Dnsmasq, mediante el cual podía tener dominios “*.myproject.dev” que se redirigían al servidor local, pero que no acababa de convencerme.

Al fin, Alex me dio la solución: usar iptables. La idea es que todas las URLs que vayan a un puerto determinado, en lugar de ir al destino original, acaben en mi ordenador. Por ejemplo, si escribo http://www.google.com:3000 en la barra de direcciones, en lugar de ir a google, se hará una petición a mi ordenador en el puerto 3000. Mola.

La solución es ejecutar  la siguiente linea:

sudo iptables -t nat -I OUTPUT -p tcp 
      --dport 3000 -j DNAT --to-destination 127.0.0.1

et voila!. Todas las peticiones salientes al puerto 3000 se reencaminarán a mi ordenador.

Si en lugar de redirigir todas las peticiones, sólo quisiéramos redirigir las de un servidor determinado, se le puede indicar mediante la IP. Por ejemplo, con la siguiente línea redirigiría todas las peticiones al puerto 3000 de www.google.es a mi ordenador:

sudo iptables -t nat -I OUTPUT -p tcp -d 216.239.59.104 
      --dport 3000 -j DNAT --to-destination 127.0.0.1

Deja un comentario