2009-10-29 00:51:34 +0000 2009-10-29 00:51:34 +0000
120
120

¿Cómo puedo canalizar todo mi tráfico de red a través de SSH?

Siempre que estoy usando internet desde un lugar inseguro (como una wifi pública) me gusta usar un túnel ssh (ssh -D port host) para asegurarme de que mi tráfico no puede ser olfateado. Desafortunadamente, parece que hay muchas aplicaciones que no proporcionan una manera de especificar un proxy (Flash es un ejemplo importante).

Parece que debería haber alguna forma de utilizar un túnel para todo el tráfico de red de mi ordenador, pero soy un completo ignorante de cómo hacerlo. Cualquier ayuda sería muy apreciada.

Risposte (7)

65
65
65
2014-05-23 16:08:57 +0000

Para hacer lo que quieres, te recomiendo sshuttle .

Lo usas así:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

Tunelizará todo tu tráfico TCP automáticamente. Puedes añadir el argumento --dns para que también tunelice tu tráfico DNS. El servidor remoto sólo necesita tener instalado Python.

Si sólo quiere tunelizar programas específicos le recomiendo proxychains .

Una vez instalado, inicie su proxy ssh socks así:

ssh -fNTD 127.0.0.1:<local port> username@sshserver

Esto iniciará un proxy “SOCKS” escuchando en <puerto local>.

A continuación edite /etc/proxychains.conf para que apunte al mismo puerto que <puerto local>.

Por último, inicie el programa que desea proxiar de la siguiente manera:

proxychains <program name>

Debería funcionar. Sin embargo, algunos programas tendrán problemas para trabajar con cadenas de proxy. También tenga en cuenta, que con Firefox, tiene que cambiar elementos adicionales bajo about:config para forzarlo a hacer búsquedas de DNS a través del proxy en lugar de evitarlo.

Como nota adicional, en los navegadores web. Si soportan proxies socks, no necesitas hacer nada adicional para que utilicen el mencionado, túnel ssh, simplemente introduce 127.0.0.1 para el servidor proxy SOCKS y el <puerto local> para el puerto del proxy.

EDIT 3/29/16

Ya que este post sigue viendo algunos upvotes, pensé en actualizarlo. Proxychains todavía está en la mayoría de los repos de Linux y todavía funciona en Linux. Sin embargo, el proyecto está efectivamente abandonado y no funciona en OSX. Tanto para Linux como para OSX, recomiendo encarecidamente la actualización a un fork aún mantenido: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Además de funcionar tanto en Linux como en OSX, es fácil de compilar, y también tiene un soporte mucho mejor para la creación de túneles DNS.

También debo mencionar otra opción, que es redsocks. Funciona de manera similar a proxychains(-ng) y también es probable que esté en su dist repo: https://github.com/darkk/redsocks

EDIT 11/27/19 Si opta por proxychains, por favor, utilice proxychains-ng. Hay algunas correcciones de errores graves sobre la versión heredada, como: https://github.com/rofl0r/proxychains-ng/issues/292

50
50
50
2011-07-18 10:24:01 +0000

man ssh da un ejemplo de esto exactamente. Una vpn basada en ssh:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely. The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

snip

Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs. More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

Una vez que tengas esa nueva interfaz levantada, sólo tendrías que convertirla en la ruta por defecto, lo cual es otra cuestión.

6
6
6
2009-11-01 17:40:29 +0000

Busca la opción “Túnel” en ssh. Esto crea un dispositivo de túnel al que puedes asignar una dirección IP, y luego cambias la ruta por defecto para usar ese túnel.

4
4
4
2011-07-18 08:55:38 +0000

He desarrollado un software que permite reenviar todo TCP y opcionalmente UDP a través de un proxy SOCKS5, en todo el sistema. http://code.google.com/p/badvpn/wiki/tun2socks

Puede incluso instalarse en un router para reenviar todas las conexiones de los ordenadores de la LAN.

0
0
0
2013-03-12 22:57:21 +0000

REDES PRIVADAS VIRTUALES BASADAS EN SSH ssh contiene soporte para el tunelado de Redes Privadas Virtuales (VPN) usando el pseudo-dispositivo de red tun(4), permitiendo unir dos redes de forma segura. La opción de configuración sshd_config(5) PermitTunnel controla si el servidor soporta esto, y a qué nivel (capa 2 o 3 de tráfico).

The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option. The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs. More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).
-2
-2
-2
2009-10-29 01:43:30 +0000

Sólo quería aclarar que (ssh -D port host) no es una forma 100% segura para que el tráfico no sea olfateado. Añadir (ssh -D -c blowfish port host) sería una mejor opción porque al menos estás añadiendo encriptación a tu sesión. Hay más opciones que podrías añadir pero es bastante fácil escribir “man ssh” en tu terminal o buscar en Google para obtener un listado completo.

La opción que creo que estás buscando es configurar una VPN (Red Privada Virtual)

Echa un vistazo a este artículo para entender la diferencia entre los dos SSH vs. VPN ) o una buena versión resumida , antes de abordar la configuración de tu propia VPN. Si decides ir por la ruta de la VPN te recomiendo OpenVPN , es gratis y tiene mucha documentación y soporte.

-3
-3
-3
2009-11-01 17:47:59 +0000

Utilice estos ejemplos:

  • Reenviar el puerto 80 de un host remoto al 8888 en su localhost

  • Reenviar el puerto 80 de su localhost al 8888 en un host remoto

¡Salud! :)