[GTER] BGP: Ajuda com filtro de prefixo por origem básico (nem tanto) no Quagga
Emerson Barea
emerson.barea at gmail.com
Sat Aug 14 15:42:06 -03 2021
Pessoal, obrigado a todos pelo feedback. FUNCIONOU !!!
Motivo de não funcionar antes: eu estava fazendo uma configuração que o
Quagga não suporta. Na verdade gostaria de saber de vocês se eu fiz uma
configuração sabidamente não suportada pelo Quagga (não encontrei
informação sobre isso), se errei no conceito, se é bug do Quagga (versão
1.4.2) ou outra limitação qualquer.
A maioria das sugestões (Fabiano, Evandro, Edinilson e Danton) seguiam na
linha de usar "route-map" com "as-path" e "ip prefix-list". Essa era a
abordagem que eu estava usando desde o início, a não ser pelo fato de que
eu estava usando "access-list" (IP zebra access-list) e não "ip
prefix-list". Isso fez toda diferença no final. O Rubens até sugeriu usar
"goto" no route-map, mas na abordagem que eu estava usando também não
resolveu.
Vejam um exemplo do que eu estava fazendo e o problema que isso gerou:
Configuração do AS 65001:
# permitir apenas o prefix 30.0.0.0/24 e bloquear qualquer outro prefixo
*access-list AL permit 30.0.0.0/24 <http://30.0.0.0/24>
exact-matchaccess-list AL deny any*
# permitir que apenas paths que tenham o AS 65003 como origem
*ip as-path access-list AP permit _65003$ip as-path access-list AP deny .**
# incluindo o as-path e access-list no route-map (deve fazer match nas duas
rules para aceitar o anúncio BGP)
*route-map RM permit 1match ip address ALmatch as-path AP*
# configurando o route-map no "in" com o peer
*router bgp 65001neighbor 1.0.2.165 route-map RM in*
Até aí tudo bem, isso funciona, porém no meu ambiente eu reconfiguro as
ACLs em tempo de execução, incluindo e excluindo novos prefixos com
"permit" conforme a rede vai mudando. Para isso, eu estava fazendo assim:
*no access-list AL deny any* # tirando
a regra de cleanup da ACL
*access-list AL permit 20.0.0.0/24 <http://20.0.0.0/24> exact-match*
# incluindo o novo prefixo permitido
*access-list AL deny any* #
forçando o cleanup novamente
E imaginava que este procedimento mudaria minha ACL disso:
*access-list AL permit 30.0.0.0/24 <http://30.0.0.0/24>
exact-matchaccess-list AL deny any*
para isso:
*access-list AL permit 30.0.0.0/24 <http://30.0.0.0/24>
exact-matchaccess-list AL permit 20.0.0.0/24 <http://20.0.0.0/24>
exact-matchaccess-list AL deny any*
O que eu queria era só excluir a regra de cleanup, incluir o novo prefixo
com permit e fechar com cleanup novamente.
Porém, para minha surpresa o Quagga não suportou esse procedimento. Até
lembrei de quando trabalhava com Cisco quase 20 anos atrás, em que não era
possível editar standard ACLs... você tinha que apagar a ACL e criar ela
inteira novamente (não sei se isso mudou).
Ao executar o comando "no access-list AL deny any", apesar de eu ter
informado uma linha específica daquela ACL, ele entendeu como se eu
estivesse apagando a ACL inteira. Não imaginei que o Quagga faria isso, já
que estou trabalhando com IP Zebra access-list, e não standard access-list.
O pior é que ele mantém as linhas da ACL na configuração (a ACL aparece no
"show run"), mas o router passa a não enxergar mais esta configuração como
válida (a ACL não aparece no comando "show ip access-list"). Resumindo, a
config está lá, mas o Quagga desconsidera. Pior ainda é que ela fica com um
identificador "(null)" e você nem consegue mais apagar a ACL da config.
A partir desse problema o route-map fica bagunçado, pois ele tem a
configuração de match na ACL, mas a ACL não existe no router, então o
comportamento do filtro muda completamente.
Resumindo, para resolver minha necessidade, segui fielmente a sugestão de
vocês e estou usando ip prefix-list (ele suporta edição). Exemplo:
Configuração do AS 65001:
# permitir apenas o prefix 30.0.0.0/24 e bloquear qualquer outro prefixo
*ip prefix-list PL permit 30.0.0.0/24 <http://30.0.0.0/24>ip prefix-list PL
deny any*
# permitir que apenas paths que tenham o AS 65003 como origem
*ip as-path access-list AP permit _65003$ip as-path access-list AP deny .**
# incluindo o as-path e access-list no route-map (deve fazer match nas duas
condições para aceitar o anúncio BGP)
*route-map RM permit 1match ip address prefix-list PLmatch as-path AP*
# configurando o route-map no "in" com o peer
*router bgp 65001neighbor 1.0.2.165 route-map RM in*
Assim consigo editar normalmente o ip prefix-list do meu filtro para
incluir novos prefixos no permit da seguinte forma:
*no ip prefix-list PL deny any # tirando a regra de cleanup do
prefix-listip prefix-list PL permit 20.0.0.0/24 <http://20.0.0.0/24> #
incluindo o novo prefixo permitidoip prefix-list PL deny any # forçando o
cleanup novamente*
Obrigado a todos pela ajuda.
Emerson
Em qui., 12 de ago. de 2021 às 09:22, Edinilson J. Santos <
edinilson at atinet.com.br> escreveu:
> Experimente:
>
>
> neighbor IP-DO-SEU-NEIGHBOR route-map valida_path_in in
>
>
> ip as-path access-list VALIDAPATH permit _65001_ _65002_ _65003_
> ip as-path access-list VALIDAPATH deny .*
> ip prefix-list MEUPREFIXO seq 5 permit 200.200.200.0/24
>
> route-map valida_path_in permit 5
> description VERIFICA PATH CORRETO
> match as-path VALIDAPATH
> match ip address prefix-list MEUPREFIXO
>
> Obs: Os números das regras e route-maps são exemplos, precisa ajustar para
> o seu ambiente aí
>
> Edinilson
>
> Em 11/08/2021 22:42, Fabiano Roberto Linhares escreveu:
> > Opa boa noite.
> >
> > Tentou algo do tipo ?
> >
> > ip as-path access-list 1 permit 65001 65002 65003
> > ip prefix-list FILTRO seq 5 permit 200.200.200.0/24
> >
> > route-map FILTRA deny 5
> > match ip address prefix-list FILTRO
> > match as-path 1
> >
> >
> > []´s
> >
> > Fabiano
> >
> >
> > Em qua., 11 de ago. de 2021 às 22:26, Emerson Barea <
> emerson.barea at gmail.com>
> > escreveu:
> >
> >> Olá pessoal, boa noite.
> >>
> >> O que posso fazer para que meu router BGP verifique e valide se o path
> de
> >> um prefixo é o esperado? É como se eu recebesse o anúncio do prefixo
> >> 200.200.200.0/24 e só aceitasse ele se o path for 65001 -- 65002 --
> 65003.
> >> Qualquer outro path para esse prefixo deve ser considerado como anúncio
> >> inválido e desconsiderado.
> >>
> >> O router é um Quagga e não posso usar BGP Origin Validation. Só posso
> usar
> >> route maps, distribute filters, AS Path filter, prefix filter e ACLs.
> >>
> >> Não consigo imaginar uma forma de fazer isso, pois preciso juntar a
> >> verificação de prefixo e as-path na mesma rule. Alguém pode me dar uma
> >> dica?
> >>
> >> Emerson
> >> --
> >> gter list https://eng.registro.br/mailman/listinfo/gter
> >>
> >
>
> --
> gter list https://eng.registro.br/mailman/listinfo/gter
>
More information about the gter
mailing list