Já vi isso ser usado em muitos projetos baseados em Android, como "ProxyDroid" e "SSHTunnel"
Onde você estabelece uma conexão com um proxy ou túnel ssh, usando iptables, ele redirecionará todas as solicitações tcp através do túnel que você criou.
Deveria ser algo como "-I OUTPUT -p tcp --destination-not xxx.xxx.xx.xx --redirect-to xx.xxx.xx.xx:port" mas não consegui encontrar nenhum exemplo sobre isso e Não sei se deve ser inserido no nat ou em outra coisa + não tenho ideia se devo ter mais de 1 regra por exemplo: mais uma para conexões de entrada.
EDITAR:
Parece que não é possível usar o túnel diretamente. Ou não descobri como fazer isso sem usar um agente, tive que instalar um programa chamado redsocks para atuar como um servidor local para fazer isso funcionar.
Quanto aos comandos iptables usados aqui são:
# do not redirect connection sent to localhost so redirected connections can reach
# its destination, otherwise we'll stuck in a loop.
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
# Redirect all tcp connections except ones that are going to my tunnel server
# to the local redsocks port
iptables -t nat -A OUTPUT -p tcp ! -d tunnel.ip.goes.here -j REDIRECT --to-ports 31338
Repositório RedSocks:https://github.com/darkk/redsocks
Agora tudo funciona muito bem, mas ainda preciso saber se isso pode ser feito sem as redsocks (conectando-se diretamente ao túnel).
Responder1
Você pretende configurar uma VPN de pobre sobre SSH? Nesse caso, há alguma documentação do Ubuntu para isso:
https://help.ubuntu.com/community/SSH_VPN
Basicamente, você usaria a opção "-w" para configurar uma nova interface tun0 e iniciar o roteamento por meio dela. iptables
não está envolvido, embora você precise configurar rotas.
Observe que fazer TCP sobre TCP pode ser uma tarefapéssima ideia. Uma opção melhor pode ser uma VPN simples, como o OpenVPN, mas será mais complicada do que um túnel ssh rápido e sujo.