Seleção de roteamento: especificidade versus métrica
17
Entendo que o Linux escolhe a rota mais específica para o destino quando faz a seleção de roteamento . Mas e a métrica de uma rota? Tem uma prioridade mais alta que a especificidade da rota?
Uma referência aos detalhes do algoritmo de seleção de roteamento usado pelo Linux também seria apreciada.
A métrica de rotas é definir a preferência entre rotas com a mesma especificidade. Isso vale para o roteamento em geral (por exemplo, Cisco, Windows, etc). Portanto, o modelo funciona como:
Encontre a rota mais específica (também conhecida como a correspondência de prefixo mais longa * )
Se houver várias rotas com a mesma especificidade, escolha aquela com a menor distância administrativa (isso distingue coisas como rotas diretamente conectadas, rotas estáticas e vários protocolos de roteamento).
Dentro desse protocolo de roteamento e rota específica (se a especificidade da rota e a distância administrativa forem iguais), escolha a rota com a métrica mais baixa
Observe que há outras coisas que poderiam estar em um roteamento baseado em políticas que permitem fazer coisas como rotear com base no endereço IP de origem. Mas especificidade de rota, distância administrativa e métrica são o que eu consideraria as três principais coisas.
* É chamado de correspondência de prefixo mais longa porque se parece com uma sub-rede em binário (/ 24 por exemplo) 11111111.11111111.11111111.00000000. Portanto, um roteador pode apenas verificar o prefixo 1s binário e parar quando atingir o zero e, em seguida, corresponder ao prefixo.
Isso não é verdade no Linux, onde não há distinção entre distância métrica e distância administrativa.
JCH
11
@jch Faz quagga e co. imitar o AD definindo a métrica de acordo? (Não que o seu objetivo não é vital, apenas curioso)
Kyle Brandt
11
Não, o Quagga implementa o AD internamente no zebradaemon e envia apenas as rotas selecionadas para o kernel - para que o kernel nunca precise lidar com o AD. Eu precisaria verificar, mas acho que o Quagga define a métrica do kernel como um valor constante.
JCH
Só quero mencionar que isso não se aplica às pontes ethernet, por exemplo, duas rotas idênticas através de dispositivos diferentes com a mesma métrica ainda resultaram no desvio do tráfego no link mais longo e incorreto.
Areeb Soo Yasir
9
O Linux fornece várias ferramentas para seleção de roteamento flexível.
Tabela de roteamento único
No caso mais simples, existe apenas uma tabela de roteamento do kernel e nenhuma rota com o atributo SRC. Esta tabela contém várias rotas, que foram colocadas lá manualmente ( ip route add), pelo daemon DHCP ou pelos daemons de roteamento. Nesse caso, o kernel escolhe:
a rota mais específica;
se houver várias rotas igualmente específicas, aquela com a menor métrica do kernel.
Observe que a métrica do kernel (exibida por ip route show) é escolhida pelo daemon de roteamento e não está necessariamente relacionada à métrica de nenhum protocolo de roteamento específico. Por exemplo, o Quagga usa a mesma métrica para todas as rotas instaladas no kernel, independentemente da métrica do protocolo.
Rotas específicas da fonte
O Linux também suporta rotas com um atributo SRC, que apenas correspondem aos pacotes com um determinado endereço de origem. O SRC funciona apenas para IPv6 e estava com bugs até muito recentemente (3.11, se a memória servir); Eu não recomendo usá-lo, a menos que você saiba o que está fazendo.
Várias tabelas de roteamento
Se você precisar de mais flexibilidade do que o descrito acima, precisará jogar com várias tabelas de roteamento e escrever regras para escolher uma tabela de roteamento específica para cada pacote. Uma técnica comum é despachar no endereço de origem para simular rotas específicas da fonte. Outra técnica é executar cada daemon de roteamento em sua própria tabela de roteamento e simular a "distância administrativa" da Cisco. Tudo isso é descrito em detalhes no capítulo 4 do LARTC .
Não é isso que o srcatributo faz. Você deseja ler man ip-routeou outros documentos. E funciona com IPv4. Eu o uso para obter todo o tráfego, incluindo o tráfego do roteador, através de um único túnel IPSec de rede a rede.
Zan Lynx 22/09
11
O RTA_SRCatributo faz exatamente o que eu disse; pode ser acessado com a fromopção do ipcomando A opção ipdo comando srcdefine o RTA_PREFSRCatributo, que é o que você descreve.
zebra
daemon e envia apenas as rotas selecionadas para o kernel - para que o kernel nunca precise lidar com o AD. Eu precisaria verificar, mas acho que o Quagga define a métrica do kernel como um valor constante.O Linux fornece várias ferramentas para seleção de roteamento flexível.
Tabela de roteamento único
No caso mais simples, existe apenas uma tabela de roteamento do kernel e nenhuma rota com o atributo SRC. Esta tabela contém várias rotas, que foram colocadas lá manualmente (
ip route add
), pelo daemon DHCP ou pelos daemons de roteamento. Nesse caso, o kernel escolhe:Observe que a métrica do kernel (exibida por
ip route show
) é escolhida pelo daemon de roteamento e não está necessariamente relacionada à métrica de nenhum protocolo de roteamento específico. Por exemplo, o Quagga usa a mesma métrica para todas as rotas instaladas no kernel, independentemente da métrica do protocolo.Rotas específicas da fonte
O Linux também suporta rotas com um atributo SRC, que apenas correspondem aos pacotes com um determinado endereço de origem. O SRC funciona apenas para IPv6 e estava com bugs até muito recentemente (3.11, se a memória servir); Eu não recomendo usá-lo, a menos que você saiba o que está fazendo.
Várias tabelas de roteamento
Se você precisar de mais flexibilidade do que o descrito acima, precisará jogar com várias tabelas de roteamento e escrever regras para escolher uma tabela de roteamento específica para cada pacote. Uma técnica comum é despachar no endereço de origem para simular rotas específicas da fonte. Outra técnica é executar cada daemon de roteamento em sua própria tabela de roteamento e simular a "distância administrativa" da Cisco. Tudo isso é descrito em detalhes no capítulo 4 do LARTC .
fonte
src
atributo faz. Você deseja lerman ip-route
ou outros documentos. E funciona com IPv4. Eu o uso para obter todo o tráfego, incluindo o tráfego do roteador, através de um único túnel IPSec de rede a rede.RTA_SRC
atributo faz exatamente o que eu disse; pode ser acessado com afrom
opção doip
comando A opçãoip
do comandosrc
define oRTA_PREFSRC
atributo, que é o que você descreve.