+ Responder ao Tópico



  1. #1

    Question BGP + Multipath + Load Balance

    Olá a todos do fórum!

    Estou configurando meu roteador para balanceamento de carga dividindo as subredes pelas saídas. Mas estou tendo problemas na hora de configurar. Na verdade eu sou um péssimo técnico quando o assunto se trata de cisco. Sei configurações básicas e afins. Atualmente temos um link com uma operadora em duas localidades distintas. Então utilizamos um router só, com dois links para redundância, mas com o BGP fechado para o mesmo AS. Divulgo as rotas completas pelos dois links. Mas quero dividir as rotas, quero segregar minha rede em dois blocos e assim escolher melhor por onde cada link sai (balancear a carga) e manter uma redundância.

    Segue minha saída um pouco mais detalhada da minha sessão BGP e do meu roteamento (exemplo):

    /
    !
    router bgp 1
    bgp log-neighbor-changes
    bgp bestpath as-path multipath-relax
    network 177.XXX.XXX.0
    network 177.XXX.XXX.0 mask 255.255.252.0
    neighbor 209.XXX.XXX.45 remote-as 2
    neighbor 209.XXX.XXX.45 description LINK 1
    neighbor 209.XXX.XXX.45 soft-reconfiguration inbound
    neighbor 209.XXX.XXX.45 route-map as2in in
    neighbor 209.XXX.XXX.65 remote-as 2
    neighbor 209.XXX.XXX.65 description LINK 2
    neighbor 209.XXX.XXX.65 soft-reconfiguration inbound
    neighbor 209.XXX.XXX.65 route-map as2in in
    maximum-paths 2
    !
    !
    ip route 0.0.0.0 0.0.0.0 209.XXX.XXX.45 250
    ip route 177.XXX.XXX.0 255.255.252.0 Null0
    ip route 177.XXX.XXX.0 255.255.255.0 177.XXX.XXX.10
    ip route 177.XXX.XXX.0 255.255.255.224 Null0
    ip route 177.XXX.1.0 255.255.255.0 177.XXX.XXX.10
    ip route 177.XXX.2.0 255.255.255.0 177.XXX.XXX.12
    ip route 177.XXX.3.0 255.255.255.0 177.XXX.XXX.13
    ip route 209.XXX.XXX.64 255.255.255.252 Null0 250
    !

    Como podemos ver, estou divulgando o bloco inteiro para os dois caminhos e usando um "multipath-relax" para balancear de forma aleatória os links. Mas com isso estamos tendo problemas de loops na rede (sai por um link, volta pelo outro). Gostaria de saber o que podemos fazer nessa configuração para dividir meu bloco /22 em dois /23 para dar preferência, mas mantendo a redundância. Não entendo muito de cisco e estou completamente perdido. Sei que tenho que divulgar o /22 em ambos os links e o /23 em cada link específico. Mas como isso deve ser feito no router?Abraços!

  2. #2

    Padrão Re: BGP + Multipath + Load Balance

    O que você está sofrendo não se chama loop, e sim, assimetria e isso é normal em BGP. O BGP escolhe (caso você não manipule) o melhor caminho de saída, e o de retorno é você quem define na exportação dos seus prefixos. Com certeza você está tendo problemas, pois exportando o mesmo bloco para ambas operadoras, os roteadores na Internet elegem um caminho só (o best path) para fazer a volta. Então, tens mais download em um link do que no outro.
    Para balancear: se seu bloco for um /20, crie no networks além do bloco /20, dois /21. Para exportar, faça um route-map de saída, exportando cada bloco usando prefix-list (lembrando de continuar exportando o /20 pelos dois) para cada upstream diferente. E o upload, pode deixar por conta do bgp, que ele vai analisar qual é o menor as-path para chegar ao caminho. Segue um exemplo:

    router bgp 65000
    bgp router-id xxx.xxx.xxx.xxx
    bgp log-neighbor-changes
    network xxx.xxx.xxx.0/20
    network xxx.xxx.xxx.0/21
    network xxx.xxx.xxx.8/21
    neighbor abc peer-group
    neighbor abc remote-as 65001
    neighbor abc description bgp-abc
    neighbor abc update-source fastethernet 2
    neighbor abc soft-reconfiguration inbound
    neighbor abc route-map abc-in in
    neighbor abc route-map abc-out out
    neighbor def peer-group
    neighbor def remote-as 65002
    neighbor def soft-reconfiguration inbound
    neighbor def route-map def-IN in
    neighbor def route-map def-OUT out
    neighbor def-V6 peer-group
    neighbor def-V6 remote-as 65002
    neighbor yyy.yyy.yyy.yyy peer-group def
    neighbor zzz.zzz.zzz.zzz peer-group abc
    !
    address-family ipv6
    network 2001:db8::/32
    neighbor def-V6 activate
    neighbor def-V6 next-hop-self
    neighbor def-V6 soft-reconfiguration inbound
    neighbor def-V6 route-map def-OUT-V6 out
    neighbor 2001:db8::4 peer-group def-V6
    exit-address-family
    !
    ip prefix-list bloco-inteiro seq 5 permit xxx.xxx.xxx.0/20
    ip prefix-list primeiro-21 seq 5 permit xxx.xxx.xxx.0/21
    ip prefix-list segundo-21 seq 5 permit xxx.xxx.xxx.8/21
    !
    ipv6 prefix-list blocointeiro-OUT-V6 seq 10 permit 2001:db8::/32
    !
    route-map abc-OUT permit 2
    match ip address prefix-list bloco-inteiro
    !
    route-map abc-OUT permit 3
    match ip address prefix-list primeiro-21
    set as-path prepend 65000 65000
    !
    route-map abc-OUT permit 4
    match ip address prefix-list segundo-21
    !
    route-map def-OUT-V6 permit 10
    match ipv6 address prefix-list blocointeiro-OUT-V6
    !
    route-map abc-IN permit 10
    !
    route-map def-IN permit 5
    !
    route-map def-OUT permit 2
    match ip address prefix-list bloco-inteiro
    !
    route-map def-OUT permit 3
    match ip address prefix-list primeiro-21
    !
    route-map def-OUT permit 4
    match ip address prefix-list segundo-21
    set as-path prepend 65000 65000
    !
    line vty
    !

    Está aí, de mãos beijadas, com direito a IPv6. Os blocos que você exportar /21 preferencialmente por um fornecedor, no outro, você coloca o as-path prepend (com o número do seu ASN).

    Qualquer coisa, grita aí. Mas em teoria, é só adaptar ao seu cenário.

  3. #3

    Padrão Re: BGP + Multipath + Load Balance

    Citação Postado originalmente por uesleycorrea Ver Post
    O que você está sofrendo não se chama loop, e sim, assimetria e isso é normal em BGP. O BGP escolhe (caso você não manipule) o melhor caminho de saída, e o de retorno é você quem define na exportação dos seus prefixos. Com certeza você está tendo problemas, pois exportando o mesmo bloco para ambas operadoras, os roteadores na Internet elegem um caminho só (o best path) para fazer a volta. Então, tens mais download em um link do que no outro.
    Para balancear: se seu bloco for um /20, crie no networks além do bloco /20, dois /21. Para exportar, faça um route-map de saída, exportando cada bloco usando prefix-list (lembrando de continuar exportando o /20 pelos dois) para cada upstream diferente. E o upload, pode deixar por conta do bgp, que ele vai analisar qual é o menor as-path para chegar ao caminho. Segue um exemplo:

    router bgp 65000
    bgp router-id xxx.xxx.xxx.xxx
    bgp log-neighbor-changes
    network xxx.xxx.xxx.0/20
    network xxx.xxx.xxx.0/21
    network xxx.xxx.xxx.8/21
    neighbor abc peer-group
    neighbor abc remote-as 65001
    neighbor abc description bgp-abc
    neighbor abc update-source fastethernet 2
    neighbor abc soft-reconfiguration inbound
    neighbor abc route-map abc-in in
    neighbor abc route-map abc-out out
    neighbor def peer-group
    neighbor def remote-as 65002
    neighbor def soft-reconfiguration inbound
    neighbor def route-map def-IN in
    neighbor def route-map def-OUT out
    neighbor def-V6 peer-group
    neighbor def-V6 remote-as 65002
    neighbor yyy.yyy.yyy.yyy peer-group def
    neighbor zzz.zzz.zzz.zzz peer-group abc
    !
    address-family ipv6
    network 2001:db8::/32
    neighbor def-V6 activate
    neighbor def-V6 next-hop-self
    neighbor def-V6 soft-reconfiguration inbound
    neighbor def-V6 route-map def-OUT-V6 out
    neighbor 2001:db8::4 peer-group def-V6
    exit-address-family
    !
    ip prefix-list bloco-inteiro seq 5 permit xxx.xxx.xxx.0/20
    ip prefix-list primeiro-21 seq 5 permit xxx.xxx.xxx.0/21
    ip prefix-list segundo-21 seq 5 permit xxx.xxx.xxx.8/21
    !
    ipv6 prefix-list blocointeiro-OUT-V6 seq 10 permit 2001:db8::/32
    !
    route-map abc-OUT permit 2
    match ip address prefix-list bloco-inteiro
    !
    route-map abc-OUT permit 3
    match ip address prefix-list primeiro-21
    set as-path prepend 65000 65000
    !
    route-map abc-OUT permit 4
    match ip address prefix-list segundo-21
    !
    route-map def-OUT-V6 permit 10
    match ipv6 address prefix-list blocointeiro-OUT-V6
    !
    route-map abc-IN permit 10
    !
    route-map def-IN permit 5
    !
    route-map def-OUT permit 2
    match ip address prefix-list bloco-inteiro
    !
    route-map def-OUT permit 3
    match ip address prefix-list primeiro-21
    !
    route-map def-OUT permit 4
    match ip address prefix-list segundo-21
    set as-path prepend 65000 65000
    !
    line vty
    !

    Está aí, de mãos beijadas, com direito a IPv6. Os blocos que você exportar /21 preferencialmente por um fornecedor, no outro, você coloca o as-path prepend (com o número do seu ASN).

    Qualquer coisa, grita aí. Mas em teoria, é só adaptar ao seu cenário.
    Sensacional, só num entendi o endereço yyy.yyy.yyy.yyy e zzz.zzz.zzz.zzz no peer-group apontando para cada operadora. E o AS prepend funciona mesmo que meu link saia para a mesma operadora por saídas diferentes? A operadora usa o mesmo AS nos dois links, então o prepend funciona independente da operadora ser o mesmo AS ou AS diferente (duas operadoras distintas) né?

    Abraços!

  4. #4

    Padrão Re: BGP + Multipath + Load Balance

    Esses endereços são os endereços de neighbor que as operadoras vão te passar. Provavelmente elas alocarão um /30 para fechar a sessão e cada IP ficará de um lado da sessão. No neighbor da sua configuração, tem que colocar o IP do lado deles.
    O prepend é para que a convergência de rotas seja mais rápida. Todos os roteadores terão na RIB as informações de rotas suas com e sem prepend. Vão preferir a sem, é claro. Porém, caso o circuito sem prepend caia, os routers vão pegar da RIB a rota com prepend e colocar na FIB. E no prepend, tem que colocar o SEU AS.

    Entendeu?

  5. #5

    Question Re: BGP + Multipath + Load Balance

    Fiz tudo isso, perfeito. Dei um reset na BGP, quando subiu fiquei feliz!!!!

    Mas.... Ao consultar os anúncios BGP para os dois links, continuo anunciando a rede inteira para os dois. Lembrando que faço trânsito com somente uma operadora, mas por dois links diferentes (dois links no mesmo AS). Se quiser posto alguma coisa para esclarecer mais...

  6. #6

    Padrão Re: BGP + Multipath + Load Balance

    Ah, entendi. No seu cenário, você tem dois trânsitos com a mesma operadora? Então, pesquise na Internet sobre o atributo MED para o BGP. Você vai precisar dele para priorizar download por blocos. E no caso do UPLOAD, como é na mesma operadora, o BGP vai eleger pela rota mais antiga, já que o AS-PATH é o mesmo, router-id também, etc.. Provavelmente, você somente adicionará o MED nesses route-map de saída que tem. Me manda uma MP que te envio meu SKYPE e te ajudo a resolver isso.

    Att,

  7. #7

    Padrão Re: BGP + Multipath + Load Balance

    Uesley, lhe procurei no Skype e tentei te adicionar. Não consigo mandar MP pois minha categoria de usuário no fórum é baixa =(

    Tentei atribuir os MED's nas métricas dos route-maps, mesmo assim os bonitinhos insistem em aprender meus prefixos inteiros. É de deixar doido. Com duas operadoras isso foi tão mas tão fácil, e estou apanhando com uma operadora só! Aliás, no mikrotik isso é uma baba, mas deixar um mkt de core router é sacanagem, apesar de eu gostar muito de mkt, alguns recursos do cisco são indispensáveis em uma futura expansão.

  8. #8

    Talking Re: BGP + Multipath + Load Balance

    CONSEGUI!!! AHHH MEU DEUS, que alegria hahahah...

    Inicialmente muito obrigado pela ajuda.

    Estava esquecendo de apontar as rotas específicas no "ip routes", sem isso o roteador não propaga as rotas sem que as redes estejam no Null0.

    fiz usando as prefix-list ao invés dos route-maps (route-maps também funcionam), pois assim simplifica meu arquivo de configuração. Acrescentei apenas 3 linhas por prefix-list e ficou mais fácil de alguém entender depois.

    A saída realmente ficou assimétrica, ele escolhe o canal de upstream, mas de certa forma foi até bom, um dos links com maior capacidade de upstream está inteiro para isso. Problemas com aplicativos de banco e conexões seguras por SSL só dão problema se no meio da conexão a rota de saída for alterada, mas o roteador aprendeu na RIB que a saída melhor é por um caminho, creio que ele vai utilizar desse artifício por bastante tempo e isso dê menos problemas em minha rede.

    Agora, em questão de redundância. Usando a rede inteira dos dois lados, acha que seria melhor eu configurar com prepend para as redes menores? eu gostaria de saber qual o tempo de retorno com prepend e qual o tempo de retorno com prefixos divulgados. Ouvi dizer que prepend o tempo de retorno é praticamente 0 (afinal quando num vai por um, vai por outro) e com prefixos anunciados demora o tempo necessário para a tabela bgp reconhecer a falha no caminho (até passar a trabalhar com o bloco inteiro).

    Um forte abraço!