[FUG-BR] RES: Quagga + PBR + FreeBSD

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Quarta Novembro 19 10:36:11 BRST 2008


Renato Frederick escreveu:
> Patrick,
> 
> Muito estranho,
> 
> Se no meu firewall eu tenho 2 sessões BGP e faço por ex:
> 
> #ipfw add 1 fwd ISP2 all from IP_INTERNO to any

Muito estranho. Em um dos ambientes que faço PBR o ambiente é exatamente 
igual. Mas faço na interface de entrada, o ambiente ta assim

em0 = gw do cliente (Interna)
em1 = EBT
em2 = Intelig

Faço com pf-route-to mas acabei de testar com ipfw, com balanceamento:

01000  3503343728 3411906585417 prob 0.400000 fwd $gw_ebt ip from { 
$rede1 or $rede2 } to not $rede1,$rede2 in via em0
01100  5255091455 5117945807373 fwd $gw_gvt ip from { $rede1 or $rede2 } 
to not $rede1,$rede2 in via em0

E também PBR:

01500      866602      57539533 fwd $gw_ebt ip from $rede3 to not $rede3 
in via em0

O unico detalhe é que faço a alteração do próximo salto na entrada.

Fiz isso pra testar, na verdade o que uso é:

pf.conf:
pass in on $ifi route-to { ($ifebt $gwebt), ($ifgvt $gwgvt) } 
round-robin from any to route <4230t18881> keep state

Sendo um router o 'keep state' é dispensável se quiser fazer PBB por 
pacote; resolvi fazer por sessão.

bgpd.conf:
match from any { source-as 4230, transit-as 18881 } set localpref +200
match from any { source-as 4230, transit-as 18881 } set rtlabel 
"4230t18881"

Funciona que é uma beleza =)


> Quero algo parecido que você, na verdade, o tráfego de entrada já coloquei
> prepends para forçar a voltar por um ISP. Agora o tráfego de saída irei
> forçar conforme a origem.
> 
> Por exemplo.
> 
> Rede 100.100.0.0/21 sair ISP1
> Rede 100.100.8.0/21 sair ISP2
> 
> A volta já está OK.
> 
> 
> No cisco eu faria um PBR na interface LAN e ele ainda, caso o gateway do
> ISP2 estivesse down, faria o tráfego sair pelo ISP1. Com o IPFW também acho
> que isto não vai funcionar, se o ISP2 cair ele vai continuar mandando o FWD
> para lá...

Vai sim, com ipfw você vai precisar dar um "set disable" na regra quando 
detectar que o peer está down. Facil de qualquer forma, 1 linha no cron. 
Com pf e rtlabel isso ja funciona sozinho, as sessoes sao removidas 
quando a rota com o label deixa de existir, e ai match do openbgp não 
bate mais com nenhuma rota pois se não tem o peer, não tem rota q 
coincida com a regra.

> o route get mostra a rota que o zebra entregou...

Deveria funcionar, na minha cabeça não faz sentido não funcionar pq 
tanto bgpd do quagga quanto do openbgp fazem inclusive as mesmas 
syscalls pra manipular a tabela de rotas.

-- 
Patrick Tracanelli

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



Mais detalhes sobre a lista de discussão freebsd