cancelar
Mostrar resultados para 
Pesquisar em vez de 
Queria dizer: 
cancel
1618
Apresentações
35
Útil
3
Comentários
Pedroxh
Spotlight
Spotlight

Boa noite Network Folks!

 

Após um tempo de descanso, resolvi voltar com os artigos de algumas anotações que fiz durante os estudos do meu CCNP Service Provider. Nesse artigo irei explicar sobre o que é o Segment Routing e como ele é um divisor de águas no mundo de Service Providers e Data Centers sendo um reforço incrível para as redes MPLS.

 

Antes de começar, já adianto que o SR (Segment Routing) é um tema muito complexo e de pouco material disponível ainda, logo, o intuito desse artigo será cobrir o básico dessa nova tecnologia e com o tempo ir incrementando novos artigos sobre isso. Dito isso, recomendo que leia sobre MPLS nesse artigo para você se habituar com alguns termos. Prepare o seu café e vamos começar!

 

O que é Segment Routing

 

Com base na RFC 8402 , o Segment Routing aproveita o paradigma do roteamento de origem, ou seja, para o SR, tudo acontece no Head-End baseado em uma lista de instruções chamada de "Segmento".

Esse segmento pode ser local ou global dentro do domínio SR sendo referido como Segment Identifier (SID). Quando falamos que o SR é benéfico para os backbones dos ISP's é porque ele é capaz de trabalhar com o data plane do MPLS (já que o SR é uma tecnologia de Control Plane), reduzindo assim o número de protocolos necessários para criar um backbone MPLS.

 

OBS: O SR pode trabalhar no data plane IPV6 também de forma nativa, porem não será abordado nesse artigo.

 

Conseguem ver o ganho disso? É uma evolução incrível no que diz respeito a encaminhamento e configuração de um backbone escalável e de fácil administração operacional.

 
 
Pedroxh_0-1657729788720.gif

Você deve estar se perguntando, "como assim reduzir o número de protocolos necessários em um backbone?" Uma das propostas do SR fora implementar o paradigma de roteamento pela origem (SPRING), é aproveitar as extensões dos protocolos IGP (IS-IS e OSPF) que podem atribuir e distribuir labels para construir o LSP (Label Switch Path) dentro de cada domínio IGP. Ou seja, não precisaremos mais de utilizar o LDP (Label Distribution Protocol) e nem o RSVP (Resource Reservation Protocol) para criação de tuneis como para o MPLS TE (no SR chamado de SR TE), apenas o segment routing e o nosso próprio IGP.

 

OBS. No roteamento baseado na origem (SPRING), o router de origem especifica o caminho que o pacote irá seguir pela rede em vez de ser Hop-by-hop baseado no ip de destino, coisa que o MPLS já faz com a alocação de labels, por exemplo. A imagem abaixo ilustra um pouco isso  

 
 
 

De forma reduzida, o SR no Data Plane:

 
  • Pode ser diretamente aplicado na arquitetura MPLS atual sem alteração no modo de encaminhamento

  • Segments = Labels

  • Segment List = Label Stack

  • Pode trabalhar em coexistência com o LDP para viradas gradativas no processo de mudança para SR sem grandes dowtimes, e se um destino existir um SR e um LDP label, o LDP será preferido em vez do SR (guarde essa informação para o nosso Lab)

 

De forma reduzida, o SR no Control Plane:

 
  • O SR utiliza extensões do IS-IS (TLVs 135,235,236,237)e do OSPF(Opaque LSA type 4,7,10) para o control plane

  • É possível integra-lo com serviços MPLS, como L3VPN,VPWS,VPLS e EVPN

  • É possível utilizar o BGP (BGP-LU) como control plane

 

Funcionamento Segment Routing

 

Os tipos de Segments são:

 
  • Prefix Segments: O Prefix SID é associado a um prefixo IP. Ele é configurado manualmente a partir do Segment routing Global blocal (SRGB) no range entre 16000-23999 e possuem escopo GLOBAL sendo distribuídos pelo IS-IS ou OSPF.

 
  • Node SID (equivalente a um Router ID): Tipo especial de SID que identifica um node especifico. Ele é configurado na interface loopback com o endereço e deve ser globalmente único.

 
  • Adjacency Segment: Identificado por um rótulo dinâmico chamado Adjacency SID, que representa uma adjacência específica, como o peer com um router vizinho. Esse SID é distribuído pelo IS-IS ou OSPF e direciona o trafego para um peer especifico e deve ser localmente exclusivo. Somente os nodes diretamente conectados propagam o plano de encaminhamento para os ADJ-SID's. Seu range é de 24000-1048575.

 
  • SRLB: Segment Routing Local Block é um intervalo de valores preservado para a locação manual de segmentos locais (como o ADJ-SID, por exemplo). Seu range é de 15000-15999

 

Abaixo, uma imagem ilustrando uma topologia de exemplo com os seus segmentos.

 
 
 Muitos nomes né? Vamos agora ao nosso lab onde acredito que tudo ficará muito mais claro!
 

Segment Routing lab

 

Abaixo temos o nosso cenário para mostrar um pouco do SR em ação. Eu não irei entrar no mérito do SR Mapping Server para realizar o "translate" de LDP to SR SID em uma rede está em processo de migração de LDP para Segment Routing. Nesse nosso cenário, estou considerando que todo o ambiente é "greenfield" (ambiente novo e apartado já nascendo com Segment Routing) e deixarei esse tema para ser abortado em outro artigo .

 
Pedroxh_5-1657729788774.png

Nesse cenário iremos demonstrar como é simples a configuração do SR em nosso backbone. Todos os roteadores são IOS's XR e toda a parte IGP já foi previamente configurada (OSPF Area 0) para agilizar o lab e não será mostrada nesse artigo.

 

Para o aprendizado ser mais rico, eu configurei o MPLS em toda a nossa rede e já defini (ver imagem acima) quais serão os nossos Node SID's de cada router. A ideia é vermos como o MPLS está funcional e configurarmos o SR substituindo o LDP e vendo as diferenças e similaridades. Vamos começar vendo como está nosso MPLS e LDP? Abaixo a configuração de PE1 que está idêntica aos demais routers.

 

XR-PE1

RP/0/0/CPU0:XR-PE1#show running-config

Wed Jul 13 03:35:03.567 UTC

Building configuration...

!! IOS XR Configuration 6.6.3.21I

!! Last configuration change at Wed Jul 13 00:37:23 2022 by admin

!

hostname XR-PE1

interface Loopback0

ipv4 address 1.1.1.1 255.255.255.255

!

interface MgmtEth0/0/CPU0/0

shutdown

!

interface GigabitEthernet0/0/0/1

description TO-PE-XRV3

ipv4 address 10.100.100.1 255.255.255.252

!

interface GigabitEthernet0/0/0/2

description TO-P2

ipv4 address 10.100.100.5 255.255.255.252

!

router ospf 1

router-id 1.1.1.1

mpls ldp sync

mpls ldp auto-config

area 0

interface Loopback0

!

interface GigabitEthernet0/0/0/1

!

interface GigabitEthernet0/0/0/2

!

!

!

mpls oam

!

mpls ldp

!

end

 

Visto a configuração, vamos ver como PE1 alcança a loopback de PE2 (2.2.2.2/32) e como está os seus neighbors LDP

 

show mpls ldp neighbor brief

Pedroxh_7-1657729788782.png

show mpls forwarding

Pedroxh_9-1657729788767.png

show mpls forwarding detail

Pedroxh_11-1657729788762.png

show ip route e show ip cef

Pedroxh_13-1657729788780.png
 
Pedroxh_15-1657729788786.png

Podemos observar que tudo está funcionando perfeitamente em nosso MPLS. Possuímos labels de saida para o destino 2.2.2.2/32 (24005 e 24004) e se testarmos a comunicação IP com o ip de origem da loopback de PE1, tanto o traceroute tradicional quanto o traceroute MPLS funcionaram corretamente conforme abaixo (e observe, ambos por caminhos diferentes, validando o funcionamento do nosso ECMP).

 traceroute e traceroute mpls
Pedroxh_17-1657729788789.png

Porem veja, ao decorrer do caminho, nossos labels MPLS vão se alterando (as vezes se mantem o id do label) no decorrer que o pacote vai indo até o destino. Com o SR, isso não mais irá ocorrer, pois iremos definir os ID's dos nossos seguimentos e nodes em toda nossa rede. Vamos começar a configurar o nosso Segment routing!

 

Configurando Segment Routing

 

Em todos os nossos routers, iremos realizar a seguinte configuração:

 

router ospf 1

segment-routing global-block 18000 19999

segment-routing mpls

segment-routing forwarding mpls

 

----------

router ospf 1

area 0

interface lo0

prefix-sid index x*

commit

 

Essa configuração irá realizar as seguintes coisas:

  • Configurará o SRGB no range de 18000 - 19999 para ser alocado nos prefix-sid's

  • Habilitará o segment routing no MPLS e utilizará o data plane do MPLS para encaminhamento de tráfego

  • Adicionará o prefix-sid ao prefixo que iremos anunciar (no caso, iremos somente da interface loopback de PE1 e PE2 para ficar didaditco) onde x* é o SRGB default (no nosso caso, 18000) + o numero do index (por exemplo, index 1), ficando como 18001.

 

OBS: Como PE1 o Node ID é 18000, em vez de utilizarmos o comando "prefix-sid index x" , usaremos o comando prefix-sid absolute 18000 que faz com que o prefix-sid nunca mude mesmo se alteremos o valor do SRGB atual.

 

Vamos observar as configurações de PE1 e PE2

 

XR-PE1

RP/0/0/CPU0:XR-PE1#show running-config

Wed Jul 13 04:28:55.756 UTC

Building configuration...

!! IOS XR Configuration 6.6.3.21I

!! Last configuration change at Wed Jul 13 04:21:28 2022 by admin

!

hostname XR-PE1

interface Loopback0

ipv4 address 1.1.1.1 255.255.255.255

!

interface MgmtEth0/0/CPU0/0

shutdown

!

interface GigabitEthernet0/0/0/1

description TO-PE-XRV3

ipv4 address 10.100.100.1 255.255.255.252

!

interface GigabitEthernet0/0/0/2

description TO-P2

ipv4 address 10.100.100.5 255.255.255.252

!

router ospf 1

router-id 1.1.1.1

segment-routing global-block 18000 19999

segment-routing mpls

segment-routing forwarding mpls

mpls ldp sync

mpls ldp auto-config

area 0

interface Loopback0

prefix-sid absolute 18000

!

interface GigabitEthernet0/0/0/1

!

interface GigabitEthernet0/0/0/2

!

!

!

mpls oam

!

mpls ldp

!

end

 

XR-PE2

RP/0/0/CPU0:XR-PE2#show running-config

Wed Jul 13 04:28:44.206 UTC

Building configuration...

!! IOS XR Configuration 6.6.3.21I

!! Last configuration change at Wed Jul 13 04:22:17 2022 by admin

!

hostname XR-PE2

interface Loopback0

ipv4 address 2.2.2.2 255.255.255.255

!

interface MgmtEth0/0/CPU0/0

shutdown

!

interface GigabitEthernet0/0/0/0

description TO-P3

ipv4 address 10.200.200.6 255.255.255.252

!

interface GigabitEthernet0/0/0/1

description TO-P4

ipv4 address 10.200.200.2 255.255.255.252

!

router ospf 1

router-id 2.2.2.2

segment-routing global-block 18000 19999

segment-routing mpls

segment-routing forwarding mpls

area 0

mpls ldp sync

mpls ldp auto-config

interface Loopback0

prefix-sid index 5

!

interface GigabitEthernet0/0/0/0

!

interface GigabitEthernet0/0/0/1

!

interface GigabitEthernet0/0/0/2

!

!

!

mpls oam

!

mpls ldp

!

end

 

Vamos verificar se mudou algo?

show mpls forwarding e traceroute

Pedroxh_19-1657729788676.png

Veja que após a configuração, PE1 recebe os prefixos da loopback de PE2 2.2.2.2/32 via LDP e via SR (18005) e que o label tanto de entrada quanto de saida é o mesmo no caso do SR, porem, ele continua utilizando o LDP. Lembra que eu disse no começo que se possuirmos LDP e SR configurados na mesma caixa, ela priorizará o LDP por default? Para corrigir isso, precisaremos desabilitar o LDP em todas as caixas ( nesse caso, pois na vida real teriamos que utilizar um Mapping Server para realizar a migração gradativamente sem downtime). Vamos remover as configs de LDP e deixar somente o SR.

 

Acessar todos os routers e remover as seguintes configurações

 

router ospf 1

no mpls ldp sync

no mpls ldp auto-config

commit

 

Feito isso, vamos verificar como está nossa LFIB e nosso traceroute?

show mpls forwarding

Pedroxh_21-1657729788719.png

traceroute mpls e traceroute tradicional

Pedroxh_23-1657729788716.png

Agora sim! Nosso trafego está utilizando somente o label que definimos no SRGB e o ECMP ocorre normalmente utilizando a mesma label (via P1 e P2).

 

Explicando o fluxo:

 

1) Como o SRGB é igual no dominio SR, todos os nodes alocam o mesmo label para o mesmo prefix-sid, ou seja, PE2 anunciará todos os seus prefixos com o mesmo label, no caso, 18005. Abaixo podemos ver isso.

 

show cef 2.2.2.2

Pedroxh_25-1657729788718.png

2) Encaminhado o pacote para o proximo salto (P1 ou P2 no nosso caso), com a label 18005, os nossos P routers recebem o pacote e fazem um SWAP para o mesmo endereço 18005 e encaminha o pacote para frente.

 

show mpls forwarding labels 18005

Pedroxh_27-1657729788787.png

3) P3 (os dois tracerts chegam até ele por caminhos diferentes) é o nosso PHP (Penultimate hop) para o destino 2.2.2.2/32. Ao chegar nele, ele realiza o POP do prefix-sid do top label e encaminha o pacote ip puro para o destino que está em PE2.

 

show mpls forwarding labels 18005

Pedroxh_29-1657729788778.png

Realmente o SR veio para mudar o jogo e facilitar a vida de engenheiros que precisam administrar redes enormes. Não se preocupe se não entender de primeira ou se achar que falta alguma coisa pois, a minha ideia foi fazer 1 brief sobre o assunto que é muito extenso da forma mais simples e didatica possivel.

 

Até a proxima pessoal!

 
 
Pedroxh_31-1657729788671.gif

 

 
 
 
 
3 Comentários
tomy.tim
VIP
VIP

Exelente conteúdo @Pedroxh Parabéns pela dedicação e contribução.

Muito bom @Pedroxh . Parabéns!

aislamsouza
Level 1
Level 1

Como sempre, explicação bem simples de entendimento aliando com a prática, só temos a agradecer pelo ótimo conteúdo @Pedroxh , saiba que você faz a diferença no aprendizado de muitos estudantes. 

Primeiros Passos

Encontre respostas, faça perguntas e conecte-se com nossa comunidade de especialistas da Cisco de todo o mundo.

Estamos felizes por você estar aqui! Participe de conversas e conecte-se com sua comunidade.