O roteamento funciona escolhendo o destino mais específico. Isso significa que você precisa
- uma rota para o segmento por trás de cada interface
- uma rota padrão (e não várias)
- uma rota especial para o seu destino A.B.C.D
ssh
.
Assim, a saída de ip route
deve ser semelhante:
default via 10.128.0.1 dev enp0s31f6 proto static metric 100
10.128.0.0/23 dev enp0s31f6 proto kernel scope link src 10.128.1.21 metric 100
192.168.42.0/24 dev enp0s20f0u1 proto kernel scope link src 192.168.42.65 metric 100
A.B.C.D/32 dev enp0s20f0u1 ...
Para adicionar o último, faça
ip route add A.B.C.D/32 dev enp0s20f0u1 via 192.168.42.129
onde 192.168.42.129
é o gateway atual (não precisa ser constante).
Use
ip route del default via 192.168.42.129 dev enp0s20f0u1
para apagar a segunda rota padrão manualmente, se você quiser ter certeza de que nada além de A.B.C.D e link de pacotes locais passe por essa interface. Do jeito que está configurado agora, se a primeira interface ficar inativa por algum motivo, todo o tráfego usará essa interface.
Na sua saída, você tinha um 10.136.80.66
que foi adicionado via DHCP. Não sei por que isso foi adicionado, mas muito provavelmente a infraestrutura precisa disso por algum motivo.
Existem várias maneiras de automatizar essa configuração, que depende de como exatamente o seu sistema está configurado (gerenciador de rede? /etc/network/interfaces
?)
Usar iptables
para marcar pacotes como sugerido no comentário é uma ideia estúpida, o roteamento funciona diretamente sem precisar definir marcas. Isso é o que o roteamento é para.
Usar uma máscara de rede /24
como sugerido em uma resposta em vez de uma máscara de rede /32
para A.B.C.D
encaminhará mais de um endereço de destino (na verdade, 256 deles), portanto, não faça isso.