[GTER] BGP - Balanceando Saida seletivamente.

Patrick Tracanelli eksffa at freebsdbrasil.com.br
Wed Feb 20 13:09:20 -03 2008


>>> Pessoal, eu consigo fazer o tráfego outbound destinado ao AS 4230 sair
>>> perfeitamente por onde eu quiser, definindo localpref, por exemplo
>>> saindo pelo AS17379 que é uma pequena parte do meu ambiente.
>>>
>>> Porém, eu preciso fazer um balanceamento proporcional desse tráfego outbound.
>>>
>>> Preciso que 40% do tráfego saindo para o 4230 saia pelo 1881 enquanto
>>> os outros 60% saindo para o 4230 saia pelo 17379.
>>>
>>> Já tentei com weight, tentei com med, tentei com localpref, mas não
>>> consigo. Simplesmente eu apenas modifico itens na tabela de decisão de
>>> roteamento mas não balanceio nada.
>> Estranho pois pelo número de prefixo (~90) e a uniformidade dos
>> tamanhos, com origem no ASN deles é relativamente simples você alterar
>> o localpref para uma divisão de interesse de trafego seu que lhe de os
>> 40/60 ou próximo disto.
> 
> Certo, realmente, são apenas 88 prefixos. Então eu não tenho mesmo
> nenhum recurso em que possa balancear apenas os prefixos, terei mesmo
> que fazer uma politica manual e ir alterando os localpref?
> 
> Acabei de migrar esse ambiente pra openbgp, o que pelo menos
> facilitará não ter que ficar fazendo route-map. O heuristico nisso é
> que alguns prefixos são responsaveis por um consumo muito superior que
> os outros. Eu estava com medo dessa confirmação, não haver um recurso
> a não ser manualmente.

Se seu ambiente é com OpenBGP é outra conversa. Se você garantir que 
toda a tabela de decisão de empate, ele faz round-robin. Porém, por 
padrão ele tem recursos pra garantir que sempre haja um "winner" e evite 
o empate. Evite as decisões de desempate configurando:

rde med strict
rde route-age ignore

Voce pode definir isso em um peering group ou dentro de um bloco 
neighbor se não quiser global. Faça filtros então pra garantir os mesmos 
localpref, mesma med, e mesmo weight pra ambos os fluxos, por exemplo

match from any { source-as 4230, transit-as 18881 } set localpref 500
match from any { source-as 4230, transit-as XXXXX } set localpref 500

match from any { source-as 4230, transit-as 18881 } set med 500
match from any { source-as 4230, transit-as XXXXX } set med 500

match from any { source-as 4230, transit-as 18881 } set weight 500
match from any { source-as 4230, transit-as XXXXX } set weight 500

De um `bgpctl reload` e confira a tabela RIB `bgpctl sh rib` se de fato 
os prefixos do AS4230 estão com peso, med e pref exatamente iguais. 
Estando, voce tem um comportamento round-robin.

Porem, pelo que eu li voce quer algo diferente, quer ratio seletivo. Eu 
tenho exatamente esse ambiente balanceando alguns AS para 3 outbounds de 
saida, balanceamento desproporcional. Vou resumir o conceito basico.

O OpenBGP tem um recurso chamado rtlabel, que permite que com as regras 
de filtro voce classifique e adicione um label de roteamento da forma 
como quiser, por prefix, por AS, por fluxo em transito, etc. Tem tambem 
pftable que permite que o OpenBGP gerencia a tabela RADIX do pf com o 
nome q vc escolher adicionando nela todos os prefix que der match na sua 
regra. O label é em kernel e a tabela é uma tabela comum do pf. Voce 
pode ter qualquer uma das 2 abordagens, a ideia geral se aplica a ambas.

- Cria uma regra que de match no fluxo do AS que voce quer, exemplo:

match from any { source-as 4230 } set rtlabel "AS4230"

Pronto, agora seu kernel reconhece todos os prefix do 4230.

Agora no pf voce vai criar policy-routing proporcional ao que voce 
deseja, por exemplo, assumindo o ambiente q vc mencionou com 2 
operadoras e 60% pra primeira e 40% pra segunda:

pass out route-to ($if_peer1 $gw_peer1) from any to route "AS4230" keep 
state probability 60%

pass out route-to ($if_peer2 $gw_peer2) from any to route "AS4230" keep 
state

Se preferir use pftable ao inves de rtlabel e na regra use "<AS4230>" ao 
inves de "route AS4230". O comportamento sera exatamente o mesmo.

Não sucumba à tentacao de por "probability 40%" na segunda regra. Senao 
ela pegara 40% do que sobrar da regra anterior, que pegou 60%. E voce 
quer todos os 40% restantes para a operadora 2, não uma parte dele.

Se não me engano você pode fazer algo equivalente com Juniper tambem. Já 
Cisco eu não sei. Boa sorte, mas não se preocupe, é bem simples, OpenBGP 
é bem poderoso.

-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 at sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"




More information about the gter mailing list