Enrutar solo el tráfico saliente TCP a través de una interfaz tun0

Enrutar solo el tráfico saliente TCP a través de una interfaz tun0

Tengo un sistema Ubuntu 20 y estoy intentando crear un túnel entre mi sistema y un servidor remoto ya que mi sistema cliente no puede tener tráfico TCP entrante/saliente.

Creé una interfaz virtual tun0 y solo quiero que los paquetes TCP se enruten a esa interfaz, para que mi programa pueda leerlos, envolver el paquete en un protocolo diferente (es decir, DNS) y enviarlo al punto final de mi túnel.

Ya logré enrutar todo el tráfico desde mi computadora a la interfaz, pero esto impedirá que mi sistema realice otro tráfico no relacionado con TCP (como hacer ping a mi enrutador o a google.com, por ejemplo).

Las reglas que utilicé:

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

Donde 192.168.1.1 es mi ip predeterminada gw 10.1.0.1 es mi ip tun0 192.168.1.127 es la ip de mi servidor

¿Cómo puedo enrutar sólo el tráfico TCP?

Respuesta1

Logré lograrlo usando una tabla de enrutamiento diferente y marcando paquetes específicos para enrutar usando esa tabla.

Para crear una ruta predeterminada a la ip de mi interfaz tun:

 ip route add default via 10.0.0.1 table 3

Para marcar paquetes TCP salientes:

 iptables -t mangle -A OUTPUT -p tcp -j MARK --set-mark 2

Y finalmente, para asegurarse de que estos paquetes se enruten con la tabla 3, una regla de IP para reenviar paquetes marcados:

ip rule add fwmark 2 table 3

información relacionada