Olá network team!
Nesse artigos irei abordar um case que vem se tornando bastante comum no mundo ISP. Estou falando do Multiprotocol Label Switching Traffic Engineering (MPLS-TE). Como de costume irei abordar mais a aplicação pratica do tema e menos a questão teorica. Caso tenha interesse em entender mais como funciona o MPLS recomendo o artigo O que é MPLS e por que MPLS? publicado aqui no howtonetwork.
O mercado de ISP vem crescendo dia após dia e com isso cresce também o interesse de grandes operadoras em fechar parceria de last mile (layer 2) em regiões nas quais não possuem cobertura. Contudo, para um ISP em fase de crescimento o maior desafio é fornecer rápida convergencia em caso de falhas e garantir a qualidade na entrega do serviço (não é viavel o analista ter que ficar migrando vlan de porta sempre que acontece um rompimento). Para esse tipo de problema temos algumas soluções, entre elas o RRPP e o famoso MPLS.
Antes de entramos no MPLS-TE temos que primeiro configurar o MPLS na estrutura para garantir a entrega e para isso utilizaremos o seguinte cenário:
imagem 1
Como primeiro passo iremos configurar o nosso underlay com o protocolo OSPF. O OSPF será responsavél por rotear a loopback dos SWs MPLS para que sejá possível o encaminhamento dos labels através desses endereços.
CONFIGURANDO O OSPF:
Utilizaremos uma configuração básica de OSPF apenas para rotear as loopbacks dos SW. Para isso iremos realizar a seguinte configuração:
Configuração SW01:
bfd
#
interface LoopBack1
ip address 1.1.1.1 255.255.255.255
#
ospf 1 router-id 1.1.1.1
default cost inherit-metric type 1
bfd all-interfaces enable
opaque-capability enable
area 0.0.0.0
network 1.1.1.0 0.0.0.255
network 10.10.20.0 0.0.0.3
network 10.10.40.0 0.0.0.3
mpls-te enable
#
interface Ethernet1/0/0
undo shutdown
ip address 10.10.20.1 255.255.255.252
#
interface Ethernet1/0/1
undo shutdown
ip address 10.10.40.1 255.255.255.252
Analisando o script acima notem que realizamos as seguintes configurações:
Definição de uma loopback para o SW
Criação de um processo OSPF (Utilizamos o router-id com a mesma identificação da loopback. Porém, vale ressaltar que o router-id não é um IP)
Ativação do protocolo BFD em todas a interfaces OSPF. (BFD é utilizados para identificar rapidamente falhas em links point-to-point e em conectividade IP)
Ativação da opaque-capability ( Opaque LSA consiste em um cabeçalho LSA padrão seguido por um campo alinhado de informações específicas de 32 bits. Leia mais sobre Opaque aqui)
Ativição da capability MPLS-TE para que possamos usar mais à frente.
Criação da área zero e adicionado as loopback e IP de ponto-a-ponto conforme definido na imagem 1
Configuração de ip nas interfaces point-to-point entre os SW.
Agora basta replicar a configuração em todos os SW respeitando os IP definidos no projeto e após isso já teremos o OSPF rodando por toda a rede. Analisando a partir do SW01 temos a seguinte visão da rede:
imagem 2
Pois bem, a partir de agora já podemos seguir com a configuração do protocolo MPLS. O primeiro passo é ativar o protocolo de modo global em todos os SW já deixando preparado para receber o MPLS-TE:
[~SW01]mpls
Info: Mpls starting, please wait... OK!
mpls lsr-id 1.1.1.1
#
mpls
mpls te
mpls rsvp-te
mpls rsvp-te hello
mpls rsvp-te hello support-peer-gr
mpls te cspf
lsp-trigger all
#
mpls l2vpn
#
mpls ldp
#
ipv4-family
Em seguida vamos habilitar as interfaces para o protocolo, veja como ficará a nossa configuração:
interface Ethernet1/0/0
undo shutdown
ip address 10.10.20.1 255.255.255.252
mpls
mpls te
mpls te auto-frr link
mpls rsvp-te
mpls rsvp-te hello
mpls ldp
#
interface Ethernet1/0/1
undo shutdown
ip address 10.10.40.1 255.255.255.252
mpls
mpls te
mpls te auto-frr link
mpls rsvp-te
mpls rsvp-te hello
mpls ldp
Basta replicar essa nova configuração em todos os SW sempre respeitando os padrões definidos no projeto!
Até o momento temos o OSPF configrado e o MPLS habilitado em todos os SW. Contudo, o MPLS é um protocolo baseado em labels e na nossa topologia não temos nehum protocolo realizando o encaminhamento de labels ainda. Nesse caso poderiamos usar o LDP ou o conhecido BGP para tal tarefa. Vou optar pelo BGP para termos um cenário mais dinamico e da fácil manuseio visando atender facilmente a equipe do NOC de todo ISP.
Nosso LAB deverá ter BGP full-mesh rodando. Usaremos os IPs de loopback para fechar as sessões conforme as configurações a seguir:
bgp 65031
router-id 1.1.1.1
group CORE-MPLS internal
peer CORE-MPLS connect-interface LoopBack1
peer 2.2.2.2 as-number 65031
peer 2.2.2.2 group CORE-MPLS
peer 3.3.3.3 as-number 65031
peer 3.3.3.3 group CORE-MPLS
peer 4.4.4.4 as-number 65031
peer 4.4.4.4 group CORE-MPLS
peer 5.5.5.5 as-number 65031
peer 5.5.5.5 group CORE-MPLS
#
ipv4-family unicast
undo synchronization
peer CORE-MPLS enable
peer 2.2.2.2 enable
peer 2.2.2.2 group CORE-MPLS
peer 3.3.3.3 enable
peer 3.3.3.3 group CORE-MPLS
peer 4.4.4.4 enable
peer 4.4.4.4 group CORE-MPLS
peer 5.5.5.5 enable
peer 5.5.5.5 group CORE-MPLS
#
l2vpn-ad-family
policy vpn-target
peer 2.2.2.2 enable
peer 3.3.3.3 enable
peer 4.4.4.4 enable
peer 5.5.5.5 enable
Após realizar a configuração em todos os SW teremos os peers estabelecidos e prontos para trafegar os nossos labels:
imagem 3
Agora vamos ativar o nosso primeiro cliente utilizando a nossa rede MPLS:
interface Vlanif60
description CLI_1
l2 binding vsi 60
#
vsi 60
bgp-ad
vpls-id 65031:60
vpn-target 65031:60 import-extcommunity
vpn-target 65031:60 export-extcommunity
Ao realizar essas configurações nos dois SW estamos criando um tunel VPLS utilizando o protocolo BGP para trafegar os labels através da nossa rede MPLS. Isso nos proporcionará rápida convergência em caso de falhas.
Após todas essas configurações nosso ISP está preparado para atender circuitos utilizando L2VPN
Vamos analisar como ficou a nossa rede agora. Temos hipoteticamente 2 caminhos:
imagem 4
O caminho SW01 <-> SW04 <-> SW05 é o menor caminho e de maior capacidade, logo o OSPF vai seleciona-lo para encaminhar todo o tráfego entre SW01 e o SW04. Porém, esse é o caminho com maior latência se comparado ao caminho SW01 <-> SW02 <-> SW03 <-> SW05. Analisando o nosso caminho na parte superior da imagem 4 vemos que ele possui menor latência, mas nosso posso manipular o meu tráfego todo por ele pois tem apenas 40G de capacidade. Até o momento tudo está rodando corretamente no nosso MPLS.
Chega o momento de ativar um cliente L2L que usará esse transporte para serviço de voz. O comercial prometeu entregar pra ele um circuito com latência máxima de 4ms, como iremos resolver isso? É agora que o MPLS-TE entra em ação. Utilizando o TE podemos fazer com que apenas um circuito escolha passar pela rota SW01 <-> SW02 <-> SW03 <-> SW05 sem influenciar no demais circuitos que por sua vez continuarão a trafegar pela rota de maior capacidade. Vamos para a configuração?
Primeiro vamos definir o explicit-path no SW01 e no SW05, isso nada mais é que o caminho que queremos que o tráfego siga. Para definir o explicit-path devemos usar os ips configurados no ponto-a-ponto das interfaces:
Configuração SW01:
explicit-path ROTA_PRINCIPAL
next hop 10.10.20.2
next hop 20.20.30.2
next hop 30.30.50.2
#
explicit-path ROTA_SECUNDARIA
next hop 10.10.40.2
next hop 40.40.50.2
Configuração SW05:
explicit-path ROTA_PRINCIPAL
next hop 30.30.50.1
next hop 20.20.30.1
next hop 10.10.20.1
#
explicit-path ROTA_SECUNDARIA
next hop 40.40.50.1
next hop 10.10.40.1
Configurado os caminhos iremos agora subir um tunel entre os dois SW e configurar uma policy para ser utilizado dentro das VSI do transporte:
Configuração SW01:
interface Tunnel1
ip address unnumbered interface LoopBack1
tunnel-protocol mpls te
destination 5.5.5.5
mpls te record-route label
mpls te backup ordinary best-effort
mpls te backup hot-standby mode revertive wtr 60
mpls te reserved-for-binding
mpls te tunnel-id 10
mpls te path explicit-path ROTA_PRINCIPAL
mpls te path explicit-path ROTA_SECUNDARIA secondary
#
tunnel-policy policy_1
tunnel binding destination 5.5.5.5 te Tunnel1
Configuração SW05:
interface Tunnel1
ip address unnumbered interface LoopBack1
tunnel-protocol mpls te
destination 1.1.1.1
mpls te record-route label
mpls te backup ordinary best-effort
mpls te backup hot-standby mode revertive wtr 60
mpls te reserved-for-binding
mpls te tunnel-id 10
mpls te path explicit-path ROTA_PRINCIPAL
mpls te path explicit-path ROTA_SECUNDARIA secondary
#
tunnel-policy policy_1
tunnel binding destination 1.1.1.1 te Tunnel1
Após realizar essas configurações já podemos conferir se o nosso túnel está operacional:
Perfeito! Agora já temos o melhor caminho definido apenas para o nosso cliente que necessita de menor latência enquanto o restante da nossa rede irá trafegar pelo nosso caminho de maior capacidade. Hora de ativar o cliente:
Configuração SW01:
mpls ldp remote-peer 5.5.5.5
remote-ip 5.5.5.5
#
vsi 50
pwsignal ldp
vsi-id 50
peer 5.5.5.5 tnl-policy policy_1
#
interface Vlanif50
description CLIENTE_VOIP
l2 binding vsi 50
Configuração SW05:
mpls ldp remote-peer 1.1.1.1
remote-ip 1.1.1.1
#
vsi 50
pwsignal ldp
vsi-id 50
peer 1.1.1.1 tnl-policy policy_1
#
interface Vlanif50
description CLIENTE_VOIP
l2 binding vsi 50
Analisando as configurações aplicadas temos o seguinte:
Foi configurado um l2vpn vpws estático entre o SW01 e o SW05.
Atribuimos dentro dessa VSI a nossa policy do TE configurado anteriormente.
Como configuramos a VSI de forma estática utlizamos o Label Distribution Protocol (LDP) para trafegar os nossos labels. Sendo assim foi necessário configurar um peer LDP entre os dois SW.
Criado a interface vlan atrelando ela a VSI criada.
Após todo esse processo, basta marcar a vlan na porta com o cliente e teremos a nossa rede protegida com o MPLS e com engenharia de tráfego para atender o nosso cliente com o MPLS-TE.
imagem 5
imagem 6
Notem na imagem 6 que mesmo o nosso SW01 chegando na loopback do SW05 atráves da nossa rota com maior capacidade de banda, a nossa VSI segue o caminho de menor latência atráves do nosso Tunel TE.
OBS: O lab não respeita as nossas latências hipotéticas kkkk
Espero que esse artigo possa ajudar os pequenos e grandes ISP para que juntos possamos tornar a internet cada vez mais estável para todos!
Muito bem explicado!!!🍻
Excelente artigo 👏🏻👏🏻👏🏻