Para fazer o que você quer, recomendo sshuttle .
Você o usa assim:
./sshuttle -r username@sshserver 0.0.0.0/0 -vv
Ele encapsulará todo o seu tráfego TCP automaticamente para você. Você pode adicionar o --dns
argumento para que ele também encapsule o tráfego DNS. O servidor remoto precisa apenas ter o Python instalado.
Se você quiser apenas encapsular programas específicos, eu recomendaria proxychains .
Depois de instalado, inicie o proxy ssh socks da seguinte maneira:
ssh -fND 127.0.0.1:<local port> username@sshserver
Isso iniciará um proxy "SOCKS" escutando em <porta local>.
Em seguida, edite o /etc/proxychains.conf para apontar para a mesma porta que <porta local>.
Por fim, inicie o programa que você deseja usar como proxy:
proxychains <program name>
Deveria funcionar. No entanto, alguns programas terão problemas para trabalhar com correntes de proxy. Lembre-se também de que, no Firefox, é necessário alterar itens adicionais em about: config para forçá-lo a fazer pesquisas de DNS por meio do proxy, em vez de ignorá-lo.
Como uma observação adicional, nos navegadores da web. Se eles suportam proxies de meias, você não precisa fazer nada adicional para fazê-los usar o túnel ssh mencionado acima, basta digitar 127.0.0.1 para o servidor proxy SOCKS e <porta local> para a porta proxy.
EDIT 29/29/16
Como este post ainda está vendo alguns votos positivos, 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, recomendo atualizar para um fork ainda mantido: proxychains-ng: https://github.com/rofl0r/proxychains-ng
Além de trabalhar no Linux e no OSX, é fácil de compilar e também oferece suporte muito melhor ao encapsulamento de DNS.
Devo também mencionar outra opção, que é redsocks. Funciona de maneira semelhante às proxychains (-ng) e também é provável no seu repo dist: https://github.com/darkk/redsocks