[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