29 de diciembre de 2010

Redirección de IP y puertos en Windows

Hoy necesité dar mantenimiento a una aplicación backend, con la cual se comunica una aplicación hecha en Flash. Hice los cambios, la instalé en mi servidor de aplicaciones de desarrollo, y entonces... me di cuenta que no podía modificar el código fuente de la aplicación en Flash ☹. Esto me impedía probar mis cambios, pues no podía hacer que accediera mi servidor de desarrollo y no el de producción.

Para resolverlo, primero modifiqué el archivo hosts de Windows (C:\WINDOWS\system32\drivers\etc\hosts) para redirigir el dominio de producción a la dirección IP de mi computadora.

#Archivo hosts:
#ipaddress domain
127.0.01   www.ServidorDeProduccion.com

Esto permitió que el navegador de Internet, en lugar de acceder www.ServidorDeProduccion.com, en realidad se conectara a mi computadora. Para que Windows tomara el cambio, tuve que borrar su cache de DNS, mediante ejecutar en la línea de comando.

ipconfig /flushdns

Para desplegar las entradas que tiene el cache de DNS, se puede usar el parámetro displaydns.

Finalmente quedó el problema del puerto. Mi servidor de aplicaciones de desarrollo escucha el puerto 7001, pero en producción se accede el puerto 80. Después de buscar en Google, encontré una excelente entrada en un blog, titulada Port Redirection with Windows. En ella, el autor comparte con nosotros una modificación a la versión de Windows del deamon rinetd, el cual permite redirigir los puertos, de manera que cuando la aplicación en Flash intenta conectarse con el puerto 80 en realidad accede el puerto 7001.

#Archivo rinetd.conf:
#bindaddress    bindport connectaddress connectport
nnn.nnn.nnn.nnn 80       127.0.0.1      7001

La columna bindaddress necesita tener la dirección IP de mi máquina.

Quedó perfecto. Pude probar mis cambios y planear la instalación en producción.