
Eu tenho um sistema Ubuntu 20 e estou tentando criar um túnel entre meu sistema e um servidor remoto, pois meu sistema cliente não pode ter nenhum tráfego TCP de entrada/saída.
Eu criei uma interface virtual tun0 e só quero que os pacotes TCP sejam roteados para essa interface, para que meu programa possa lê-los, agrupar o pacote em um protocolo diferente (ou seja, DNS) e enviá-lo para o endpoint do meu túnel.
Já consegui rotear todo o tráfego do meu computador para a interface, mas isso impedirá que meu sistema faça outro tráfego não relacionado ao TCP (como executar ping em meu roteador ou google.com, por exemplo).
As regras que usei:
sudo ip route del default
sudo ip route add default via 10.1.0.1 dev tun0
sudo ip route add 192.168.1.127 via 192.168.1.1 dev ens33
Onde 192.168.1.1 é meu gw padrão 10.1.0.1 é meu ip tun0 192.168.1.127 é o ip do meu servidor
Como posso rotear apenas o tráfego TCP?
Responder1
Consegui isso usando uma tabela de roteamento diferente e marcando pacotes específicos para serem roteados usando essa tabela.
Para criar uma rota padrão para o ip da minha interface tun:
ip route add default via 10.0.0.1 table 3
Para marcar pacotes TCP de saída:
iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 2
E finalmente para garantir que esses pacotes sejam roteados com a tabela 3, uma regra de IP para encaminhar pacotes marcados:
ip rule add fwmark 2 table 3