A rota do Linux não corresponde corretamente - rede inacessível

1

Se eu tiver duas rotas com o mesmo destino, o sistema não deve escolher a rota que corresponde ao seu endereço de origem? Estou tentando usar a palavra-chave from para adicionar rotas restritas de endereço de origem à tabela de roteamento.

Por exemplo, tenho um host com um endereço de 2001:db9:1::2 na interface e1 . Se eu adicionar uma rota normal a 2001:db9:1::3 como abaixo, ping6 funciona bem:

root@pc:/# ip -6 route add 2001:db9:1::3 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 dev e1  metric 1024

Em seguida, adiciono uma rota restrita de origem com a palavra-chave from , usando algum endereço de origem não atribuído a nenhuma das minhas interfaces:

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:a::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

Se eu tentar fazer ping agora, recebo uma mensagem de rede inacessível. Quando o sistema vê que a primeira entrada restrita de origem não funciona, não deve tentar a segunda entrada e ter sucesso?

Curiosamente, se eu adicionar uma rota com um especificador from , mas com o endereço de origem correto, a rota correta será selecionada e o ping será bem-sucedido.

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:1::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:1::2 dev e1  metric 1024
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

(Eu também tentei usar 2001:db9:1::1 como fonte, e o resultado ainda é bem sucedido, então a ordem lexicográfica não importa). Portanto, parece que as rotas restritas que não são de origem são ignoradas se existir uma rota restrita de origem para um destino.

Já verifiquei a configuração do kernel (versão 4.9.13) e IPV6_SUBTREES estão ativados. Alguma idéia?

    
por devil0150 05.03.2017 / 13:24

1 resposta

0

Parece que a mistura de rotas normais e específicas de origem na mesma tabela de roteamento leva a um comportamento não intencional. Isto é mencionado em net / ipv6 / Kconfig na fonte do kernel do Linux:

config IPV6_SUBTREES
    bool "IPv6: source address based routing"
    depends on IPV6_MULTIPLE_TABLES
    ---help---
      Enable routing by source address or prefix.

      The destination address is still the primary routing key, so mixing
      normal and source prefix specific routes in the same routing table
      may sometimes lead to unintended routing behavior.  This can be
      avoided by defining different routing tables for the normal and
      source prefix specific routes.

      If unsure, say N.

Colocar rotas restritas de origem em uma tabela de roteamento separada fornece o comportamento correto.

    
por 06.03.2017 / 11:29