UDP sendto falha ao usar tabelas de roteamento específicas

UDP sendto falha ao usar tabelas de roteamento específicas

Eu tenho um sistema com múltiplas interfaces. Isolei todas essas interfaces umas das outras usando algumas sysctlopções e tabelas e regras de roteamento.

Cada interface possui sua própria tabela de roteamento definindo uma rota padrão.

Cada tabela de roteamento possui um conjunto de 4 regras que definem quais pacotes devem ir para qual tabela.

Para simplificar, digamos que eu tenha eth0 (192.168.1.1)e eth1 (192.168.1.2).

da 192.168.1.1mesaeth0

para 192.168.1.1mesaeth0

se eth0table eth0

oif eth0table eth0

Pois eth2é a mesma coisa.

As sysctlopções são:

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

Isso funciona excelentemente para 99% dos casos de uso pretendidos, mas um falha. Se um pacote for gerado a partir de um soquete que não esteja vinculado, como responder a um cliente UDP usando "sendto", a chamada falhará com "Rede Inacessível". Se um endereço IP específico for vinculado antes de chamar sendto, a chamada será bem-sucedida conforme o esperado.

Além de configurar uma rota padrão abrangente para situações como essas, há algo que possa ser feito usando roteamento de política (por exemplo, iptables, regra de ip) para resolver esse problema?

Obrigado

informação relacionada