Não existe uma maneira geral de encapsular todo tráfego da Internet através de um SOCKS-proxy. No entanto, existem maneiras específicas para alguns protocolos - mas não todos. O SOCKS5 suporta tráfego TCP e UDP, mas não o ICMP, tanto quanto eu sei. Portanto, você não pode usar o tradicional ping
por meio de um proxy, por exemplo.
Aqui está uma lista de clientes de proxy (a maioria deles suporta SOCKS5): Link
Eu pessoalmente tentei a parte cliente de Dante e proxychains (o original, não o sucessor -ng) no Linux, e ambos funcionaram para mim (proxychains provou ser um pouco mais estável). Ambos funcionam redirecionando as solicitações de API de soquete do aplicativo (para que eles tenham que configurar a variável de ambiente LD_PRELOAD para o aplicativo) em sua própria biblioteca. Isso pode representar um problema quando o aplicativo usa um binário setuid como LD_PRELOAD e o recurso setuid é incompatível com segurança. Além disso, nem todas as funções da API relacionadas à rede são redirecionadas, portanto, alguns aplicativos estranhos podem enfrentar problemas (por exemplo: quando o aplicativo deseja obter uma lista de interfaces de rede e endereços IP).
Esses clientes proxy do tipo LD_PRELOAD geralmente não são projetados para funcionar em um nível de sistema, você deve alterar a maneira de ativar o aplicativo (prefixando o aplicativo com o cliente proxy). Teoricamente, você poderia configurar a variável ambiental LD_PRELOAD para todo o seu sistema ou sessão de login, e pode até funcionar em alguns casos, no entanto, você poderia ter problemas sutis. Além disso, não é possível ligar ou desligar o redirecionamento sem reiniciar os aplicativos.