O par de saída preferido do BGP para o prefixo dado quando nenhum dos meus pares anuncia diretamente o prefixo (ele é tratado pela rota Padrão)

1

Estou conectado a dois pares de BGP; Ambos me dão uma tabela filtrada que inclui um padrão + cerca de 30K de prefixos cada (não uma tabela completa). Para os prefixos que recebo, simplesmente deixo o BGP usar seu algoritmo de comprimento de prefixo para selecionar a melhor rota. Para prefixos que eu não recebo (ie: o "default" se aplica) eu prefiro o BGP peer 1. O problema é que, para um prefixo em particular que eu não recebo do peer BGP (ie: o padrão se aplica), Eu gostaria de favorecer o BGP peer 2, e não o usual par 1. Eu sei que eu poderia facilmente fazer isso usando uma rota estática, mas isso não soa bem, porque se eu adicionar um static rota para o roteador do par 2 e a rota cai, a rota estática "ficava" e eu não seria capaz de empurrar qualquer tráfego para esse prefixo. Se eu puder encontrar um mecanismo BGP para fazer o mesmo, posso preferir uma rota para o BGP ponto 2, mas se essa rota não estiver disponível, a rota para o BGP ponto 1 será usada.

Para manipular minhas rotas de saída, estou usando mapas de rotas que definem a preferência local igual para o tráfego de saída em relação aos prefixos recebidos, de modo que o algoritmo padrão de comprimento de lista de prefixos do BGP seja usado. preferência por tráfego de saída usando a rota "padrão" para o BGP ponto 1.

Infelizmente eu não tenho idéia de como usar um mapa de rotas para fazer isso para o meu prefixo especial, porque nenhum objeto com esse prefixo existe no sistema: no que diz respeito a ambos os pares de BGP, ele é tratado pelo padrão "rota.

Estou usando Quagga para meu roteamento, portanto, o BGP não é o único protocolo disponível. Uma solução do tipo Cisco também poderia ser boa, já que suspeito que estou sem algum conhecimento básico e qualquer empurrão na direção certa me ajudaria a encontrar o meu caminho.

Aqui está o meu arquivo bgpd.conf, editado para remover informações pessoais; Espero que eu não tenha feito isso:

router bgp 12345
 bgp router-id 10.0.0.1
 network 10.0.0.0/24
 redistribute connected
 !
 neighbor 10.0.1.1 remote-as 22222
 neighbor 10.0.1.1 ebgp-multihop 3
 neighbor 10.0.1.1 next-hop-self
 neighbor 10.0.1.1 distribute-list distrib-out out
 neighbor 10.0.1.1 route-map INBGP1 in
 !
 neighbor 10.0.2.1 remote-as 11111
 neighbor 10.0.2.1 ebgp-multihop 10
 neighbor 10.0.2.1 next-hop-self
 neighbor 10.0.2.1 distribute-list distrib-out out
 neighbor 10.0.2.1 route-map INBGP2 in
!
access-list distrib-out permit 10.0.0.0/24
!
access-list is-default permit 0.0.0.0/0 exact-match
!
route-map INBGP2 permit 10
 set metric 2
 set ip next-hop 89.121.231.73
 on-match next
!
route-map INBGP2 permit 20
 match ip address is-default
 set local-preference 101
 on-match goto 1000
!
route-map INRTC permit 30
 set local-preference 110
 set metric 1
!
route-map INBGP2 permit 10
 set metric 1
 on-match next
!
route-map INBGP1 permit 20
 match ip address is-default
 set local-preference 200
 on-match goto 1000
!
route-map INBGP1 permit 30
 set local-preference 110
 set metric 1
    
por Cosmin Prund 11.01.2012 / 07:36

2 respostas

3

Adicione uma rota estática com um próximo salto que vá para o ponto 2 somente por causa de uma rota para o ponto 2. Dessa forma, contanto que você esteja recebendo essa rota, a rota estática apontará para o ponto 2. Mas no segundo você perder esse caminho, o seu failover existente vai virar isso.

Escolha qualquer rota que vá para o ponto 2, mas isso desaparecerá se você não conseguir alcançar o ponto 2. Em seguida, adicione uma rota estática para o tráfego que deseja cobrir com um próximo salto coberto pela rota você escolheu. Isso fará com que o tráfego que corresponde à segunda rota rastreie a primeira rota.

Por exemplo, diga que o prefixo para o qual você deseja controlar o tráfego é 216.152.32.0/24 . Você cria uma rota estática para 216.152.32.0/24 e escolhe seu próximo salto. Como é uma rota estática, o tráfego para 216.152.32.0/24 será roteado para o próximo salto (supondo que não haja rota mais específica, o que não ocorrerá). Isso reduz o problema de escolher um próximo salto apropriado.

Você quer que o tráfego siga um caminho quando o link para o ponto 2 está ativo e o contrário quando esse link não está funcionando. Então você precisa escolher um próximo salto que tenha essa propriedade. Em princípio, qualquer IP dentro de uma rota recebida dinamicamente do ponto 2 funcionará. Esse tráfego irá para o ponto 2 quando você tiver essa rota e seguirá seu padrão para o ponto 1 quando você não tiver. (Assumindo que seu padrão está configurado corretamente para failover).

Idealmente, escolha uma rota que seja "core" para o ponto 2, mas não muito próxima do ponto de conexão. Você quer que seja "core" para o peer 2 porque você não quer que ele passe para o peer 1 nunca. Você não quer muito perto de você, porque se o seu nó ficar isolado, você quer fazer failover no par 2. Se você fizer um traceroute em alguns sites aleatórios, poderá encontrar um roteador central em uma cidade próxima , no seu backbone. Isso vai fazer.

    
por 11.01.2012 / 08:12
0

Existe uma solução direta para o seu problema que não envolve rotas estáticas. Antes de me aprofundar nisso, quero abordar um aspecto semântico em sua descrição. A regra de correspondência de prefixo mais longa não tem nada a ver com o BGP. Você deve estar pensando sobre o algoritmo de seleção de caminho do BGP. Todo fornecedor tem seus próprios ajustes nesse algoritmo; no entanto, a maioria é muito semelhante ao algoritmo da Cisco.

Você tem controle total sobre o tráfego na direção do seu site para o ISP. Você pode usar a preferência local ou os Multi-Exit Discriminators (MED) para influenciar o roteamento nessa direção. Eu recomendo usar um ou outro para simplificar. Implemente esta política em prefixos que o ISP envia para você (ou seja, sua política de entrada).

1) Preferência local - A preferência local mais alta é a preferida (a preferência local padrão é 100). A preferência local é anterior na solução de melhor caminho do BGP e é avaliada antes de AS_LENGTH. Seu provedor não pode enviar prefixos com preferência local; a preferência local não ultrapassa os limites do AS.

2) MED - O menor MED é o preferido. Seu provedor pode enviar os MEDs em seus prefixos. Nos roteadores Cisco, nenhum MED é tratado como MED = 0, a menos que você ative bpp bestpath med missing-as-worst . Os MEDs são avaliados após o AS_LENGTH no algoritmo de seleção de caminho do BGP.

Você pode querer ler os estudos de caso do BGP da Cisco . Também recomendo o livro Arquiteturas de roteamento da Internet de Sam Halabi para obter informações detalhadas sobre o BGP e seu uso.

    
por 12.01.2012 / 00:02