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

Como posso tunelar todo o tráfego da minha rede através do SSH?

Sempre que estou a utilizar a Internet a partir de um local inseguro (tal como wifi público) gosto de utilizar um túnel ssh (ssh -D port host) para garantir que o meu tráfego não possa ser farejado. Infelizmente, parece haver muitas aplicações que não fornecem uma forma de especificar um proxy (Flash é um exemplo importante).

Parece que deveria haver alguma forma de utilizar um túnel para toda a rede de tráfego do meu computador, mas eu ignoro completamente como fazer isto. Qualquer ajuda seria muito apreciada.

Respostas (7)

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

Para fazer o que deseja, recomendo sshuttle .

Utiliza-o desta forma:

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

Irá canalizar automaticamente todo o seu tráfego TCP para si. Pode adicionar o argumento --dns para o fazer túnel também para o seu tráfego DNS. O servidor remoto só precisa de ter o Python instalado.

Se quiser apenas túneis de programas específicos eu recomendaria proxychains .

Uma vez instalado, inicie o seu proxy de meias ssh desta forma:

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

Isto iniciará um proxy “SOCKS” a ouvir na porta local\>.

Depois editar /etc/proxychains.conf para apontar para a mesma porta que < porto local>>.

Finalmente, inicie o seu programa que pretende proxy-ed assim:

proxychains <program name>

Deverá apenas funcionar. Contudo, alguns programas terão dificuldade em trabalhar com Cadeias de Proxy. Tenha também em mente, que com Firefox, terá de alterar itens adicionais sob about:config para forçá-lo a fazer pesquisas DNS através do proxy em vez de o contornar.

Como nota adicional, em navegadores web. Se suportam proxy de meias, não é necessário fazer nada adicional para que utilizem o túnel ssh acima mencionado, basta introduzir 127.0.0.1 para o servidor proxy SOCKS e a porta local\> para a porta proxy.

EDIT 3/29/16

Uma vez que este post ainda está a ver alguns upvotes, pensei em actualizá-lo. Proxychains ainda se encontra na maioria dos repositórios Linux e ainda funciona no Linux. No entanto, o projecto está efectivamente abandonado e não funciona no OSX. Tanto para Linux como para OSX, recomendo vivamente a actualização para um garfo ainda em manutenção: proxychains-ng: https://github.com/rofl0r/proxychains-ng

Além de trabalhar tanto em Linux como em OSX, é fácil de compilar, e tem também um suporte muito melhor para túneis DNS.

Devo também mencionar outra opção, que é o redsocks. Funciona de forma semelhante à proxychains(-ng) e é também provável que funcione no seu redsocks dist: https://github.com/darkk/redsocks

EDIT 11/27/19* Se seguir a rota proxychains, por favor use proxychains-ng. Há algumas correcções sérias de bugs sobre a versão herdada, como por exemplo: https://github.com/rofl0r/proxychains-ng/issues/292

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

man ssh dá um exemplo disso mesmo. Um vpn baseado em 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).

Uma vez que tenha essa nova interface, só terá de fazer dela a rota padrão, o que é uma questão diferente.

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

Procure a opção “Túnel” em ssh. Isto cria um dispositivo de túnel ao qual se pode atribuir um endereço IP, e depois alterar a rota padrão para utilizar esse túnel.

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

Desenvolvi software que lhe permite encaminhar todo o TCP e opcionalmente UDP através de um proxy SOCKS5, em todo o sistema. http://code.google.com/p/badvpn/wiki/tun2socks

Pode até ser instalado num router para reencaminhar todas as ligações a partir de computadores na LAN.

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

SSH-BASED VIRTUAL PRIVATE NETWORKS ssh contém suporte para túneis de Rede Privada Virtual (VPN) usando o pseudo-dispositivo de rede tun(4), permitindo a união segura de duas redes. A opção de configuração sshd_config(5) PermitTunnel controla se o servidor suporta isto, e a que nível (camada 2 ou 3 traf- fic).

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ó queria esclarecer que (ssh -D port host) não é uma forma 100% segura para o tráfego não ser farejado. Adicionar (ssh -D -c blowfish port host) seria uma escolha melhor porque está pelo menos a adicionar encriptação à sua sessão. Há mais opções que poderia adicionar mas é suficientemente fácil digitar “man ssh” no seu terminal ou Google para uma listagem completa.

A opção que penso que procura é a criação de uma VPN (Virtual Private Network)

Dê uma vista de olhos neste artigo para compreender a diferença entre os dois SSH vs. VPN ) ou uma boa versão resumida , antes de se ocupar da criação da sua própria VPN. Se decidir seguir a rota VPN, recomendo OpenVPN , a sua livre e muita documentação e apoio.

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

Use estes exemplos:

  • Avançar porta 80 de um anfitrião remoto para 8888 no seu anfitrião local

  • Avançar porta 80 de yourlocalhost para 8888 num anfitrião remoto

Saúde! :)