Por que esse roteador falha ao usar várias rotas de custo igual do OSPF?


16

Um roteador Brocade executando o NetIron 5.2 e uma emulação Dynamips executando o IOS 12.4 falham ao usar de maneira confiável caminhos de custo iguais no que parece ser uma configuração muito simples. Digo "de forma confiável" porque observei muito brevemente o comportamento esperado do Brocade, mas foi após um longo período de inatividade e desapareceu assim que perturbei o sistema.

Caso seja relevante, estou configurando um destino anycast para um serviço de rede sem estado. Essa será uma configuração específica do site, com pouca ou nenhuma diversidade de tamanho de caminho de rede; portanto, o objetivo do recurso anycast é principalmente para redundância de failover e parcialmente para compartilhamento de carga. Minha pergunta diz respeito à função de compartilhamento de carga.

Minha rede de protótipos se parece com isso.

R1 <--N1--> Rcore <--N2--> R2

R1e R2anuncie o destino anycast via OSPF. Se Rcoretiver um custo idêntico nas interfaces N1e N2, e o destino anycast tiver um custo idêntico em cada um dos outros roteadores, eu esperaria encontrar dois caminhos de custo iguais na Rcoretabela de roteamento. Eu não, pelo menos nem sempre, e nem mesmo previsivelmente. Por que não?

Entre outros, detalhes potencialmente relevantes são os seguintes.

  • Rcoreé um ABR conectando N1e N2, que estão em áreas NSSA separadas, ao backbone (não mostrado).
  • A inspeção do RcoreLSDB confirma que os LSAs esperados R1e R2estão corretamente instalados e contêm o destino anycast com a métrica correta.

Eu considerei três explicações possíveis.

  1. Não entendo como configurar e operar o ECMP nessas plataformas. Provavelmente, e espero encontrar aqui uma iluminação que não consegui encontrar nos documentos do fornecedor.
  2. Não entendo a interação entre as áreas OSPF, ECMP, anycast etc. Não acho muito provável, mas estou preparado para aprender alguma coisa.
  3. Essas implementações de dois fornecedores sofrem do mesmo bug, recurso incorreto ou algo assim. Suponho que isso poderia acontecer.

Editar Exemplo de configuração e saída adicionados para implementação do Dynamips / Dynagen.

Configs

Roteador R1

!
version 12.4
!
hostname R1
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
 ip ospf cost 1
!
interface FastEthernet0/0
 ip address 10.1.0.2 255.255.255.252
 ip ospf cost 2
!
router ospf 1
 router-id 10.1.0.2
 log-adjacency-changes
 area 0.0.0.1 nssa no-summary
 passive-interface Loopback0
 network 1.1.1.1 0.0.0.0 area 0.0.0.1
 network 10.1.0.0 0.0.0.3 area 0.0.0.1
!
line console 0
 exec-timeout 0 0
!
end

Roteador R2

!
version 12.4
!
hostname R2
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
 ip ospf cost 1
!
interface FastEthernet0/0
 ip address 10.2.0.2 255.255.255.252
 ip ospf cost 2
!
router ospf 1
 router-id 10.2.0.2
 log-adjacency-changes
 area 0.0.0.2 nssa no-summary
 passive-interface Loopback0
 network 1.1.1.1 0.0.0.0 area 0.0.0.2
 network 10.2.0.0 0.0.0.3 area 0.0.0.2
!
line console 0
 exec-timeout 0 0
!
end

Roteador Rcore

!
version 12.4
!
hostname Rcore
!
interface Loopback0
 ip address 10.0.0.1 255.255.255.255
 ip ospf cost 4
!
interface FastEthernet0/0
 ip address 10.1.0.1 255.255.255.252
 ip ospf cost 2
!
interface FastEthernet0/1
 ip address 10.2.0.1 255.255.255.252
 ip ospf cost 2
!
router ospf 1
 log-adjacency-changes
 area 0.0.0.1 nssa no-summary
 area 0.0.0.2 nssa no-summary
 passive-interface Loopback0
 network 10.0.0.1 0.0.0.0 area 0.0.0.0
 network 10.1.0.0 0.0.0.3 area 0.0.0.1
 network 10.2.0.0 0.0.0.3 area 0.0.0.2
!
line console 0
 exec-timeout 0 0
!
end

Resultado

Roteador Rcore

Roteador LSA da R1

Rcore#sh ip ospf database router 10.1.0.2

            OSPF Router with ID (10.0.0.1) (Process ID 1)

        Router Link States (Area 0.0.0.1)

  LS age: 1618
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 10.1.0.2
  Advertising Router: 10.1.0.2
  LS Seq Number: 80000002
  Checksum: 0x726F
  Length: 48
  Number of Links: 2

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 10.1.0.2
     (Link Data) Router Interface address: 10.1.0.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 2

Roteador LSA da R2

Rcore#sh ip ospf database router 10.2.0.2

            OSPF Router with ID (10.0.0.1) (Process ID 1)

        Router Link States (Area 0.0.0.2)

  LS age: 1766
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 10.2.0.2
  Advertising Router: 10.2.0.2
  LS Seq Number: 80000002
  Checksum: 0x8A53
  Length: 48
  Number of Links: 2

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Transit Network
     (Link ID) Designated Router address: 10.2.0.2
     (Link Data) Router Interface address: 10.2.0.2
      Number of TOS metrics: 0
       TOS 0 Metrics: 2

Trecho da tabela de roteamento

Rcore#sh ip route 1.1.1.1
Routing entry for 1.1.1.1/32
  Known via "ospf 1", distance 110, metric 3, type intra area
  Last update from 10.1.0.2 on FastEthernet0/0, 00:30:54 ago
  Routing Descriptor Blocks:
  * 10.1.0.2, from 10.1.0.2, 00:30:54 ago, via FastEthernet0/0
      Route metric is 3, traffic share count is 1

Que tipo de rota é o anycast?
Nicotina #

@nicotine: O endereço anycast é um endereço secundário na interface de loopback. Na permutação mais recente dessa configuração, ela termina como uma rede stub em um roteador LSA. Configure snippets e terminais para seguir.
Neirbowj

Tentei reduzir a configuração e a saída o máximo possível, mas não muito. Sugestões para melhorar a densidade de informações são bem-vindas.
Neirbowj

Isso deve funcionar. Você pode postar a saída dos seguintes comandos: show ip protocols show ip ospf rib debug ip routing Tente estes comandos no Rcore. Isso deve nos dar algumas dicas de por que as rotas duplas não estão instaladas. Sua saída do banco de dados OSPF parece bem para mim.
Daniel Dib

Se você rejeitar o link da rota ativa, ele ainda prefere a rota original? Por exemplo: Na saída da sua CLI, mostra a rota ativa apontando para 10.1.0.2. Se você fechar a interface para a 10.1.0.2 por tempo suficiente para que o bairro OSPF seja interrompido, coloque-a novamente on-line. A rota original para a 10.1.0.2 é reinstalada?
Bigmstone # 14/13

Respostas:


7

Meu primeiro pensamento seria que o OSPF está pensando que é o mesmo LSA em vez de simplesmente o mesmo prefixo. Eu não sei muito sobre brocado, mas com as saídas LSA da caixa da Cisco eu provavelmente poderia lhe contar mais.

Em geral, para a Cisco, se as rotas forem iguais no protocolo, ambas serão apresentadas na tabela de roteamento. A tabela de roteamento, por padrão, instalará os dois caminhos e executará o ECMP. Se as métricas ou protocolos diferirem, eles não serão ECMP. Isso também se aplicaria a diferentes LSAs para o mesmo prefixo.


Sim - as entradas do banco de dados devem nos dizer - eles têm o mesmo endereço de encaminhamento e roteador de publicidade?
Nicotina #

Vou trabalhar para obter amostras de amostra esta tarde.
Neirbowj

6

Estou pensando se o ECMP faz sentido para anycast. O roteamento deve direcionar anycast para o destino logicamente mais próximo no qual um host seja favorecido em relação ao outro. Mesmo no caso em que os hosts anycast são equidistantes, eu ainda esperaria que isso permanecesse verdadeiro. Quanto ao compartilhamento de carga do ECMP, acho que o destino é impossível com um / 32. Talvez haja algoritmos de compartilhamento de carga que considerem a fonte. Por pacote parece arriscado, mesmo para DNS. Acredito que a maioria das soluções anycast prontas para uso executa o ospf no host.

Foi preciso pesquisar um pouco, mas o trecho a seguir de rfc2178 confirma a causa.

16,8. Caminho múltiplo de custo igual

O protocolo OSPF mantém várias rotas de custo igual para todos os destinos. Isso pode ser visto nas etapas usadas acima para calcular a tabela de roteamento e na definição da estrutura da tabela de roteamento.

Cada uma das várias rotas será do mesmo tipo (intra-área, inter-área, tipo 1 externo ou tipo 2 externo), custo e terá a mesma área associada . No entanto, cada rota especifica um próximo salto e roteador de publicidade separados.


1
Hmm, trabalhei em uma única área e o ECMP está presente no núcleo. Embora eu ainda afirme que é inútil com um / 32. Talvez o seguinte é relevante: morse.colorado.edu/~tlen5710/12s/OSPF.pdf
Dennis Olvany

Isso indica que a área é um dos critérios para o ECMP. Parece que áreas diferentes podem ser o causador do problema.
Dennis Olvany

OSPF no host - sim, esse é o objetivo. / 32 atribuído como um endereço secundário no loopback. Também estou analisando a configuração de compartilhamento de carga, mas isso depende do ECMP em primeiro lugar.
Neirbowj

5

Não consigo reproduzir isso em meu laboratório usando 12.4 (24). Mesma topologia, RCore área 0 loopback, R1 com lo0 e interface na área 1, R2 com lo0 e interface na área 2 (ambos NSSA), a rota redistribuída é selecionada para o ECMP no Rcore:

Routing entry for 10.20.0.0/16
  Known via "ospf 1", distance 110, metric 20, type NSSA extern 2, forward metric 6477
  Last update from 2.2.2.6 on Serial1/1, 00:02:23 ago
  Routing Descriptor Blocks:
    2.2.2.6, from 2.2.2.21, 00:02:23 ago, via Serial1/1
      Route metric is 20, traffic share count is 1
  * 1.1.2.1, from 1.1.1.1, 00:06:31 ago, via Serial1/0
      Route metric is 20, traffic share count is 1

Possibilidades em que posso pensar: Dependendo de como a rota está entrando no OSPF e que tipo de rota OSPF é usado, o custo para o roteador ASBR pode / não ser levado em consideração no processo de seleção de rota (para que o ECMP funcione, ambos os custos de rota , e o custo para o ASBR deve corresponder). Ver a métrica no LSA real para ambos pode ajudar.

Consegui reproduzir isso no IOS imitando sua configuração - colocando o anycast em uma interface e colocando a interface em uma área. Se você precisar de ECMP, considere redistribuir a rota no OSPF, pois isso parece funcionar.


FWIW, a imagem na minha instância do Dynamips é 12.4 (25d) em um 7200. Seus resultados mostram "Conhecido por ... NSSA extern 2", mas os meus mostram "intra area". Essa é uma boa pista.
Neirbowj

A redistribuição conectada produziria isso em vez de usar o comando network ou ip ospf na interface.
Daniel Dib

@DanielDib Estou no processo de exaustivas permutações de normal / stub / nssa, intra-área / externa e, pelo menos, Cisco + Dynamips / Brocade. Vou tentar o Juniper também, se tiver tempo.
Neirbowj

3

Dependendo do hardware do Brocade que você estiver usando (MLX? CER? XMR?), Convém atualizar o software. Foram corrigidos vários bugs nas árvores de software 5.3 (e 5.4, dependendo do seu hardware), cujos sintomas estavam relacionados aos custos de rota do OSPF que não estavam sendo atualizados corretamente. Não conheço todos os critérios para ver os bugs, mas alguns deles foram: Se o custo foi alterado em uma porta 1gig ou em uma interface de loopback em um roteador executando o OSPF, a alteração não foi processada e o custo não foi atualizado .

Sei que você está vendo isso nas plataformas de dois fabricantes, por isso é mais provável que seja um problema de configuração. Percebo também que o velho "suporte técnico" atualiza seu software muitas vezes pode valer nada além de um rolo de olho. Dito isto, pode ser algo para se ter em mente.


Manterei isso em mente. No entanto, o R1 / R2 define o custo, o Rcore vê o custo e o Rcore exibe os sintomas do ECMP.
Neirbowj
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.