domingo, 3 de fevereiro de 2013

Peer-Group na Simplificação da Configuração do BGP

Olá Pessoal.

Aqueles que acompanham o blog sabem que já escrevi diversos artigos sobre o Protocolo BGP. Essa quantidade de artigos sobre diversos aspectos de um mesmo assunto apenas reforça o grau de importância desse protocolo no contexto do roteamento externo para fins de troca de rotas entre Sistemas Autônomos (AS) na Internet.

Antes que seja possível a troca de informações de roteamento entre dois ASs distintos, é necessária que seja estabelecida uma sessão de comunicação entre dois roteadores nas bordas de cada AS. Essa sessão de comunicação utiliza a porta 179/TCP e esse processo é denominado peering (ou pareamento).

O pareamento entre apenas dois roteadores é bastante objetivo e não requer muito esforço de configuração, no entanto em ambientes grandes (provedores ou PTTs) em que há vários pareamentos com diversos outros ASs, muitas vezes o processo de configuração de múltiplos pareamentos pode se tornar extenso e repetitivo, o que induz a erros humanos.

É nesse contexto que uma solução denominada peer-group pode simplificar bastante o esforço de configuração! O peer-group representa um agrupamento lógico de múltiplos roteadores vizinhos (peers) que possuem configurações iguais, ou seja, que possuem as mesmas políticas de saída de tráfego.

É importante ter em mente que o recurso de criar "grupos de pareamento" traz outro benefício ainda mais importante do que a mera simplificação de configuração e que muitas vezes não é mencionado: a redução na carga de processamento e memória que são necessárias na geração das mensagens de atualização.

Essa redução de recursos no roteador ocorre porque quando se cria um peer-group, então a tabela de roteamento precisa ser verificada uma única vez e depois as atualizações são replicadas para todos os roteadores configurados como membro de um peer-group. Sem essa configuração a consulta teria que ser realizada individualmente para cada vizinho pareado. 

Para mostrar o benefício desse recurso, vamos considerar o cenário abaixo em que temos um roteador R1 no AS 100 que estará pareado com outros três roteadores: R2 (ASN 200), R3 (ASN 300) e R4 (ASN 400). Vamos imaginar que R1 irá compartilhar uma chave de segurança (senha) que será a mesma entre todos os pareamentos (isso não é muito realista) e que teremos que anunciar o prefixo 53.0.0.0/8 pertencente ao AS100 para todos os vizinhos pareados.


Nesse artigo irei apresentar a mesma configuração através de dois métodos diferentes, sendo que no primeiro faremos os pareamentos convencionais sem agrupamento lógico e na segunda etapa será utilizado o recurso de peer-group.

Solução 1: Sem Peer-Group

01. R1-ASN100(config)# router bgp 100
02. R1-ASN100(config-router)# neighbor 2.2.2.2 remote-as 200
03. R1-ASN100(config-router)# neighbor 2.2.2.2 password SENHA
04. R1-ASN100(config-router)# neighbor 2.2.2.2 update-source lo 1
05. R1-ASN100(config-router)# neighbor 2.2.2.2 ebgp-multihop 2 
06. R1-ASN100(config-router)# neighbor 3.3.3.3 remote-as 300
07. R1-ASN100(config-router)# neighbor 3.3.3.3 password SENHA
08. R1-ASN100(config-router)# neighbor 3.3.3.3 update-source lo 1
09. R1-ASN100(config-router)# neighbor 3.3.3.3 ebgp-multihop 2  
10. R1-ASN100(config-router)# neighbor 4.4.4.4 remote-as 400
11. R1-ASN100(config-router)# neighbor 4.4.4.4 password SENHA
12. R1-ASN100(config-router)# neighbor 4.4.4.4 update-source lo 1
13. R1-ASN100(config-router)# neighbor 4.4.4.4 ebgp-multihop 2
14. R1-ASN100(config-router)# network 53.0.0.0 mask 255.0.0.0  

Solução 2: Com Peer-Group 
  
01. R1-ASN100(config)# router bgp 100
02. R1-ASN100(config-router)# neighbor GRUPO peer-group
03. R1-ASN100(config-router)# neighbor GRUPO password SENHA 
04. R1-ASN100(config-router)# neighbor GRUPO update-source lo 1
05. R1-ASN100(config-router)# neighbor GRUPO ebgp-multihop 2 
06. R1-ASN100(config-router)# neighbor 2.2.2.2 remote-as 200
07. R1-ASN100(config-router)# neighbor 2.2.2.2 peer-group GRUPO
08. R1-ASN100(config-router)# neighbor 3.3.3.3 remote-as 300
09. R1-ASN100(config-router)# neighbor 3.3.3.3 peer-group GRUPO
10. R1-ASN100(config-router)# neighbor 4.4.4.4 remote-as 400
11. R1-ASN100(config-router)# neighbor 4.4.4.4 peer-group GRUPO
12. R1-ASN100(config-router)# network 53.0.0.0 mask 255.0.0.0

Na linha 02 da segunda solução criamos um peer-group denominado GRUPO. Então nas linhas de 03 a 05 fazemos todas as configurações que serão comuns aos roteadores do grupo. Feito isso, basta incluir os roteadores vizinhos no grupo anteriormente criado (linhas 07, 09 e 11) que todas as configurações realizadas no grupo serão herdadas pelos roteadores membros! ;-)

Como esse post foca na configuração de peer-groups, então utilizei apenas as configurações mais básicas para ser objetivo. Reparem que na primeira solução temos que repetir várias configurações (password, update-source e ebgp-mulihop) entre todos os roteadores pareados, enquanto que na segunda solução uma única linha para cada roteador faz a mesma coisa - desde que as configurações sejam iguais... Se num cenário pequeno como esse já houve alguma redução na quantidade de linhas de comando, imagine o benefício desse agrupamento lógico em ambientes bem maiores que possuem vários roteadores pareados!

Abraço.

Samuel.

4 comentários: