Aprofundamento

BGP-4 — Border Gateway Protocol

BGP-4 (RFC 4271) é o protocolo de roteamento que liga os Sistemas Autônomos da Internet. Diferente de OSPF e EIGRP, ele não procura o caminho mais curto: procura o caminho que a POLÍTICA do operador mandou preferir. Roda sobre TCP 179, troca atualizações incrementais e carrega o caminho inteiro (AS_PATH) em cada rota — é um protocolo de vetor de caminho (path vector), e é o AS_PATH que também impede loop entre AS.

RFC 4271 Transporte TCP 179 Classe EGP Algoritmo Path Vector AD Cisco 20 eBGP / 200 iBGP Atualização Incremental, por evento

school Como o BGP pensa

Sistema Autônomo (AS) e ASN

Um AS é um conjunto de prefixos IP sob uma única política de roteamento — uma operadora, um datacenter, uma empresa multi-homed. Cada AS tem um número (ASN) alocado por um RIR; no Brasil, pelo NIC.br/LACNIC. ASN de 16 bits vai até 65535; desde a RFC 6793 usa-se ASN de 32 bits, escrito também como asdot (ex.: 1.10 = 65546).

Faixas privadas: 64512–65534 (16 bits) e 4200000000–4294967294 (32 bits). Elas nunca podem vazar para a Internet — removê-las na saída é obrigação da borda.

eBGP × iBGP — mesma máquina, regras diferentes

eBGP é a sessão entre AS diferentes: TTL 1 por padrão (vizinho tem de estar diretamente conectado, salvo ebgp-multihop), o AS local é prependado no AS_PATH e o NEXT_HOP é reescrito para o próprio roteador. iBGP é a sessão dentro do mesmo AS: não altera AS_PATH, não altera NEXT_HOP e obedece ao split horizon do iBGP — rota aprendida de um par iBGP NÃO é repassada a outro par iBGP.

É desse split horizon que nasce a exigência de malha completa (full-mesh) no iBGP — e são route reflector e confederação que a evitam.

Por que 'path vector' e não 'link-state'

OSPF e IS-IS montam um mapa idêntico da rede em cada roteador e calculam SPF. BGP não conhece a topologia interna de ninguém: recebe do vizinho a lista de AS que a rota atravessou e decide por atributos. Isso é o que permite escalar para mais de um milhão de prefixos na tabela global sem cada roteador conhecer o interior dos outros AS.

Consequência prática: BGP converge por evento e por política, não por cálculo topológico. Convergência lenta é característica de projeto, não defeito.

Distância administrativa e a tabela do BGP

No Cisco IOS, rota eBGP tem AD 20 e rota iBGP tem AD 200. O 200 é deliberadamente pior que qualquer IGP: uma rota interna aprendida por iBGP não deve ganhar da rota que o IGP já conhece. A tabela BGP (show ip bgp) não é a tabela de roteamento — só o melhor caminho de cada prefixo é instalado na RIB, marcado com '>'.

Rota que aparece em 'show ip bgp' mas não em 'show ip route' quase sempre tem NEXT_HOP inalcançável ou perdeu a seleção de melhor rota.

Direção do tráfego: quem você controla de verdade

Atributo local (Weight, LOCAL_PREF) decide por onde o SEU tráfego SAI — é controle firme, dentro do seu AS. Para influenciar por onde o tráfego ENTRA você só pode sugerir ao vizinho: AS-path prepend, MED, communities acordadas ou anúncio de prefixo mais específico. A decisão final é sempre do AS remoto.

Regra que evita frustração: saída você manda; entrada você pede.

NEXT_HOP e a armadilha do iBGP

Ao repassar uma rota por eBGP, o roteador põe a si mesmo como NEXT_HOP. Ao repassar por iBGP, ele preserva o NEXT_HOP original — que costuma ser o IP do roteador do OUTRO AS, um endereço que o interior da sua rede não conhece. O par iBGP recebe a rota, não consegue resolver o next hop e não a instala.

Conserto canônico: 'neighbor <ip> next-hop-self' nas sessões iBGP da borda. O sintoma é rota visível no BGP e ausente na tabela de roteamento.

tune Atributos de caminho

O que o BGP compara para decidir. Atributo local manda na saída do seu tráfego; atributo propagado apenas sugere ao vizinho por onde entrar.

Atributo Tipo Escopo Preferência O que faz
WEIGHT Proprietário Cisco (não é atributo BGP padrão) Local ao roteador — nunca é anunciado a ninguém Maior vence Padrão 0 para rota aprendida de vizinho e 32768 para rota originada localmente. É o primeiro critério da seleção, o que o torna o martelo mais pesado — e o mais perigoso, porque só afeta um roteador e some sem aviso quando o tráfego passa por outro.
LOCAL_PREF Bem conhecido, discricionário Propagado a todos os pares iBGP do AS; nunca sai em eBGP Maior vence Padrão 100. É a ferramenta correta para dizer a TODO o seu AS por qual saída preferir o tráfego. Uso clássico multi-homed: 200 no link principal, 100 no de backup.
AS_PATH Bem conhecido, obrigatório Propagado entre AS; cada eBGP prepende o AS local Mais curto vence Acumula a lista de AS atravessados. Serve à decisão e à prevenção de loop: o roteador descarta rota cujo AS_PATH já contenha o próprio ASN. Prepend artificial (repetir o próprio ASN) é a forma mais comum de tornar um caminho menos atraente para quem está de fora.
ORIGIN Bem conhecido, obrigatório Propagado entre AS IGP (i) melhor que EGP (e), melhor que Incomplete (?) Diz como a rota entrou no BGP: 'network' gera i, redistribuição de IGP gera ?. Critério de desempate raramente ajustado à mão, mas explica por que uma rota redistribuída perde de uma anunciada com 'network'.
MED (MULTI_EXIT_DISC) Opcional, não transitivo Anunciado ao AS vizinho; não é repassado adiante por ele Menor vence Sugere ao AS vizinho por qual dos vários enlaces entrar quando existem dois ou mais pontos de interconexão entre os mesmos dois AS. Por padrão o Cisco só compara MED entre caminhos vindos do MESMO AS vizinho — 'bgp always-compare-med' muda isso e precisa ser decisão consciente.
NEXT_HOP Bem conhecido, obrigatório Reescrito no eBGP, preservado no iBGP Não é critério de preferência — é pré-requisito Caminho com next hop inalcançável é descartado antes de qualquer comparação de atributo. É a causa número um de 'a rota está no BGP e não entra na tabela'.
COMMUNITY Opcional, transitivo Propagado se 'neighbor send-community' estiver ligado Não decide sozinho — dispara política Etiqueta de 32 bits no formato ASN:valor usada para pedir tratamento ao vizinho (não exportar, prepend em tal região, blackhole). Comunidades bem conhecidas: NO_EXPORT, NO_ADVERTISE, LOCAL_AS e a BLACKHOLE 65535:666 da RFC 7999.
ORIGINATOR_ID e CLUSTER_LIST Opcional, não transitivo Interno ao AS, criado por route reflector CLUSTER_LIST mais curta vence (critério tardio) Substituem o papel anti-loop do AS_PATH dentro do AS quando há route reflector: o refletor marca quem originou e por quais clusters a rota passou, e descarta o que volta.

stairs Seleção de melhor rota

O roteador desce esta escada e para no primeiro degrau que desempata. Diagnóstico de "o tráfego sai pelo link errado" é percorrer esta lista na ordem, sem pular.

  1. 0
    NEXT_HOP alcançável Descarta o caminho cujo next hop não resolve na tabela de roteamento Pré-requisito, não desempate. Ignorar isto faz perder horas comparando atributos de um caminho que sequer entrou na disputa.
  2. 1
    WEIGHT mais alto Proprietário Cisco, só vale neste roteador Padrão 0; rota originada localmente nasce com 32768.
  3. 2
    LOCAL_PREF mais alto Vale para todo o AS, propagado por iBGP Padrão 100. É aqui que se define a saída preferencial do AS.
  4. 3
    Rota originada localmente network e aggregate ganham de redistribuição Prefere o que este AS anuncia por conta própria.
  5. 4
    AS_PATH mais curto Conta entradas do caminho, não roteadores AS_SET conta como 1 e um bloco confederado não conta. É o degrau que o prepend ataca.
  6. 5
    ORIGIN mais baixo i (IGP) < e (EGP) < ? (Incomplete) Explica a desvantagem silenciosa de rota redistribuída.
  7. 6
    MED mais baixo Só entre caminhos do mesmo AS vizinho, por padrão 'bgp always-compare-med' amplia a comparação e pode gerar decisão instável se os AS usarem escalas diferentes.
  8. 7
    eBGP antes de iBGP Caminho externo prevalece sobre o aprendido dentro do AS Coerente com a AD 20 × 200.
  9. 8
    Menor métrica IGP até o NEXT_HOP Sai pela porta mais perto, medida pelo IGP É o 'hot potato routing': entregar o tráfego ao vizinho o quanto antes.
  10. 9
    Multipath, se habilitado Com 'maximum-paths', instala vários caminhos equivalentes Exige atributos compatíveis até este ponto; 'as-path multipath-relax' afrouxa a exigência de mesmo AS_PATH.
  11. 10
    Caminho eBGP mais antigo Entre dois externos, prefere o recebido primeiro Critério de estabilidade: evita trocar de melhor rota a cada oscilação.
  12. 11
    Menor Router ID do vizinho Desempate determinístico pelo BGP identifier Com route reflector, compara-se antes o ORIGINATOR_ID.
  13. 12
    Menor CLUSTER_LIST Menos refletores atravessados vence Só existe em topologia com route reflector.
  14. 13
    Menor endereço IP do vizinho Último desempate possível Se chegou aqui, os caminhos eram equivalentes em tudo o mais.

cable A sessão: estados, mensagens e temporizadores

Máquina de estados finita

1 Idle

Recusa conexões; espera o evento de início e uma rota para o vizinho.

Preso em Idle: vizinho administrativamente em shutdown, ou não existe rota para o IP configurado.

2 Connect

Aguardando o three-way handshake TCP na porta 179 terminar.

Passagem rápida. Se o TCP falhar, cai para Active e reinicia o ConnectRetry.

3 Active

Tentando abrir o TCP ativamente depois de uma falha.

Oscilar entre Active e Connect é o sintoma clássico de porta 179 bloqueada por ACL/firewall, IP de vizinho errado ou update-source incorreto.

4 OpenSent

OPEN enviado; espera o OPEN do outro lado.

ASN remoto divergente do 'remote-as' configurado gera NOTIFICATION e derruba a sessão aqui.

5 OpenConfirm

OPEN aceito; espera o primeiro KEEPALIVE.

Falha de autenticação MD5 costuma se manifestar entre este estado e o anterior.

6 Established

Sessão de pé; UPDATE, KEEPALIVE e ROUTE-REFRESH podem trafegar.

Established sem prefixo recebido não é sucesso: quase sempre é filtro de entrada ou ausência de 'network' do outro lado.

Mensagens do protocolo

Tipo Cód. Quando Conteúdo
OPEN 1 Primeira mensagem após o TCP subir Versão, ASN local, Hold Time proposto, BGP identifier e capacidades negociadas (multiprotocolo, route refresh, ASN de 32 bits, graceful restart).
UPDATE 2 Sempre que houver mudança de alcançabilidade Prefixos retirados, atributos de caminho e o NLRI anunciado. Uma UPDATE carrega vários prefixos que compartilham os mesmos atributos.
NOTIFICATION 3 Ao detectar erro Código e subcódigo do erro. Sempre encerra a sessão — é a mensagem a procurar no log quando um peer cai sozinho.
KEEPALIVE 4 Periodicamente, a 1/3 do Hold Time Apenas o cabeçalho de 19 bytes. Sua ausência dentro do Hold Time derruba a sessão.
ROUTE-REFRESH 5 Ao mudar política de entrada (RFC 2918) Pede ao vizinho o reenvio das rotas, permitindo reaplicar filtros sem derrubar a sessão nem gastar memória com soft-reconfiguration.

Temporizadores

Timer Padrão Função
Keepalive 60 s (Cisco) Intervalo de envio do KEEPALIVE; convenção é 1/3 do Hold Time.
Hold Time 180 s (Cisco) Tempo sem receber nada do vizinho antes de declarar a sessão morta. Os dois lados negociam o MENOR valor proposto no OPEN; 0 desliga os keepalives.
ConnectRetry 120 s Espera antes de nova tentativa de TCP depois de uma falha.
Advertisement Interval 30 s em eBGP, 0 s em iBGP Agrupa atualizações do mesmo prefixo para não inundar o vizinho a cada oscilação.
BGP Scan / Next-hop tracking 60 s (scan) ou por evento Revalida a alcançabilidade dos next hops. Com next-hop tracking a reação é por evento e a convergência cai de dezenas de segundos para poucos.

account_tree Escalar o iBGP

Full-mesh iBGP

Problema
O split horizon do iBGP obriga cada roteador a falar com todos os outros: n(n-1)/2 sessões. Com 20 roteadores são 190 sessões para manter.
Solução
Aceitável só em AS pequeno. Acima de uma dezena de roteadores, migrar para route reflector.
Atenção
Malha incompleta produz buraco negro silencioso: parte do AS simplesmente não conhece o prefixo.

Route Reflector (RFC 4456)

Problema
Como repassar rotas entre pares iBGP sem violar o split horizon nem criar loop.
Solução
O refletor repassa rotas entre clientes e marca ORIGINATOR_ID e CLUSTER_LIST para detectar retorno. Cliente comum não precisa de configuração especial.
Atenção
O refletor anuncia apenas o SEU melhor caminho — a visão dos clientes fica mais pobre que a de uma malha completa. Redundância exige dois refletores por cluster.

Confederação (RFC 5065)

Problema
AS muito grande, com times ou regiões que precisam de autonomia interna.
Solução
Divide o AS em sub-AS privados que conversam entre si como se fosse eBGP, usando AS_CONFED_SEQUENCE. Do lado de fora, tudo continua sendo um único ASN.
Atenção
Mais complexo de operar que route reflector; hoje é minoria. Blocos confederados não contam no comprimento do AS_PATH.

shield Proteções da borda

BGP nasceu sem autenticação de origem: quem anuncia, é acreditado. Cada item abaixo fecha uma ameaça concreta — vazamento, sequestro, exaustão de memória, oscilação.

Filtro de prefixo nas duas direções

Ameaça Vazamento de rota: reanunciar para a operadora B o que se aprendeu da operadora A transforma sua borda em trânsito e derruba seu link.

Aplicação Negar por padrão e permitir explicitamente. Na saída, anunciar apenas os prefixos próprios; na entrada, recusar bogons, RFC 1918, default e prefixos mais específicos que /24 em IPv4.

ip prefix-list MEUS-BLOCOS seq 5 permit 203.0.113.0/24
router bgp 65001
 neighbor 198.51.100.1 prefix-list MEUS-BLOCOS out

maximum-prefix

Ameaça Vizinho mal configurado despeja a tabela global inteira e estoura a memória do seu roteador.

Aplicação Definir um teto coerente com o que aquele vizinho deveria anunciar, com aviso percentual antes do corte.

router bgp 65001
 neighbor 198.51.100.1 maximum-prefix 500 80 restart 15

RPKI / ROV

Ameaça Hijack: outro AS anuncia o seu prefixo e sequestra o tráfego.

Aplicação Publicar ROA para os seus prefixos e validar na entrada, descartando rotas com estado Invalid. Estado NotFound ainda é maioria e não deve ser descartado sem análise.

router bgp 65001
 bgp rpki server tcp 10.0.0.9 port 3323 refresh 600
 bgp bestpath prefix-validate signal ibgp

Autenticação da sessão (MD5 / TCP-AO) e GTSM

Ameaça Injeção de pacote e reset de sessão TCP por terceiro.

Aplicação Chave na sessão e, para eBGP diretamente conectado, exigir TTL alto na chegada (GTSM, RFC 5082) — pacote forjado de longe chega com TTL baixo e é descartado.

router bgp 65001
 neighbor 198.51.100.1 password 7 <segredo>
 neighbor 198.51.100.1 ttl-security hops 1

Dampening com parcimônia

Ameaça Route flapping consumindo CPU e propagando instabilidade.

Aplicação Penaliza prefixo que oscila. Parâmetros agressivos punem prefixo legítimo por tempo demais — a recomendação atual (RIPE-378) é usar limiares brandos ou não usar.

router bgp 65001
 bgp dampening 15 750 2000 60

Blackhole por community (RFC 7999)

Ameaça Ataque volumétrico saturando o enlace antes do seu equipamento.

Aplicação Anunciar o /32 atacado ao trânsito com a community 65535:666 para que ele descarte o tráfego na rede dele. Descarta o alvo para salvar o resto — é decisão consciente.

route-map BLACKHOLE permit 10
 set community 65535:666
router bgp 65001
 neighbor 198.51.100.1 send-community

science Laboratório Cisco

1. Sessão eBGP entre dois AS

R1 (AS 65001, 198.51.100.1) conectado a R2 (AS 65002, 198.51.100.2). Cada um anuncia o próprio bloco.

R1(config)# router bgp 65001
R1(config-router)# bgp router-id 1.1.1.1
R1(config-router)# neighbor 198.51.100.2 remote-as 65002
R1(config-router)# network 203.0.113.0 mask 255.255.255.0
R1(config-router)# no auto-summary

O 'network' do BGP não liga o protocolo na interface como no OSPF — ele só anuncia um prefixo que JÁ existe na tabela de roteamento, e com a máscara exata. Máscara divergente é o erro mais comum: o prefixo simplesmente não aparece.

2. iBGP e o next-hop-self

R1 é a borda; R3 é interno, no mesmo AS 65001, alcançado por OSPF.

R1(config-router)# neighbor 10.0.0.3 remote-as 65001
R1(config-router)# neighbor 10.0.0.3 update-source Loopback0
R1(config-router)# neighbor 10.0.0.3 next-hop-self

update-source Loopback0 mantém a sessão de pé enquanto qualquer caminho interno existir. next-hop-self reescreve o NEXT_HOP para o próprio R1; sem ele, R3 recebe as rotas com o next hop de R2 (outro AS), não resolve e não instala nada.

3. Escolher a saída (LOCAL_PREF) e pedir a entrada (prepend)

AS 65001 multi-homed: link A é o principal, link B é backup.

route-map PREFERIR-A permit 10
 set local-preference 200
route-map SAIDA-B permit 10
 set as-path prepend 65001 65001 65001
router bgp 65001
 neighbor <A> route-map PREFERIR-A in
 neighbor <B> route-map SAIDA-B out

LOCAL_PREF entra na direção IN e comanda a saída de todo o AS. O prepend vai na direção OUT e apenas torna o caminho B mais longo aos olhos dos outros — quem decide a entrada continua sendo o AS remoto.

4. Fechar a borda antes de subir a sessão

Antes de ativar o vizinho de trânsito, aplicar teto e filtro.

router bgp 65001
 neighbor 198.51.100.2 maximum-prefix 1000 90 warning-only
 neighbor 198.51.100.2 prefix-list MEUS-BLOCOS out
 neighbor 198.51.100.2 soft-reconfiguration inbound

soft-reconfiguration guarda as rotas recebidas antes do filtro e permite ver o que o vizinho realmente mandou — custa memória; onde houver route refresh negociado, prefira 'clear ip bgp <ip> soft in'.

build Troubleshooting

Do sintoma para o comando, e do comando para a leitura da saída — que é a parte que costuma faltar nas tabelas de referência.

Vizinho oscilando entre Active e Idle

Causa provável TCP 179 bloqueado, IP de vizinho errado, update-source ausente ou ASN divergente.

show ip bgp summary
show ip bgp neighbors 198.51.100.2
debug ip bgp events

Leitura Na coluna State/PfxRcd do summary, texto em vez de número significa sessão fora de Established. Em 'neighbors', confira 'remote AS' e 'Local host/Foreign host' — o par de IPs revela update-source errado.

Sessão Established, mas nenhum prefixo recebido

Causa provável Filtro de entrada seu, ou ausência de 'network'/filtro de saída do outro lado.

show ip bgp neighbors 198.51.100.2 received-routes
show ip bgp neighbors 198.51.100.2 routes

Leitura 'received-routes' exige soft-reconfiguration inbound ou route refresh. Se received traz rotas e 'routes' vem vazio, o descarte é seu — o filtro de entrada é o culpado.

Prefixo aparece em 'show ip bgp' e não entra em 'show ip route'

Causa provável NEXT_HOP inalcançável — em geral falta next-hop-self no iBGP.

show ip bgp 203.0.113.0
show ip route <next-hop>

Leitura Sem o '>' antes da linha, o caminho não foi eleito. A marca '(inaccessible)' no next hop fecha o diagnóstico.

O tráfego sai pelo link errado

Causa provável Ordem de seleção: alguém deixou Weight ou LOCAL_PREF ajustado em um roteador só.

show ip bgp 203.0.113.0
show ip bgp neighbors 198.51.100.2 advertised-routes

Leitura Compare os caminhos linha a linha na ordem oficial de decisão. Weight só existe localmente: um valor ajustado em um roteador explica por que a decisão difere entre equipamentos do mesmo AS.

Sessão derrubada sozinha com log %BGP-4-MAXPFX

Causa provável Vizinho anunciou mais prefixos que o teto configurado.

show ip bgp summary
show logging | include BGP

Leitura O teto funcionou — ele existe para proteger a memória. Verifique se o vizinho vazou tabela antes de simplesmente aumentar o limite.

Convergência lenta após queda de enlace

Causa provável Detecção dependendo apenas do Hold Time de 180 s.

show ip bgp neighbors 198.51.100.2 | include hold time
show bfd neighbors

Leitura Hold Time é detecção de último recurso. Para queda em subsegundos, use BFD associado ao vizinho; para o interior, next-hop tracking reage por evento em vez de por varredura.

arrow_back Voltar ao catálogo de protocolos