Você pode fazer política de roteamento , ou seja, ter várias tabelas de roteamento e selecionar a tabela de roteamento para usar com base em seu endereço de origem (em geral, outros campos, mas não relevante aqui). Observe que os números da tabela mostrados abaixo são arbitrariamente escolhidos.
Eu não sei como fazer o roteamento de políticas usando route
do pacote net-tools
. Está demorando muito de qualquer maneira. Use ip
do pacote iproute2
.
Você também precisará ter o roteamento de políticas ativado em seu kernel. As principais distribuições fazem isso por padrão, se não me engano.
Comece de um estado limpo, se apropriado:
# Assumes that previous configuration properly set address and route scopes
ip route flush all proto static scope global
Em seguida, adicione as tabelas para cada interface.
ip route add 10.0.0.3/24 dev eth0 table 5000
ip route add default via 10.0.0.254 dev eth0 table 5000
ip route add 10.0.1.1/24 dev eth1 table 5001
ip route add default via 10.0.1.26 dev eth1 table 5001
Em seguida, define-se regras de encaminhamento :
ip rule add from 10.0.0.3 table 5000
ip rule add from 10.0.1.1 table 5001
O último passo é configurar o gateway padrão para quando você é o iniciador , por assim dizer.
Se você quiser usar somente eth0
como o gateway padrão, faça algo assim:
ip route add default via 10.0.0.254 dev eth0
Note que não existe tabela especificada , por isso, a predefinição é main. Usar eth1
é deixado como um exercício para o leitor.
Se você quiser balancear a carga entre os dois, pode fazer rotas de múltiplos caminhos usando nexthop
.
ip route add default nexthop via 10.0.0.254 dev eth0 weight 1 nexthop via 10.0.1.26 dev eth1 weight 1
Quanto à questão dois, nenhum Linux cria automaticamente uma rota padrão. Se não houver nenhuma rota local para seu tráfego, você receberá um erro EHOSTUNREACH
.
EDITAR: Note que nenhuma das opções acima deve ser tomada para indicar que o IP é stateful, que tem alguma coisa a ver com conexões, ou mesmo uma noção inerente de um fluxo. Significa meramente que assumimos que um fluxo tem sempre os mesmos pontos de extremidade e que ligamos um fluxo ao gateway, dependendo do nosso endereço de origem. Isso é simplesmente necessário porque muitos gateways (especialmente no contexto de ISPs residenciais) fazem a filtragem de caminhos reversos.