Modificando nuestra ubicación geográfica

Posted on Monday, May 25, 2009

Modificando nuestra ubicación geográfica

En este artículo vamos a ver como podemos cambiar nuestra ubicación geográfica (GeoIP) sin movernos del sitio. Es decir, hacer que parezca que estamos en un país en el que no estamos.

La situación es la siguiente: hay determinados servicios que sólo están disponibles para algunos países o que ofrecen distintos contenidos dependiendo del país. ¿Qué podemos hacer si queremos usar los servicios de otro país? Pues hacerle creer al servicio que estamos en ese otro país.

Para ello necesitaremos un proxy, ese gran desconocido para algunos y una herramienta de uso habitual para otros. En otros tiempos era común que algunos proveedores de acceso a Internet impusiesen el uso de sus proxies para acceder a determinados servicios, pero actualmente este uso de los proxies cayó un poco en desuso y cada vez se usan más para otros fines distintos a los que fueron pensados.
Lo difícil de este punto es encontrar un proxy, que funcione, que no tenga una política demasiado restrictiva y que esté en el país que buscamos. Por suerte contamos con Tor, un servicio de ecaminamiento P2P cuyo funcionamiento en cierto modo podría recordarnos a Freenet. Cuando ponemos en marcha Tor nos crea un proxy SOCKS5 que por defecto será de acceso sólo local en el puerto 9050. Todas las conexiones que se dirijan a ese proxy local serán redirigidas a alguno de los demás peers de la red Tor hasta que alguno alcance el destino y nos devuelva el resultado.

Por lo tanto, el primer paso será instalar un cliente Tor (recomiendo Vidalia) y ya tendremos a nuestro servicio toda una red mundial de proxies. Pero resulta que sólo queremos usar los de un determinado país. Para hacer esto tendremos que editar el fichero de configuración de Tor, lo que en Vidalia se hace abriendo el Panel de Control de Vidalia, después hacemos clic en el botón Preferencias y en la ventana de preferencias que se abrirá vamos a la sección Avanzado y allí hacemos clic en el botón Editar actual torrc. Nos aparecerá una ventana para editar el fichero torrc en el que añadiremos una línea ExitNodes como la siguiente (o modificaremos la que ya exista, si es el caso):

ExitNodes {xx}

Reemplazando xx por el código ISO 3166 del país correspondiente. Por ejemplo, si queremos conectarnos a través de nodos alemanes pondremos:

ExitNodes {de}

Ya podemos reiniciar Tor y simular que nos conectamos desde el país xx poniendo el proxy Tor (por defecto 127.0.0.1:9050) en el programa que estemos usando. Pero, ¿y si el programa no soporta proxies SOCKS5? Si el programa, soporta proxies HTTP, podemos usar polipo.

Pero hay programas que no soportan proxies de ningún tipo, por ejemplo, telnet. Para estos casos tenemos dos opciones: tsocks/torsocks y ksb26.

tsocks es una librería que se inyecta en el programa que vamos a ejecutar haciendo uso de la variable LD_PRELOAD y desvía las conexiones de red del programa por un proxy. torsocks es una variante de tsocks optimizada para Tor. Para usar un programa con Tor a través de tsocks/torsocks no tenemos más que configurar el programa para que sea el proxy de Tor el que use (es muy sencillo y en el propio fichero de configuración viene un ejemplo de la configuración necesaria, así que no voy a profundizar en esto) y después ejecutar el programa con tsocks/torsocks:

tsocks programa

Pero la opción que me parece más interesante es la de ksb26 ya que hace la redirección a nivel de kernel en vez de inyectar una librería y nos permite configurar de una forma sencilla cuáles son las conexiones que queremos redirigir por el proxy. ksb26 es un módulo para el núcleo 2.6 de Linux que permite redirigir de forma transparente (es decir, sin que el programa "se entere") determinadas conexiones a otra dirección. Si tu caso es el mismo que el mío, puede que necesites hacer algunas modificaciones que publicaré más adelante para que el módulo compile con kernels modernos. Una vez compilado el módulo lo cargamos:

modprobe ksb26

El módulo se configura a través del dispositivo /dev/ksb26, sin embargo en ocasiones este dispositivo no está correctamente creado y debemos eliminarlo y volver a crearlo (podemos ver los códigos major y minor del dispositivo en dmesg o syslog):

rm -f /dev/ksb26
mknod /dev/ksb26 c 244 0

Ya sólo nos falta añadir qué conexiones se deben redirigir a qué direcciones. Para configurar en ksb26 los proxies que queremos usar (el proxy Tor en nuestro caso), la sintaxis es la siguiente:

echo '#Sdireccion_ip:puerto;version_socks|' >| /dev/ksb26

y para escoger qué conexiones deben pasar por el proxy

echo '#Hdireccion_ip:puerto;|' >| /dev/ksb26

Podemos usar * como comodín para la dirección IP y 0 para todos los puertos. En caso de cometer un error se puede borrar la configuración con:

echo '#cls|' >| /dev/ksb26

Así, por ejemplo, si tenemos el proxy Tor ejecutándose en el puerto 9050 de localhost y queremos redirigir por Tor todas las conexiones a la dirección IP 208.77.188.166, configuraremos ksb26 del siguiente modo:

echo '#S127.0.0.1:9050;5|' >| /dev/ksb26
echo '#H208.77.188.166:0;|' >| /dev/ksb26