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

108

Sempre que estou usando a Internet de um local inseguro (como o wifi público), gosto de usar um túnel ssh ( ssh -D port host ) para garantir que meu tráfego não seja detectado. Infelizmente, parece haver muitos aplicativos que não fornecem uma maneira de especificar um proxy (o Flash é um grande exemplo).

Parece que deve haver alguma maneira de usar um túnel para o tráfego de rede all do meu computador, mas sou completamente ignorante sobre como fazer isso. Qualquer ajuda seria muito apreciada.

    
por user7301 29.10.2009 / 01:51

7 respostas

54

Para fazer o que você está querendo, eu recomendo sshuttle .

Você usa assim:

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

Ele irá tunelar todo o seu tráfego TCP automaticamente para você. Você pode adicionar o argumento --dns para encapsular seu tráfego DNS também. O servidor remoto só precisa ter o Python instalado.

Se você quiser apenas tunelar programas específicos, eu recomendaria proxies .

Uma vez instalado, inicie seu proxy de ssh socks assim:

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

Isso iniciará a exibição de um proxy "SOCKS" em < porta local >.

Em seguida, edite /etc/proxychains.conf para apontar para a mesma porta que a < porta local >.

Por fim, inicie o seu programa que você deseja que seja assim:

proxychains <program name>

Deve funcionar. No entanto, alguns programas terão problemas para trabalhar com cadeias de proxy. Lembre-se também que, com o Firefox, você precisa alterar itens adicionais em about: config para forçá-lo a fazer pesquisas de DNS por meio do proxy, em vez de ignorá-lo.

Como nota adicional, em navegadores da web. Se eles suportarem proxies de meias, você não precisa fazer nada adicional para fazê-los usar o túnel ssh mencionado acima, basta inserir 127.0.0.1 para o servidor proxy SOCKS e o < local port > para a porta do proxy.

EDIT 3/29/16

Como este post ainda está vendo alguns upvotes, pensei em atualizá-lo. Proxychains ainda está na maioria dos repositórios Linux e ainda funciona no Linux. No entanto, o projeto é efetivamente abandonado e não funciona no OSX. Para Linux ou OSX, eu recomendo altamente a atualização para uma bifurcação ainda mantida: proxychains-ng: link

Além de trabalhar tanto no Linux quanto no OSX, é fácil compilar e também oferece suporte muito melhor para o tunelamento de DNS.

Eu também devo mencionar outra opção, que é redsocks. Ele funciona de maneira semelhante ao proxychains (-ng) e também é provável que você esteja em seu repo: link

    
por 23.05.2014 / 18:08
44

man ssh dá um exemplo exatamente disso. Uma vpn baseada 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 você tenha essa nova interface, você teria que fazer dela a rota padrão, que é uma questão diferente.

    
por 18.07.2011 / 12:24
7

Procure a opção "Tunnel" no ssh. Isso cria um dispositivo de encapsulamento para o qual você pode atribuir um endereço IP e, em seguida, alterar a rota padrão para usar esse encapsulamento.

    
por 01.11.2009 / 18:40
4

Desenvolvi um software que permite encaminhar todo o TCP e, opcionalmente, o UDP por meio de um proxy SOCKS5, em todo o sistema.

link

Pode até ser instalado em um roteador para encaminhar todas as conexões de computadores na LAN.

    
por 18.07.2011 / 10:55
-1

Só queria esclarecer que (o host da porta ssh -D) não é uma maneira 100% segura de o tráfego não ser detectado. Adicionando (ssh -D -c host da porta blowfish) seria uma escolha melhor, porque você está adicionando pelo menos criptografia à sua sessão. Há mais opções que você pode adicionar, mas é fácil digitar apenas "man ssh" no seu terminal ou no Google para obter uma listagem completa.

A opção que eu acho que você está procurando é configurar uma VPN (Virtual Private Network)

Veja este artigo para entender a diferença entre os dois ( SSH vs. VPN ) ou uma boa versão resumida , antes de abordar a configuração de sua própria VPN. Se você decidir ir pela rota VPN, eu recomendo OpenVPN , é grátis e tem muita documentação e suporte.

    
por 29.10.2009 / 02:43
-1

REDES PRIVADAS VIRTUAIS BASEADAS EM SSH      ssh contém suporte para encapsulamento de VPN (Virtual Private Network) usando      o tun (4) pseudo-dispositivo de rede, permitindo que duas redes sejam unidas      com segurança. A opção de configuração sshd_config (5) controles PermitTunnel      se o servidor suporta isso, e em que nível (camada 2 ou 3      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).
    
por 12.03.2013 / 23:57
-3

Use estes exemplos:

  • Encaminhe a porta 80 de um host remoto para o 8888 no seu host local

    ssh -fnN -L8888:localhost:80 user@server

    Use isto para acessar serviços em um host remoto que só estão disponíveis lá

  • Encaminhe a porta 80 de yourlocalhost para 8888 em um host remoto

    ssh -fnN -R8888:localhost:80 user@server

    Use isso para permitir que os usuários acessem seus serviços: servidor da Web ou o que for.

Felicidades! :)

    
por 01.11.2009 / 18:47