Você precisa de um modelo de sistema strong . O Linux é fundamentalmente construído em torno de um modelo de sistema de envio fraco, por isso não é uma boa opção de SO para esta aplicação.
Você terá que fingir cada parte do comportamento de que precisa, do ARP ao roteamento de políticas para a seleção de endereços de origem. Você também precisará de filtros para evitar que os pacotes sejam aceitos se eles chegarem na interface errada.
Os passos necessários são:
-
Configure arp_filter = 1 e arp_ignore = 2 em todas as interfaces.
-
Adicione roteamento baseado em origem e por interface para o tráfego de saída. (A interface de destino deve ser escolhida com base no endereço de origem).
-
Adicione a filtragem de ingresso por interface para descartar silenciosamente os pacotes recebidos na interface errada. (Pacotes com um endereço de destino atribuído a outra interface.)
Infelizmente, não há consenso sobre se essas três etapas são necessárias. O modelo de sistema de extremidade fraca está embutido em toda a pilha TCP / IP do Linux, e não está claro o que pode dar errado com problemas sutis como multicast.
Não está claro como você escolheria a interface de saída para transmissões, por exemplo. Deveria sair todos eles? Talvez. Qual é o comportamento correto se a pilha receber uma transmissão de saída com um endereço de origem não atribuído a uma das interfaces?
Novamente, você escolheu a ferramenta errada para o trabalho.