Roteando apenas o tráfego de saída TCP através de uma interface tun0

Roteando apenas o tráfego de saída TCP através de uma interface tun0

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

informação relacionada