tsocks, cómo acceder a internet si tienes un proxy SOCKS

22/03/2006

No se si alguna vez te has encontrado en un caso similar al que tengo yo en la oficina. Resulta que para acceder a Internet, tenemos que hacerlo a través de un proxy (concretamente tenemos un ISA Server configurado con autentificación NT).

Pues bien, recientemente me he instalado Ubuntu en una máquina virtual en mi equipo con Windows XP (utilizando el VMWare) y, obviamente, en principio no me sería posible acceder directamente a Internet (por ejemplo para realizar esta anotación) ya que, como he dicho, no tenemos conexión directa.

Con Ubuntu bienen varias aplicaciones (como el navegador Firefox) que permiten especificar un proxy, pero hay otras muchas (como ftp, telnet, etc…) que no lo soportan.

Para solucionar esto existe el proyecto TSOCKS.

¿Qué es tsocks?

Los servidores SOCKS son una forma de proxy que se utilizan generalmente en entornos LAN con contafuegos para permitir el acceso entre redes, y a menudo a Internet. El problema es que la mayoría de las aplicaciones no saben cómo obtener acceso a través de los servidores SOCKS. Esto significa que las aplicaciones de red que no entienden SOCKS están muy limitadas encuanto a las redes a las que pueden acceder. Un ejemplo de esto es simplemente ‘telnet’. Si estás en una red con cortafuegos a internet con un servidor SOCKS para el acceso exterior, telnet no pude utilizar este servidor y portanto no puedes hacer telnet hacia un servidor exterior en internet.

El role de tsocks es permitir a estas aplicaciones que no conocen SOCKS (ej. telnet, ssh, ftp, etc) utilizar SOCKS sin ninguna modificación. Es capaz de hacer esto interceptando las llamadas que la aplicación hace para establecer conexiones de red y renegociándolas a través del servidor SOCKS si es necesario.

tsocks internamente

tsocks se basa en el concepto de ‘shared library interceptor’. Mediante el uso de la variable de entorno LD_PRELOAD o del archivo /etc/ld.so.preload, tsocks se carga automáticamente en el espacio del proceso de cada programa ejecutado. Desde ahí sobre-escribe la función connect() normal proporcionando la suya propia. De este modo, cuando una aplicación llama a connect() para establecer una conexión TCP en su lugar pasa el control a tsocks. tsocks determina si la conexión tiene que realizarse a través de un servidor SOCKS (comprobando /etc/tsocks.conf) y, si es así, negocia la conexión (utilizando la función connect() real).

Para más información consulta las páginas del manual.

¿Cómo instalo tsocks?

Pues muy sencillo ya que Ubuntu tiene el paquete tsoks que te puedes instalar con Synaptic (si tienes acceso a internet en el equipo en el que lo quieres instalar -aunque supongo que no es el caso, si es que estás leyendo esto-), o te lo puedes descargar de Internet utilizando otro equipo y luego pasarlo en un lapiz USB o similar.

Si te lo has bajado de Internet, como es mi caso, tendrán un archivo .deb con un nombre similar a este (dependiendo de la versión que te hayas bajado):

tsocks_1.8beta5-2_i386.deb

Pues bien, para instalarlo ejecuta:

$ sudo dpkg -i tsocks_1.8beta5-2_i386.deb

Configurando tsocks

La configuración de tsocks se define en el archivo /etc/tsocks.conf y una configuración básica podría ser la siguiente:

$ sudo gedit /etc/tsocks.conf

local = 192.168.78.0/255.255.255.0
server = 192.168.78.1
server_type = 5
server_prot = 1080

donde indico que las direcciones de mi red local (para las cuales no se necesita utilizar el servidor SOCKS) van de la 192.168.78.0 a la 192.168.78.255; que el servidor SOCKS está en la dirección 192.168.78.1 (tiene que pertenecer a la red local); que se trata de un servidor SOCKS versión 5; y que atiende las peticiones en el puerto 1080.

Para más información consulta las páginas del manual.

Usando tsocks

Una vez configurado, ya podríamos acceder a servidores que se encuentran detrás de nuestro firewall invocando a tsocks de una forma “on-off” del siguiente modo:

$ tsocks ssh servidor.traselfirewall.net

o, si ejecutar “tsocks” antes de cada comando es demasiado trabajo, tsocks se puede activar o desactivar semi-permanentemente de tal forma que puedes hacer cosas como:

$ source /usr/bin/tsocks on
$ ssh host1.traselfirewall.net
$ ssh host2.traselfirewall.net
$ source /usr/bin/tsocks off

Para más información consulta las páginas del manual.

Socksificando el sistema

La forma de uso descrita anteriormente está bien, pero tiene varios inconvenientes. Por una parte, tenemos que estar continuamente activando y desactivando tsocks (a menos que utilicemos la segunda forma y todos los comandos los ejecutemos en la misma consola) y por otra nos encontramos con que tsocks, ejecutado del modo anteriomente descrito, no puede proporcionar proxy SOCKS para aplicaciones setuid o para aplicaciones que no se ejecutan desde una shell.

Para solucionar esto, se puede forzar LD_PRELOAD para todas las aplicaciones. Para ello debes añadir la ubicación de la librería libtsocks.so en el archivo /etc/ld.so.preload:

$ sudo gedit /etc/ld.so.preload

/usr/lib/libtsocks.so

NOTA: Es MUY IMPORTANTE que te asegures de poner bien el path a la librería ya que, de otro modo, el sistema no será capaz de arrancar y tendrás que utilizar un disco de rescate poder arrancarlo.

Ahora puedes reiniciar tu sistema y no te tendrás que preocupar más en la configuración del proxy de ningún programa.

Notas finales sobre mi configuración particular

Realmente en la oficina, como ya dije, tenemos un ISA Server con autentificación NT y por tanto no me podría conectar directamente a él utilizando el método descrito. Lo que tengo realmente es un servidor SOCKS instalado en mi equipo “real” (no la máquina virtual VMWare) al cual se conecta el Ubuntu de la máquina virtual. Dicho servidor SOCKS luego utiliza el ISA Server (gracias al “Cliente Firewall de Microsoft para ISA Server 2004” que también tengo instalado en mi XP y que, a su vez, transparentemente “socksifica” las aplicaciones que tengo en el XP y se autentifica usando mi usuario) para conectarse él mismo a Internet (una configuración un tanto rebuscada pero necesaria para mi caso particual).

Además, es conveniente configurar las aplicaciones que lo soporten para que hagan uso directamente del proxy. Por ejemplo en Firefox:

  • Abrimos “Editar” –> “Preferencias” –> “General” –> “Conexion” –> “Configuración de la conexión…”
  • Seleccionamos “Configuración manual del proxy” y en “Servidor SOCKS” y “Puerto” ponemos lo mismo que en “/etc/tsocks.conf”, en mi caso 192.168.78.1 y 1080 respectivamente.

Esto mejorará considerablemente el rendimiento y limitará la sobrecarga de tsocks.

Java, un caso especial

Supongo que será poque internamente la implementación de la Máquina Virtual de Java no utiliza la función connect() cuando realiza las conexiones TCP, pero el caso es que las aplicaciones de Java no son socksificadas.

En la documentación de red de Java podemos encontrar la solución a éste problema.

Simplemente tenemos que definir, al arrancar la aplicación, cual es el servidor de SOCKS y su puerto, del siguiente modo:

java -DsocksProxyHost=192.168.78.1 -DsocksProxyPort=1080 MiAplicacionJava

Algunos enlaces de interés

Dante – A Free Socks Implementation

3 Responses to “tsocks, cómo acceder a internet si tienes un proxy SOCKS”

  1. nicolle Says:

    En mi caso no se si podran ayudarme
    tengo mi msn sin coneccion,
    me funcionan todas las paginas,
    pero no me conecta al msn.
    Para poder conectarme, me pide el proxy SOCKS,
    pero no tengo ni el nombre principal, por asi decirlo,
    ni el nombre de usuario, ni la clave.
    Si pudieran ayudarme, de donde lo puedo conceguir,
    o si es que me pueden ayudar de como conectarlo.

    Bueno, de ante mano, les doy las gracias.

    Les saluda Atte.
    Nicolle Rivera


  2. […] en vez de contarlo paso a paso voy a incluír el link del mejor blog que he encontrado al respecto. https://rubensa.wordpress.com/2006/03/22/ubuntu-tsocks/ Es una guía muy completa que explica el caso de usar un servidor SOCKS como el de Mocochof […]

  3. ArYiX Says:

    $ sudo gedit /etc/tsocks.conf

    local = 192.168.78.0/255.255.255.0
    server = 192.168.78.1
    server_type = 5
    – server_prot = 1080
    + server_port = 1080


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: