En los últimos días he estado ocupado reubicando servers, y uno de los problemas que tuve es que ciertas aplicaciones usan el IP en lugar de nombre para hacer referencia al servidor, ésto hace imposible el asignar un nuevo IP, sin cambiar la aplicación. La única solución que encontre fue crear tuneles a un server que tuviera todas las IP’s que necesitaba, para luego hacer un forward de todos los paquetes IP a través de los tuenel que había creado. Como siempre digo, para que me sirva en un futuro a mi, y a cualquier otro que necesite resolver un problema similar, aquí les detallo como crear un tunel usando el OpenSSH que es una aplicación Open Source y que ofrece esta opción desde su versión 4.3, para desarrollar este tutorial me he basado en otro que encontré en inglés aquí.
Manos a la obra, primero comencemos instalando los siguientes paquetes:
# apt-get install vtun bridge-utils openssh-server openssh-client openssh-blacklist
Asegurarse de que en ambos equipos aparezcan estas líneas en el archivo /etc/ssh/sshd_config:
PermitRootLogin yes
PermitTunnel yes
Asegurarse de que en ambos equipos el forwarding entre interfaces este habilitado:
# echo 1 > /proc/sys/net/ipv4/ip_forward
Luego de lo anterior debemos de crear el tunel desde el equipo que este en la nueva red con éste comando (asumiremos que 123.123.123.123 es el IP antiguo):
# ssh -N -w 0:0 root@123.123.123.123&
Ahora hay que asignar a cada equipo un IP privada para cada extremo del tunel, para nuestro caso:
En el server con IP antigua:
# ifconfig tun0 10.0.0.1 netmask 255.255.255.0
En el server con IO nueva:
# ifconfig tun0 10.0.0.2 netmask 255.255.255.0
Finalmente en el equipo que tiene la IP antigua debemos de hacer el port-forwarding y el enmascarado de la interface del tunel (la idea es hacer un NAT, para que los paquetes generados por el server con la nueva IP sean enviados de vuelta por el tunel), para ello ejecutamos éstos comandos:
# iptables -F
# iptables -t nat -F
# iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123
–dport 80 -j DNAT –to 10.0.0.2:80
# iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Ya esta listo, ahora si abrimos en un browser el URL: http://123.123.123.123 (asumiendo que ese sea el valor de la antigua IP) veremos el webserver que tiene la nueva IP.
Lo anterior también funcionaría si desearamos asignarle IP público a un equipo que esta detras de un NAT.
El port forwarding es hecho por puerto, así que no se olviden de crear una regla para cada servicio que quieran ofrecer.
Aquellos que deseen automatizar el proceso con un script y necesiten crear la conexión ssh sin introducir el password manualmente, pueden seguir éste tutorial que explica como establecer una conexión ssh sin necesidad de tipear el password manualmente.
Finalmente, algo que olvidé mencionar al inicio es que este tutorial esta basado sobre Debian, se puede usar lo mismo sobre Ubunto añadiendo "sudo" al incio de cada domando, y en otras distribuciones haciendo la instalación de OpenSSH 4.3 o superior y de TUN/TAP.
Espero que toda ésta información les haya sido de provecho, y les pueda haber ahorrado algún tiempo googleando. Cuálquier comentario o sugerencia para mejorar el contenido de este howto sera bienvenido.