Seleção de regra de roteamento

2

Eu sou novo no Linux e, enquanto aprendo o processo de seleção de rota do Linux, tenho uma pergunta para mim. Caso tenhamos duas regras de roteamento semelhantes com IPs de origem diferentes e ambos os IPs atribuídos ao host com essas regras, como a regra adequada é selecionada? E para excluir o caso quando o aplicativo definir o IP de origem, digamos que eu queira usar o utilitário ping - como a regra será escolhida nesse caso?

    
por ko4evneg 09.07.2017 / 20:20

2 respostas

0

ip rule tem uma opção priority . A opção de prioridade é a primeira maneira pela qual a tabela de roteamento é escolhida. Uma regra com um valor priority mais baixo será usada antes de uma mais alta. Chamando ip rule show você verá as regras impressas com prioridade no lado esquerdo.

[priority]:    [rule]

Por questões de integridade, uma citação de man ip-rule :

priority PREFERENCE

the priority of this rule. PREFERENCE is an unsigned integer value, higher number means lower priority, and rules get processed in order of increasing number. Each rule should have an explicitly set unique priority value. The options preference and order are synonyms with priority.

Ênfase minha.

Então, antes de mais nada, é melhor usar uma prioridade única para cada regra, então não pode haver ambiguidade. No caso de regras com a mesma prioridade, elas serão avaliadas na ordem em que foram adicionadas. Se as regras forem mutuamente exclusivas, isso não é um grande risco (como duas regras que correspondem a diferentes IPs de origem de outros hosts). Se suas regras forem adicionadas automaticamente, isso provavelmente significa que o arquivo de regras que está em ordem alfabética primeiro será usado, o que não é uma ótima maneira de determinar o roteamento.

Como cheguei à conclusão de que as primeiras regras adicionadas são usadas:

  1. VM criada (vm1) com duas interfaces na mesma rede (192.168.0.1/24 e 192.168.0.2/24).
  2. Criada outra VM (vm2) na rede (192.168.0.3/24)
  3. Criadas duas tabelas de roteamento, table1 e table2 na vm1

ip route add default dev eth0 table table1

ip route add default dev eth1 table table2

  1. Criado duas regras com prioridades diferentes

ip rule add to 192.168.0.3 table table1 priority 10

ip rule add to 192.168.0.3 table table2 priority 11

  1. ping vm2 da vm1
  2. tcpdump -i eth0 host 192.168.0.3 mostra o ping
  3. tcpdump -i eth1 host 192.168.0.3 não

Este é o comportamento esperado de priority

  1. Adicione novamente a regra table2 com prioridade 10, o ping ainda aparece apenas em eth0 . ip rule show listas table1 regra antes de table2 regra.
  2. Excluir a regra table1, o ping aparece na eth1.
  3. Adicionar novamente a regra table1, pingar ainda em eth1. ip rule show listas table2 regra antes de table1 .
por 12.07.2017 / 16:31
2

O ip de origem não está envolvido na seleção da rota. A rota é selecionada percorrendo a tabela de roteamento: para cada entrada na tabela, compare o prefixo de destino da rede (isto é, o destino da rede E a máscara de rede) com o endereço IP de destino E a máscara de rede. Se eles são iguais, temos uma partida. Depois de tentar cada entrada na tabela de roteamento, se houver várias correspondências, escolha a entrada com o prefixo mais longo. Se não houver correspondência, não há rota para o destino. Uma rota padrão sempre corresponde, porque o tamanho do prefixo é zero.

Se o destino não for link-local, a entrada correspondente nos informará um endereço de gateway e o processo será repetido para o endereço do gateway. Finalmente, o pacote é enviado com os endereços de origem e destino preenchidos. O endereço de destino original é usado e o endereço de origem é obtido da regra de rota de correspondência final (o campo src na saída de ip route ). p>     

por 09.07.2017 / 21:13