[FUG-BR] PFSENSE e BGP e TABLES e PF

Renato Frederick renato em frederick.eti.br
Terça Julho 17 06:56:32 BRT 2012


Pessoal, bom dia!

Desculpem o cross-posting, mas a PFSENSE-PT e FUG é lugar de gente fera 
neste assunto e meu email faz referência a ambos.

Vamos lá, já peço perdão pelo email grande!

No FREEBSD/OPENBSD, com OPENBGPD e PF, eu posso fazer isto:

1 - criar uma table no PF, por exemplo: table <ctbc> persist

2 - lá no openbgpd.conf, eu entrego todas as redes aprendidas da sessão 
BGP desta operadora para a table criada, por exemplo:

match from 189.x.x.x set pftable ctbc #onde 189.x.x.x é o peer BGP

3 - por fim, lá no pf.conf, eu posso fazer um PBR de saída, forçando, 
por exemplo, que toda a rede 200.1.1.0/24 saia pela ctbc, mesmo que um 
outro peer BGP(por exemplo, um PTT), entregue uma rota mais específica:

pass out quick route-to ($ctbc_if $ctbc_gw) from200.1.1.0/24 to <ctbc> 
keep state

Porque eu faço este processo todo e não faço simplesmente um:

pass out quick route-to ($ctbc_if $ctbc_gw) from200.1.1.0/24 to any keep 
state

Para garantir que quando o link com a ctbc cair(e obviamente a sessão 
bgp parar), a table ctbc vai ficar vazia e a rede 200.1.1.0/24 vai sair 
ou pela rota padrão(que vai usar outra operadora), ou por outra sessão 
BGP(que vai ter as rotas injetadas no kernel). Também garante que se por 
algum motivo a ctbc não enviar todo o fullrouting(por problemas do tipo 
rompimento de fibra internacional, etc), estas redes que não forem 
aprendidas serão enxergadas por alguma outra operadora.

Se eu usasse a segunda sintaxe (to any), o PBR ficaria estático.

Dei exemplo aqui de CTBC mas isto é aplicado a qq BGP.

Porque em alguns casos eu faço isto e não deixo que o BGP faça o papel 
dele de achar a rota mais curta para um destino?
Porque muitas vezes, eu tenho um cenário de links de backup 
assimétricos, por exemplo:

CTBC 300Mb
GVT 100Mb

e eu poderia ocorrer em uma situação de usar 90% GVT e só 30% CTBC. 
Então analiso a rede com netflow e as origens com maior tráfego são 
forçadas para a CTBC, por exemplo. É o feijão com arroz de qq ISP.

Isto funciona muito bem e a gora vem a questão: A ideia é usar isto 
também no PFSENSE, sabem como é, a interface gráfica é algo muito útil. 
Porém me deparei com algumas dúvidas e não tenho como testar isto em 
laboratório:

No pfsense, o que a interface gráfica chama de "aliases de firewall" são 
tables <table1> ou aliases mesmo $alias1?

Para replicar o cenário que eu tenho hoje, pensei em configurar o 
bgpd.conf pela interface web, deixaria ele gerar um bgpd.conf "padrão" e 
depois, ativaria a opção de editar o bgpd.conf manualmente pela 
interface WEB e colocaria a linha "match"? Notei que ao fazer isto ele 
avisa que as alterações via WEB não serão usadas mais até eu apagar o 
que eu fiz manualmente. o que acham?

Outra coisa, notei que no pfsense, as table do pf criada não são 
"persist". Assim, se o "alias de firewall" está vazio, não é criada a 
table, certo? Qual seria um truque, criar o alias e lá digitar um IP 
qualquer tipo 1.1.1.1, prá ela sempre ser criada(lembrando que esta 
table o bgp que vai popular)
O que eu notei é que quando a table não tem nenhum IP, o PF não a cria, 
daí o openbgpd não preenche ela(claro, ela não existe) e só volta a 
preencher se eu matar e voltar o bgpd(nem um rbgpctl eload resolve).

Por fim, a última dúvida: ao aplicar as alterações feitas na regra de 
firewall via web, o que o PF vai fazer com esta table, zerar ela e 
preencher com o que tem nos aliases, sobrescrevendo o que o bgpd populou?

o problema todo, que me leva a fazer isto é que muitas vezes, meu 
gateway que fecha a sessão com a operadora está UP(então não posso usar 
os TIERS do PFSENSE em roundroubin/redundância), ou pior, até a sessão 
BGP estar UP, mas com 0 rotas recebidas. E aí o PBR de saída não vai 
chegar a lugar nenhum, eu teria que ter um técnico 24h alterando o 
route-to, hehe

Como eu falei, o PBR de saída eu uso para fazer um uso mais racional de 
links de tamanhos diferentes(para o tráfego de volta eu tento fazer uma 
otimização divulgando redes específicas, usando no-export e famigerados 
prepends e por aí vai).
Este PBR também pode ser usado para estratégias do tipo operadoras com 
SLA maior serão usadsa para clientes comerciais, etc, etc

Obrigado e desculpem o email gigante novamente!



Mais detalhes sobre a lista de discussão freebsd