¿Cómo evitar que los paquetes de salida dañados utilicen la ruta predeterminada?

¿Cómo evitar que los paquetes de salida dañados utilicen la ruta predeterminada?

Tengo un enrutador. Tiene algunas interfaces. Una de ellas es la VPN llamada vpn0, otra es la ruta predeterminada a la interfaz física, llamada out0 y una interfaz de entrada in0.

Los paquetes de in0 con el puerto de destino 993 nunca deben colocarse en out0. Hago esto marcando los paquetes así:

iptables -t mangle -A PREROUTING -i in0 -p tcp --dport 993 -j MASK --set-mark 100
iptables -t mangle -A PREROUTING -i in0 -p tcp --dport 993 -j CONNMARK --save-mark

y para desactivar el reenvío en out0 hago lo siguiente:

iptables -A FORWARD -i in0 ! -o vpn0 --match-mark 100 -j DROP -m conntrack --ctstate NEW

El problema que tengo es con los paquetes de salida que provienen del host. Para destrozar paquetes vpn0 tengo estas reglas:

iptables -t mangle  -A OUTPUT --protocol tcp --dport 993 --jump MARK --set-mark 100
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump CONNMARK --save-mark
iptables -t mangle -A OUTPUT --protocol tcp --dport 993 --jump RETURN    

Lo cual funciona bastante bien. Lo único ocurre cuando vpn0 no funciona. Intenté agregar la regla:

iptables -A OUTPUT --protocol tcp --dport 993 -o out0 --match mark  --mark 100  --jump DROP -m conntrack --ctstate NEW

Pero esto arroja paquetes que saldrían de la VPN. Verifiqué esto cambiando DROP a LOG y la interfaz de salida es out0, no vpn0.

¿Lo que da?

información relacionada