DEV Community

Cristian Cardoso
Cristian Cardoso

Posted on

Configurando MPLS no OpenBSD com circuito VPLS

Nesse breve tutorial vou mostrar como configurar um backbone MPLS utilizando o sistema operacional OpenBSD, talvez o sistema mais seguro do mundo também tem suporte para uso de MPLS, mas você que está lendo pode estar se perguntando porque não estamos utilizando Cisco ou Juniper, isso é simples, o que move quem vos escreve é a aleatoriedade :)

Nesse tutorial não vamos tratar da instalação do OpenBSD, para isso você pode consultar a documentação oficial aqui

O que é MPLS?
MPLS ou Multiprotocol Label Switching definido pela RFC 3031 é um protocolo de encaminhamento de pacotes baseada em rótulos ou labels e atua entre as camadas 2 e 3 do modelo OSI, conhecido por muitos como um protocolo da camada 2,5 do modelo OSI. O MPLS é indiferente ao tipo de dado que é transportado podendo ser tráfego IP ou de outro tipo, se comparando ao roteamento IP se torna mais rápido em função de não haver necessidade de consultar uma tabela de rotas para encaminhamento de pacotes.
Com esse protocolo podemos criar VPN's garantindo isolamento do tráfego com criação de tabelas de labels(rótulos) usadas para roteamento exclusivas de cada VPN.
Também é possível executar QoS com a priorização de aplicações críticas dando um tratamento diferenciado para cada tráfego, além de poder gerar túneis VPN para uma infinidade de tipos de serviços. Por exemplo, operadoras de telecomunicações utilizam MPLS para conectar filiais de empresas em diferentes cidades, garantindo segurança e desempenho mesmo sobre redes públicas.

O que é um circuito VPLS?
VPLS (Virtual Private LAN Service) é uma tecnologia que permite interligar múltiplos sites remotos como se estivessem na mesma rede local Ethernet. Ela opera sobre MPLS e oferece conectividade de camada 2, mantendo funcionalidades como VLANs, broadcast e protocolos locais entre os pontos.

Cenário proposto de backbone MPLS com OpenBSD

No cenário da imagem acima, vamos simular um pequeno backbone de uma operadora com dois roteadores de core(P - provider) e dois roteadores de borda(PE - provider edge), fechando um túnel VPLS do tipo pseudowire ponto a ponto baseado na RFC 4447 que é o tipo de VPLS suportado no OpenBSD

Configurações do ambiente de backbone

1 - Primeiro vamos configurar as interfaces de loopback, enlace e ativar o encaminhamento de pacotes

Para configuração dos arquivos, você pode utilizar o editor de texto da sua preferência no meu caso foi utilizado o vim.

Obs: No OpenBSD as interfaces ficam no arquivo /etc/hostname.interface, onde interface é ethX, vioX(caso do meu lab virtual), etc, lembre-se de validar isso quando estiver com o servidor ligado.

router1-pe

router1-p

router2-p

router2-pe

2 - Configurando o OSPF para comunicação entre as interfaces

Aqui dou um pequena explicação sobre o OSPF (Open Shortest Path First) ele é um protocolo de roteamento dinâmico interno (IGP) que utiliza o algoritmo de Dijkstra para calcular o caminho mais curto entre os roteadores. Ele é baseado em estado de enlace (link-state), o que significa que cada roteador constrói uma visão completa da topologia da rede e escolhe rotas com base no custo — geralmente relacionado à largura de banda.

No contexto de MPLS, o OSPF é essencial para descobrir vizinhos e estabelecer conectividade entre os roteadores, servindo como base para protocolos como o LDP, que distribuem os rótulos de encaminhamento.

Agora vamos as configurações de OSPF nos equipamentos, no OpenBSD o daemon utilizado é o ospfd e o arquivo fica em /etc/ospfd.conf(caso ele não exista é só criar com seu editar de texto de preferência e dar permissão 640)

router1-pe

router1-p

router2-p

router2-pe

Para ativamos o serviço na inicialização das máquinas e checar o status do serviço, executamos:

Para visualizarmos se a vizinhança subiu corretamente, usamos o seguinte comando, vou utilizar um roteador de core ou P como exemplo:

Acima conseguimos ver que a vizinhança com os roteadores borda ou PE e o segundo roteador de core ou P estão funcionais

Agora caso você queira visualizar a tabela de rotas, usamos o seguinte comando:

OBS: O ideal em redes de backbone é o MTU das interfaces estar no máximo, pelo menos 9000 ou mais, como isso é um laboratório o MTU não foi alterado.

3 - Configurando o LDPD

Creio que aqui também cabe uma pequena explicação sobre o LDP (Label Distribution Protocol), ele é o protocolo responsável por distribuir os rótulos (labels) entre os roteadores em uma rede MPLS. Esses rótulos substituem a necessidade de consultar tabelas de roteamento IP, permitindo encaminhamento mais rápido e eficiente.

No OpenBSD, o daemon ldpd implementa o LDP e trabalha em conjunto com o OSPF para descobrir vizinhos e estabelecer sessões de troca de labels. Uma vez que os roteadores estão conectados via OSPF, o ldpd negocia os rótulos para cada prefixo, criando uma infraestrutura MPLS funcional.

router1-pe

router1-p

router2-p

router2-pe

Caso a gente queira validar se as sessões de vizinhança do LDP estão funcionais, utilizamos o seguinte comando:

Caso queiramos ver se a tabela de encaminhamento está correta e gerando labels, usamos o seguinte comando:

Configuração do túnel VPLS

1 - Configuração de túnel VPLS

O OpenBSD segue o padrão RFC 4447, que define como criar túneis de camada 2 (pseudowires) sobre MPLS. A abordagem é VPLS baseada em pseudowire (PW-based VPLS) — ou seja, a conexão é feita nos roteadores de borda ou PE onde estará conectado o cliente ou filiais de alguma empresa.

Com isso vamos configurar somente os roteadores das pontas router1-pe e router2-pe, que possuem a interface vio2(ou e2 como está na topologia) ligada nos computadores do cliente que deseja que esses computadores se conectem como s estivessem ligados em uma rede local.

Para isso vamos precisar fazer algumas configurações nos routers de borda

  • Configurar a interface vio2(ponta do cliente)
  • Configurar uma interface mpw1, que define o túnel MPLS entre os roteadores de borda
  • Configurar uma interface bridge0, que conecta a interface do cliente à malha VPLS.
  • Configurar no arquivo /etc/ldpd.conf o túnel VPLS

Agora vamos às configurações:

router1-pe

  • Configurando interface vio2

  • Configurando a interface mpw1

  • Configurando a interface bridge0

  • Configurando o túnel VPLS no ldpd

router2-pe

  • Configurando interface vio2

  • Configurando a interface mpw1

  • Configurando a interface bridge0

  • Configurando o túnel VPLS no ldpd

Caso queiramos visualizar se o túnel está funcional, utilizamos o seguinte comando:

2 - Configuramos as máquinas que estão nas pontas

Máquina1-Cust1

Máquina2-Cust1

Agora vamos ao teste de ping via túnel VPLS da Máquina1-Cust1 para a Máquina2-Cust1 e vice-versa

Com esse teste concluímos a configuração de um túnel VPLS do tipo pseudowire em um backbone MPLS utilizando o OpenBSD como base.

Documentação de referência:
https://man.openbsd.org/hostname.if.5
https://man.openbsd.org/mpw.4
https://man.openbsd.org/bridge.4
https://man.openbsd.org/ospfd.conf.5
https://man.openbsd.org/ldpd.conf.5

Top comments (0)