Luta contra a engenharia de tráfego de entrada e saída de / para pares iBGP em diferentes POPs

8

Somos um provedor de serviços gerenciados executando uma rede de tamanho pequeno em um único datacenter em Sydney. Recentemente, implantamos um novo estado interestadual POP em Melbourne (ambos na costa leste da Austrália) e, pela primeira vez, estou enfrentando desafios do mundo real em termos de engenharia de tráfego. Minha esperança é que eu possa obter alguma orientação aqui sobre como obter algum nível de controle sobre meus caminhos de iBGP.

Provavelmente postarei algumas perguntas inter-relacionadas, mas, neste caso, estou especificamente preocupado com a engenharia de tráfego interno. Estou surpreendentemente difícil descobrir como fazer com que o iBGP tome as melhores decisões de roteamento.

O principal objetivo para mim é que é preciso encontrar uma maneira de fornecer ao iBGP algum conceito de limite e distância por POP. Então, eu posso distinguir entre um POP que está na mesma cidade, vs um que é interestadual, vs um que é leste versus costa oeste. Otimize o roteamento de entrada / saída com base nisso.

Sei que haverá muitos cenários caso a caso, mas espero poder desenvolver uma estratégia de roteamento iBGP que funcione talvez 80% das vezes, e o resto teria que lidar com casos especiais de borda no config.

Contexto

  • Acabamos de comprar 4x ASR 1001-Xs para atuar como nossos dispositivos de borda em cada POP (2x por POP, mas devido a limitações de hardware de comutação, estou focando apenas na implantação de um dispositivo de borda em Melbourne por enquanto)
  • Também utilizamos o Juniper para trocar de hardware. EX4500 como nossos "comutadores principais" e EX4200s na camada de acesso.
  • Agora temos 2x provedores de transporte público. Interconectamos apenas a cada provedor em um estado cada.
  • O AS 1000 é um agregador e usa o AS 4000 como uma de suas principais fontes ascendentes em Sydney.
  • Isso representa um desafio, já que todos os caminhos recebidos pelo AS 1000 são tipicamente mais longos em 1 do que aqueles que obtemos do AS 4000.
  • Estou usando o Ansible para gerar configurações do IOS usando modelos Jinja2. Portanto, não é um problema gerar muita lógica por mapa de rotas por iBGP para fazer as coisas.

Os meus objetivos

Essencialmente, quero conseguir um roteamento ideal entre POPs à medida que os implementamos. Mas, no momento, não sou capaz de alcançar nenhum nível de controle sobre como o iBGP está escolhendo seus caminhos.

Meu design atual

  • Atualmente, tenho 2x ASR1Ks atuando como roteadores de borda com mesas completas em Sydney e uma em Melbourne.
  • Ambos os POPs usam diferentes provedores de transporte público.
  • Temos um circuito ponto a ponto entre os dois POPs, que é finalizado em ambos os lados pelos dispositivos de borda nas sub-interfaces dot1q.
  • Executamos o OSPF nesse link entre todos os dispositivos de borda, e o custo do link é aumentado, portanto esse é o caminho OSPF de menor preferência.
  • Temos uma única área OSPF 0 em ambos os POPs.
  • Os dispositivos de borda são mais um núcleo / borda convergente - nossos comutadores de núcleo não fazem muito L3, pois não conseguem lidar com uma tabela completa.
  • Em cada POP, os ASR1Ks atuam como refletores de rota para os outros dispositivos BGP desse POP - firewalls, comutadores principais, LNSes e assim por diante.
    • Cada um tem seu próprio ID de cluster - não por POP. Procurando mudar isso para por POP.
  • Cada ASR1K origina uma rota padrão para clientes de refletor de rota sobre BGP.
  • Todos os ASR1Ks estão em uma malha iBGP.
  • Todos os trânsitos têm o mesmo pref local em todos os sites.

Exemplo de roteamento abaixo do ideal

  • Se o meu Melbourne e Sydney transitarem on-line, o roteamento de saída funcionará bem. O tráfego de Sydney sai via Sydney e Melbourne sai via Melbourne.
  • O problema é que, ao desativar o administrador do meu transporte primário em Sydney, meu trânsito em Melbourne agora é automaticamente preferido. Em vez do meu trânsito secundário de Sydney pelo roteador BDR02 em Sydney.
  • Então, acabo com um cenário frequentemente em que o tráfego passa para Melbourne durante nosso retorno, sai em Melbourne e depois volta para Sydney. O caminho que estava ocorrendo <1ms agora é de cerca de 30 ms.
  • Para piorar a situação, nesse cenário em particular, não consigo entender por que Melbourne está sendo preferida.

    • O peso é idêntico
    • Pref local é idêntico
    • AS Path tem o mesmo comprimento
    • Nenhum dos caminhos é auto-originado.
    • Ambos têm IGP como origem.
    • Ambos têm métrica (MED?) De 0.
    • Ambos são caminhos iBGP da perspectiva deste roteador.
    • Métrica IGP Eu pensaria estar correlacionada com o custo do link OSPF, pois estamos usando o OSPF como nosso IGP.
    • Confirmei que a largura de banda de referência 100G está definida em todos os dispositivos OSPF.

EDIT: 30/01: Eu acho que estou errado sobre como o custo do IGP é calculado e talvez eles sejam o mesmo? Todas as minhas rotas OSPF são do tipo E2. Se os custos de IGP forem os mesmos, suponho que faça sentido que a melhor seleção de caminho ocorra com base no RID, que nesse caso o RID do MEL BDR seria menor que o SYD.

Eu configurei o custo do link OSPF entre Sydney para 15.000 muito mais alto que o padrão. Calculei que isso funcione de maneira confiável com nossa largura de banda de referência de 100 Gbps.

Em termos de custos de link OSPF - essas são as preferências de OSPFs de cada salto seguinte das rotas BGP:

bdr-01-syd#sh ip route x.x.201.73 (AS 4000 next hop)
Routing entry for x.x.201.72/30
  Known via "ospf 1", distance 110, metric 20, type extern 2, forward metric 15000
  Last update from x.x.13.51 on Port-channel1.1125, 14:57:17 ago
  Routing Descriptor Blocks:
  * x.x.13.51, from x.x.13.66, 14:57:17 ago, via Port-channel1.1125
      Route metric is 20, traffic share count is 1
bdr-01-syd#

bdr-01-syd#sh ip route x.x.31.5 (AS 1000 next hop)
Routing entry for x.x.31.4/30
  Known via "ospf 1", distance 110, metric 20, type extern 2, forward metric 5
  Last update from x.x.216.67 on Port-channel1.36, 1d00h ago
  Routing Descriptor Blocks:
  * x.x.216.67, from x.x.216.163, 1d12h ago, via Port-channel1.36
      Route metric is 20, traffic share count is 1
bdr-01-syd#


x.x.201.73 is the next hop to 139.130.4.4 via the Melbourne path.

x.x.13.51 is the other end of the inter-state Point to Point. x.x.13.66 is BDR-01-MEL.

x.x.31.5 is the next hop to 139.130.4.4 via the Secondary Sydney transit in the same POP as the primary transit - via BDR-02-SYD.

x.x.216.67 is the local OSPF VLAN for the Sydney POP that both BDR01 and BDR02 are in.

x.x.216.163 is the BDR-02-SYD router.

Em termos dessas opções de OSPF, posso ver que a "métrica de encaminhamento" OSPF mais curta é captada. Eu teria pensado que o BGP deveria escolher o caminho de Sydney com base nisso.

Você pode ver nesse rastreio que pulamos imediatamente para Melbourne via Backhaul porque o primeiro salto é 13ms: (139.130.4.4 é anycasted e possui caminhos nos dois estados).

bdr-01-syd#traceroute 139.130.4.4
Type escape sequence to abort.
Tracing the route to 139.130.4.4
VRF info: (vrf in name/id, vrf out name/id)
  1 x.x.13.51 13 msec 13 msec 13 msec
  2 x.x.201.73 14 msec 14 msec 14 msec
  3 x.x.196.54 [AS 4000] [MPLS: Label 25049 Exp 0] 14 msec 14 msec 14 msec
  4 x.x.196.51 [AS 4000] 14 msec 14 msec 14 msec
  5 139.130.110.29 [AS 1221] 14 msec 15 msec 14 msec
  6 203.50.11.113 [AS 1221] 16 msec 14 msec 16 msec
  7 139.130.4.4 [AS 1221] 13 msec 14 msec 14 msec
bdr-01-syd#

bdr-01-syd#sh ip route 139.130.4.4
Routing entry for 139.130.0.0/16
  Known via "bgp 5000", distance 200, metric 0
  Tag 4000, type internal
  Last update from x.x.201.73 06:06:14 ago
  Routing Descriptor Blocks:
  * x.x.201.73, from x.x.13.66, 06:06:14 ago
      Route metric is 0, traffic share count is 1
      AS Hops 2
      Route tag 4000
      MPLS label: none
bdr-01-syd#

bdr-01-syd#sh ip bgp regexp ^1000 1221$
BGP table version is 11307146, local router ID is x.x.216.161
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
              x best-external, a additional-path, c RIB-compressed,
              t secondary path,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
...
 * i  139.130.0.0      x.x.31.5             0    100      0 1000 1221 i
...

Versus the path via AS 4000:

bdr-01-syd#sh ip bgp regexp ^4000 1221$
 *>i  138.130.0.0      x.x.201.73            0    100      0 4000 1221 i

bdr-01-syd#

Nesta saída, o trânsito secundário de Sydney é um caminho válido, assim como o trânsito de Melbourne. Melbourne é escolhida como a melhor.

bdr-01-syd#sh ip bgp 139.130.4.4
BGP routing table entry for 139.130.0.0/16, version 10794227
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     66
  Refresh Epoch 1
  1000 1221, (received & used)
    x.x.31.5 (metric 20) from x.x.216.163 (x.x.216.163)
      Origin IGP, metric 0, localpref 100, valid, internal
      Community: 1000:65110 5000:1000 5000:1001 5000:1002
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 2
  4000 1221, (received & used)
    x.x.201.73 (metric 20) from x.x.13.66 (x.x.13.66)
      Origin IGP, metric 0, localpref 100, valid, internal, best
      Community: 4000:5307 4000:6100 4000:53073 5000:1000 5000:1030 5000:1031
      rx pathid: 0, tx pathid: 0x0
bdr-01-syd#

O que eu tentei

Tentei adicionar um custo de link OSPF de 15.000, que calculei como uma figura segura, com base na minha largura de banda ref de 100 Gbps, sempre sendo o custo OSPF menos preferido. Eu pensei que isso contaria como "custo IGP" e, no entanto, o BGP ainda está preferindo o caminho de Melbourne por algum motivo.

Depois que isso não pareceu ter nenhum impacto, meu plano principal era usar o AS PATH que precede o iBGP. O plano era que eu tivesse grupos de pares por POP. E, em meus modelos, eu designaria quantos prefixos a serem feitos, com base na distância entre os dois POPs. Eu achava que esse seria um tipo de objetivo bastante comum.

Por exemplo:

  • 0 precede se intra-POP
  • 1 prefixo se POP intraestado
  • 2 precede se POP entre estados
  • 3 precede se POP da costa leste-oeste

Eu pensei que isso funcionaria perfeitamente, seria uma solução bastante elegante e é exatamente o tipo de solução que eu espero encontrar. Eu escrevi as configurações em algumas horas e as implantei. Mas cocei minha cabeça até perceber que o iBGP não suporta o prefixo do caminho AS.

Mesmo se eu conseguir fazer isso funcionar, parece que nunca seria uma solução suportada.

O que eu estou considerando

  • Esse último link @ ipspace.net menciona que você poderia usar o prefixo local, pois ele persiste dentro de um AS. Mas eu já mapeei uma política local-pref para preferir rotas de clientes downstream, IXes, o habitual ... Parece que usar localpref para isso não combinaria bem. E Ivan não sugere!
  • Eu considerei usar as Confederações BGP - mas isso parece muito trabalho extra para nossa pequena rede. E também li que ele não adiciona saltos de caminho AS entre ASes confederados de qualquer maneira. Então eu provavelmente acabaria no mesmo lugar.
  • Eu consideraria usar o MPLS (acho que o MPLS TE?) Mas eu sou muito ecológico no que diz respeito ao MPLS e já tenho muitos desafios pela frente. Por isso, gostaria de evitar a complexidade adicional, a menos que seja uma boa solução para o meu problema.

Vou adicionar mais detalhes amanhã. Por enquanto, aqui está um diagrama que descreve nossa configuração atual.

Diagrama de datacenter interestadual

Geekman
fonte
2
Você está pedindo muito aqui. Falando pessoalmente, resolver esse tipo de problema é o modo como muitos de nós aqui vivemos. É um prazer responder a perguntas específicas para ajudar alguém, mas não acho razoável que você ou sua empresa esperem obter esse nível de engenharia gratuitamente.
Ron Trunk
@ Geekman, faltam alguns itens para avaliar adequadamente o Cisco BGP Best Path Selection, com base nas informações fornecidas, que parecem estranhas sobre como ele ignoraria ou continuaria com outras etapas. A partir da sua saída, a Distância de 200 é iBGP, para que possamos avançar para a etapa 10. Você foi metódico nessa análise? Link para o algoritmo [aqui] [0] [0]: cisco.com/c/en/us/support/docs/ip/border-gateway-protocol-bgp/…
DRP
@ RonTrunk Oi Ron, definitivamente consciente disso, e enviei a pergunta pensando que eu poderia precisar reescrevê-la. Acho que sinto que estou fazendo uma pergunta, que está em negrito. Só sei que muito disso é "depende", então gosto de dar muitos detalhes e contexto sobre quais são meus objetivos gerais para que a solução possa se encaixar. Pretendo adotar uma abordagem geral e ajustar os detalhes para atender às minhas necessidades. Talvez você ainda sinta que isso está pedindo demais?
Geekman
@ RonTrunk Acho que, no final das contas, eu esperava obter algo como geralmente em uma situação como essa, em vez de usar o prefixo AS PATH, você pode usar o método a seguir para impor um limite nas distâncias de iBGP que podem funcionar bem por POP . Talvez algumas pessoas possam falar da experiência de uma maneira que funcione bem? Não tenho certeza se é apenas o nível de detalhe que faz parecer que estou pedindo que todos esses objetivos sejam completamente abordados - o que não sou.
Geekman
2
Esta é de longe a pergunta mais descritiva que já vi no SE! Sem ofensas, mas isso é pedir demais da comunidade SE!
Maverick

Respostas:

6

Ambas as rotas eram do tipo Externo 2, anunciavam a rota como OSPF E1, E1 é sempre preferível a E2 e isso resolveu o problema.

DRP
fonte
@Geekman como a questão é um pouco estendida uma resposta mais curta deve ser muito bem :)
DRP
Sim, obrigado pela sua ajuda! Feliz em aceitar esta resposta. Embora eu também observe que, mudando de E2 para E1, a métrica da rota foi atualizada para 15020 (como eu esperava originalmente) em vez de sempre dizer 20. Portanto, parece que E1 é necessário para que um custo cumulativo seja calculado.
911 Geekman
11
Geekman por definição rotas OSPF E1 incluem a soma das métricas de link para chegar a esse E1 próximo salto
Mike Pennington