Como faço para impor rotas preferenciais com BGP e Quagga?

3

Eu tenho dois roteadores que estou configurando atualmente e eles vão alimentar minha rede de servidores com um número AS privado fornecido pelo datacenter.

O que eu quero fazer é fornecer uma rota padrão de failover VRRP para servidores na rede e também garantir que o roteamento e a entrada sejam sempre preferidos por um caminho e só ocupem o outro caminho se e somente se o primário preferencial caminho está em baixo. ou seja, uma configuração MASTER / BACKUP.

Já tenho o material do VRRP resolvido. Mas meu conhecimento do BGP é muito básico.

Deixe-me desenhar algumas ilustrações da topologia para torná-lo um pouco mais claro.

ISPA (AS 1)               ISPB (AS 1)
  |                         |
  |                         |
  R1 --- P2P (ethernet) --- R2 (AS65007)
  |                         |
  +------- LAN (ipoib) -----+  

O ISP A & Os roteadores B são os roteadores remotos no mesmo datacenter. Vamos supor que eles têm AS 1. E também eu tenho um AS privado que é 65007

Agora vamos dizer de novo. Eu quero tráfego do AS 1 para sempre me alcançar via R1 e nunca R2, a menos que o caminho R1 para o ISP A esteja offline.

Vamos supor que o ISPA e o R1 possuam 10.1.1.1/30 & 10.1.1.2/30 respectivamente. E suponha que ISPB e R2 tenham 10.1.1.5/30 & 10.1.1.6/30, respectivamente.

Assuma também que o intervalo de rede que desejo anunciar é 192.168.1.0/25.

Minha configuração atual sem roteamento tendencioso funciona atualmente e se parece com isso:

Para R1 (R2 é quase o mesmo).

ip prefix-list Net:Out seq 5 permit 192.168.1.0/25

router bgp 65007
  bgp router-id 10.1.1.2
  redistribute connected route-map Redist:BGP
  neighbor 10.1.1.1 remote-as 558
  neighbor 10.1.1.1 description Net
  neighbor 10.1.1.1 soft-reconfiguration inbound
  neighbor 10.1.1.1 prefix-list Net:Out out

route-map Redist:BGP permit 10
match ip address prefix-list Net:Out

** Que também tem um problema porque o R1 não sabe que pode alcançar o R2 em 10.1.1.6. Não há IBGP. Como faço para corrigir isso no acima? **

Disseram que posso influenciar os dados de várias maneiras. Do meu NOC, disseram que posso usar localpref e prefixar meu AS no roteador de backup.

Se eu entendi bem, seria parecido com o seguinte. Onde R1 config permaneceria o mesmo. Esta é a sintaxe correta para o quagga e isso funcionaria?

ip prefix-list Net:Out seq 5 permit 192.168.1.0/25

router bgp 65007
  bgp router-id 10.1.1.6
  redistribute connected route-map Redist:BGP
  neighbor 10.1.1.5 remote-as 558
  neighbor 10.1.1.5 route-map Net:In in
  neighbor 10.1.1.5 description Net
  neighbor 10.1.1.5 soft-reconfiguration inbound
  neighbor 10.1.1.5 prefix-list Net:Out out

route-map Redist:BGP permit 10
match ip address prefix-list Net:Out
set as-path prepend 65007 65007

route-map Net:In
set local-preference 10

No entanto, quando descrevi meu problema para um conhecido que trabalha na área de redes, ele me disse que ainda há uma boa chance de que os dados ainda virão do lado do R2 do ISP e descrevem outra maneira de fazê-lo. Ele disse que eu também poderia usar o MED se o ISP aceitasse. Ou, alternativamente, porque ambas as linhas vêm do mesmo ISP, ele me disse que o roteamento é muito determinístico e sempre selecionará o caminho mais especializado. Então ele sugeriu no meu roteador R1 primário que eu anunciava duas redes. ou seja, dois / 26's. Isso é correto e funcionaria? Eu deveria combinar os dois métodos?

ip prefix-list Net:Out seq 5 permit 192.168.1.0/26
ip prefix-list Net:Out seq 10 permit 192.168.1.64/26

router bgp 65007
  bgp router-id 10.1.1.2
  redistribute connected route-map Redist:BGP
  neighbor 10.1.1.1 remote-as 558
  neighbor 10.1.1.1 route-map in Net:In
  neighbor 10.1.1.1 description Net
  neighbor 10.1.1.1 soft-reconfiguration inbound
  neighbor 10.1.1.1 prefix-list Net:Out out

route-map Redist:BGP permit 10
match ip address prefix-list Net:Out

Então, o que vocês, especialistas em BGP, sugeririam para mim e como determinar, depois de fazer as mudanças necessárias, que isso está de fato funcionando?

Atualização: o método de sub-rede diretamente acima não funcionou. Eu acho que meu provedor está rejeitando qualquer coisa menor que um 25. Confirmado quando eu tentei em um roteador. show ip bgp não propagou a rota. Talvez eu possa usar o MED? isso seria melhor do que o primeiro método?

    
por Matt 17.04.2015 / 00:14

1 resposta

1

Existem várias maneiras de realizar o que você deseja e, sim, adicionar o seu próprio AS às rotas (prefixos) que você anuncia para o ISP, além de definir um LOCAL_PREF para os que você (irá) anunciar novamente internamente é um bom ponto.

Basicamente, você precisa:

  1. Faça os prefixos (rotas) que você anuncia através do R1 preferido para ISPA ( influenciando o caminho de entrada ).
  2. Faça todos os prefixos recebidos do ISPA em R1 (incluindo a rota padrão - supondo que você não use rotas estáticas) preferidos para a sua rede interna ( influenciando o caminho de saída ). Uma pequena nota aqui: como os hosts finais usam o gateway padrão e não executam o roteamento, cabe ao VRRP direcionar pacotes de hosts finais para R1 , mas de qualquer maneira você pode obter isso mesmo se os pacotes chegarem em R2, R2 encaminhará esses pacotes para R1 em vez de ISPB.

Para o ponto 1, MED, AS prepending, communities, etc. são métricas possíveis (isto é, atributos BGP) para ajustar, mas o que funcionará sem modificação do lado remoto é o PRE mais provável (ex. MED pode Exigir uma declaração como "bgp always-compare-med" no roteador ISP talvez, dependendo da configuração deles.

Para o ponto 2, LOCAL_PREF e WEIGHT podem ser usados (também comunidades e outras técnicas com as quais não nos importamos neste caso). O WEIGHT é de propriedade da Cisco (mas o Quagga o utiliza), e também não está incluído nas atualizações do BGP (localmente significativas), então eu prefiro o LOCAL_PREF (que funciona com o iBGP que você ainda não possui).

Tendo dito isso, para alcançar o netdc.com como você deseja, uma opção é:

#
# R1
#
router bgp 65007
  bgp router-id 10.1.1.2
  network 192.168.1.0/25
  neighbor 10.1.1.1 remote-as 558
  neighbor 10.1.1.1 description Net
  neighbor 10.1.1.1 soft-reconfiguration inbound
  neighbor 10.1.1.1 route-map Net:In in
  neighbor 10.1.1.1 route-map Net:Out out

  neighbor iBGP_peers peer-group
  neighbor iBGP_peers remote-as 65007
  neighbor iBGP_peers password $whatyouwant
  neighbor iBGP_peers update-source $IP  #The interface in the common subnet 192.168.1.0/25, otherwise you need an internal routing protocol (IGP) also
  neighbor iBGP_peers next-hop-self      # Otherwise you need to advertise the p2p network between you and ISP

  neighbor $IP_R2_in_192.168.1.0 peer-group iBGP_peers
  neighbor $IP_R2_in_192.168.1.0 description R2

ip prefix-list local-allocations seq 10 permit 192.168.1.0/25

route-map Net:In
  description allow everything

route-map Net:Out
  description announce allocated routes sourced from our AS only (avoid to become a transit AS)
  match ip address prefix-list local-allocations

#
# R2
#
router bgp 65007
  bgp router-id 10.1.1.6
  network 192.168.1.0/25
  neighbor 10.1.1.5 remote-as 558
  neighbor 10.1.1.5 description Net
  neighbor 10.1.1.5 soft-reconfiguration inbound
  neighbor 10.1.1.5 route-map Net:In_backup in
  neighbor 10.1.1.5 route-map Net:Out_backup out

  neighbor iBGP_peers peer-group
  neighbor iBGP_peers remote-as 65007
  neighbor iBGP_peers password $whatyouwant
  neighbor iBGP_peers update-source $IP  #The interface in the common subnet 192.168.1.0/25, otherwise you need an internal routing protocol (IGP) also
  neighbor iBGP_peers next-hop-self      # Otherwise you need to advertise the p2p network between you and ISP

  neighbor $IP_R1_in_192.168.1.0 peer-group iBGP_peers
  neighbor $IP_R1_in_192.168.1.0 description R1

ip prefix-list local-allocations seq 10 permit 192.168.1.0/25

route-map Net:In_backup
  description iBGP will de-prefer all the prefixes
  set local-preference 10

route-map Net:Out_backup
  description announce allocated routes sourced from our AS only
  match ip address prefix-list local-allocations
  set as-path prepend 65007 65007 65007

Em uma nota lateral, a redistribuição é ruim se você puder evitá-la. Use o comando 'network' para anunciar seu prefixo (no Quagga você não precisa da sub-rede no seu RIB ao contrário da Cisco, melhor ainda que).

    
por 27.08.2015 / 16:49