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!
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.
Re: BGP + Multipath + Load Balance
Citação:
Postado originalmente por
uesleycorrea
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!
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?
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...
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,