El envío UDP falla cuando se utilizan tablas de enrutamiento específicas

El envío UDP falla cuando se utilizan tablas de enrutamiento específicas

Tengo un sistema con múltiples interfaces. He aislado todas esas interfaces entre sí usando algunas sysctlopciones y tablas y reglas de enrutamiento.

Cada interfaz tiene su propia tabla de enrutamiento que define una ruta predeterminada.

Cada tabla de enrutamiento tiene un conjunto de 4 reglas que definen qué paquetes deben ir a qué tabla.

Para simplificar, digamos que tengo eth0 (192.168.1.1)y eth1 (192.168.1.2).

de 192.168.1.1la mesaeth0

a 192.168.1.1la mesaeth0

si eth0table eth0

si eth0table eth0

Porque eth2es lo mismo.

Las sysctlopciones son:

net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1

Esto funciona de manera excelente para el 99% de los casos de uso previstos, pero uno falla. Si se genera un paquete desde un socket que no está vinculado, como responder a un cliente UDP usando "sendto", la llamada falla con "Network Unreachable". Si se vincula una dirección IP específica antes de llamar a sendto, la llamada se realiza correctamente como se esperaba.

Aparte de configurar una ruta predeterminada general para situaciones como estas, ¿hay algo que se pueda hacer utilizando el enrutamiento de políticas (por ejemplo, iptables, ip rule) para resolver este problema?

Gracias

información relacionada