Existem dois modelos de design possíveis para uma pilha de rede TCP / IP: um modelo de host strong e um modelo de host fraco. Você está esperando um comportamento que corresponda ao modelo de host strong. O Linux foi projetado para usar o modelo host fraco. Em geral, o modelo de host fraco é mais comum, pois reduz a complexidade do código de roteamento e, portanto, pode oferecer melhor desempenho. Caso contrário, os dois modelos de host são apenas princípios de design diferentes: nenhum é inerentemente melhor que o outro.
Basicamente, o modelo de host fraco significa que o tráfego de saída será enviado pela primeira interface listada na tabela de roteamento que corresponda ao endereço IP do destino (ou gateway selecionado, se o destino não puder ser acessado diretamente) sem levar em conta o endereço IP de origem .
É basicamente por isso que é geralmente desaconselhável usar duas interfaces físicas separadas se você precisar de dois endereços IP no mesmo segmento de rede. Em vez disso, atribua dois endereços IP para uma interface (aliases de IP: por exemplo, eth1 = 192.168.8.142 e eth1: 0 = 192.168.8.140). Se você precisar de mais largura de banda do que uma única interface pode fornecer, vincular (ou equipe, se aplicável) duas ou mais interfaces juntas e, em seguida, executar os dois IPs no vínculo / equipe.
Ajustando várias configurações de sysctl e usando a funcionalidade de "roteamento avançado" para configurar tabelas de roteamento independentes para cada NIC, é possível fazer o Linux se comportar como um sistema de modelo de host strong. Mas essa é uma configuração muito especial, e eu recomendaria pensar duas vezes antes de implementá-la.
Veja as respostas em Roteamento de origem do Linux , Strong End System Model / modelo host strong? se você realmente precisar dele.