segunda-feira, 28 de junho de 2010

MULTICAST - MSDP com MBGP


1.1           MBGP

O MBGP permite distinguir quais prefixos de rotas serão usados para a verificação do RPF multicast. A verificação do RPF é um mecanismo fundamental que o roteador utilize para determiner os caminhos da árvore multicast para entregar os pacotes multicasts da origem para os seus destinos.
O MBGP foi escrito na RFC 2283 e é uma extensão Multiprotocol do BGP-4. Como ele é estruturado em cima do BGP, ele possui os recursos que o BGP possui para ambientes entre AS, como ferramentas de filtros, route-maps, etc..
Dois atributos de Path, MP_REACH_NLRI e MP_UNREACH_NLRI, são introduzidos no BGP4. Esses novos atributos cria um jeito simples de carregar dois tipos de informação de roteamento – uma de unicast  e outra para multicast.


2        Cenário

2.1           Objetivo

Seis roteadores (R1, R2, R3, R4, R5 e R6) são conectados fisicamente R1-R2-R3-R4-R5-R6 e deverá ser implementado um serviço de multicast utilizando os critérios abaixo:
         A rede é dividida em 2 AS onde os roteadores R1, R2 e R3 fazem parte do AS 123 e os roteadores R4, R5 e R6 do AS 456.
         O roteamento IGP entre R1, R2 e R3 deverá ser o OSPF na área 0 em todas as interfaces;
         O roteamento IGP entre R4, R5 e R6 deverá ser o ISIS level-2 em todas as interfaces;
         Deve existir uma conexão iBGP e iMBGP multicast entre R1 e R2 e entre R2 e R3. O R2 deve ser o Router Reflector para iBGP e MBGP.
         Deve existir uma conexão iBGP e iMBGP multicast entre R4 e R5 e entre R5 e R6. O R5 deve ser o Router Reflector para iBGP e MBGP.
         Deve existir um eBGP e eMBGP entre R3 e R4 com filtro de redistristribuição de loopbacks:
·         O R3 deve redistribuir as loopbacks do R1 e do R2;
·         O R4 deve redistribuir as loopbacks do R5 e do R6.
         O R2 deverá ser RP estático para o R1 e R3 e o R5 deverá ser RP estático para o R4 e R6;
         Deverá existir uma conexão MSDP entre o R2 e o R5 pelo IP de loopback para troca de source e grupo de multicast utilizando filtro para os grupos 239.1.1.1 e 239.6.6.6;
         O R1 é fonte do grupo 239.1.1.1 e receptor do grupo 239.6.6.6;
         O R6 é fonte do grupo 239.6.6.6 e receptor do grupo 239.1.1.1 e 239.4.4.4;
         A conectividade com os hosts deverá ser IGMPv2;
         Nos roteadores R3 e R4 deverá existir um filtro de proteção de borda para multicast bloqueando os grupos multicasts do Auto-RP e SSM.

2.2           Topologia

Figure-01:              Topologia

2.3           IOS utilizados

         R1, R2, R3, R4, R5 E R6 – c7200-k91p-mz.122-25.S15.bin

2.4           Configuração dos Roteadores

2.4.1      Configurações do OSPF

Para o OSPF a configuração é feita pelo comando “router ospf ” onde o “processo” é um numero do processo OSPF. Para adicionar interfaces usa-se o comando “network
area ”. Para o roteador fazer vizinhança OSPF é necessário que a rede da interface esteja no comando “network” e a interface não esteja configurada como “passive-interface”.
As interfaces de borda dos roteadores de borda são configuradas como “passive-interface” dentro das configurações de roteamento.

2.4.2      Configurações do PIM

Antes de configurar o PIM é necessário configurar o roteamento multicast no roteador com o comando “ip multicast-routing”. No PIM a configuração de RP estática é feita com o comando “ip pim rp-address
”.
A configuração da conexão MSDP é feita entre os RPs com o comando “ip msdp peer . Pode ser configurada a interface loopback para fechar a conexão MSDP, basta configura-la como source. O comando “ip msdp cache-sa-state” mantém em cache os grupos e fontes conhecidas.
Configura-se o comando “ip msdp rpf rfc3618” para utilizar os recursos da RFC 3618 do MSDP.
Para configurar um filtro de AS no MSDP usa-se o comando “ip msdp sa-filter in|out list a ACL tem que ser extendida. Existem recomendações da Cisco para o uso do filtro de AS que são descritas em documentação.
A Cisco recomenda o uso de filtros multicast nos limites do backbone com o comando “ip multicast boundary , onde a ACL devem ser os grupos multicasts de Auto-RP (224.0.1.39 e 224.0.1.40) e o bloco do SSM 232.0.0.0/24.

2.4.3      Configurações do BGP

No BGP configura-se em todos os roteadores pelo comando “router bgp onde o “AS” é o Autonomous System do backbone. Dentro da configuração de BGP adicionam-se os vizinhos estaticamente com o comando “neighbor remote-as , onde se o for igual ao AS do roteador a conexão é IBGP, se for diferente será EBGP.
Para ser feita a conexão BGP na loopback, configura-se a origem com as loopback na conexão BGP com o comando “neighbor update-source loopback0”.
Adiciona-se o IP da interface loopback como Router-ID pelo comando “bgp router-id . Para divulgar rede no BGP é necessário que a rede exista na tabela de roteamento interna e ou adicionar o comando “network mask ou redistribuindo rotas para o BGP com o comando “redistribute , que pode ser vinculado à um route-map para definir exatamente as rotas que serão divulgadas de um protocolo para o BGP.
Os roteadores dentro do mesmo AS não divulgarão as rotas IBGP entre eles, pois o BGP só divulga para um vizinho as rotas aprendidas por EBGP, ou seja, rotas externas. Para isso, ou faz-se o full-mesh de conexão BGP ou configuram-se os roteadores centrais como Router-reflectors adicionando os demais roteadores como clientes pelo comando “neighbor router-reflector-client”.
Como o BGP usa o IGP (OSPF, ISIS, etc.) para conhecer o IP do next-hop, para rotas externas pode ser que um roteador interno não conheça o IP de destino, então usa-se o comando “neighbor next-hop-self” para informar que o roteador será responsável de encaminhar o pacote ao destino.

2.4.4      Configurações do Multiprotocol BGP

O MBGP é configurado dentro do protocolo BGP, porém deve-se separar a família de roteamento com o comando “address-family ipv4 multicast”. Após isso, os vizinhos unicast ficam separados dos vizinhos multicast. Para que um vizinho seja multicast, ativa-se-o dentro da família multicast com o comando “neighbor active”.
Todos os recursos como route-map, next-hop-self, router-reflector, etc. podem ser configurados dentro da família multicast para manipular ou resolver problemas de roteamento.

2.4.5      Configurações do IGMP

Nesse exemplo é pode-se utilizar o comando “ip igmp join-group ” para enviar uma solicitação de join no grupo multicast.

2.5           Observações e Bugs

O roteamento MBGP é utilizado na RPF conforme pode ser visto no comando “show ip bgp ipv4 multicast”. Note a necessidade da divulgação das loopbacks do R2 e R5 para fechar a conexão MSDP e das loopbacks do R1 e R6 para que esteja na tabela de roteamento unicast o IP de Source Multicast.
Note que o trafego partindo do R1 para o grupo 239.4.4.4 não funciona devido aos filtros no MSDP.
Documentação:

2.6           Comandos Importantes de Verificação

R2#sh ip msdp summary
MSDP Peer Status Summary
Peer Address     AS    State    Uptime/  Reset SA    Peer Name
                                Downtime Count Count
5.5.5.5          456   Up       00:22:06 0     1     ?

R3#show ip bgp ipv4 multicast summary
BGP router identifier 3.3.3.3, local AS number 123
BGP table version is 5, main routing table version 5
4 network entries using 452 bytes of memory
4 path entries using 192 bytes of memory
5/4 BGP path/bestpath attribute entries using 540 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 1208 total bytes of memory
BGP activity 8/0 prefixes, 8/0 paths, scan interval 60 secs

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
23.23.23.2      4   123      35      34        5    0    0 00:23:45        0
34.34.34.4      4   456      29      30        5    0    0 00:23:38        2

R5#sh ip mroute 239.1.1.1
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel
       Y - Joined MDT-data group, y - Sending to MDT-data group
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:24:10/stopped, RP 5.5.5.5, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:24:10/00:03:05

(1.1.1.1, 239.1.1.1), 00:00:10/00:03:23, flags: MT
  Incoming interface: FastEthernet1/0, RPF nbr 45.45.45.4, Mbgp
  Outgoing interface list:
    FastEthernet0/0, Forward/Sparse, 00:00:10/00:03:19

3        Configuração

3.1           R1

!
ip multicast-routing
!
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
 ip pim sparse-mode
 ip igmp join-group 239.6.6.6
!
interface FastEthernet0/0
 ip address 12.12.12.1 255.255.255.0
 ip pim sparse-mode
!
router ospf 1
 router-id 1.1.1.1
 network 1.1.1.1 0.0.0.0 area 0
 network 12.12.12.1 0.0.0.0 area 0
!
router bgp 123
 bgp router-id 1.1.1.1
 neighbor 12.12.12.2 remote-as 123
 !
 address-family ipv4
 neighbor 12.12.12.2 activate
!
 address-family ipv4 multicast
 neighbor 12.12.12.2 activate
!
!
ip pim rp-address 2.2.2.2
!

3.2           R2

!
ip multicast-routing
!
interface Loopback0
 ip address 2.2.2.2 255.255.255.255
 ip pim sparse-mode
!
interface FastEthernet0/0
 ip address 23.23.23.2 255.255.255.0
 ip pim sparse-mode
!
interface FastEthernet1/0
 ip address 12.12.12.2 255.255.255.0
 ip pim sparse-mode
!
!
router ospf 1
 router-id 2.2.2.2
 network 2.2.2.2 0.0.0.0 area 0
 network 12.12.12.2 0.0.0.0 area 0
 network 23.23.23.2 0.0.0.0 area 0
!
router bgp 123
 bgp router-id 2.2.2.2
 neighbor 12.12.12.1 remote-as 123
 neighbor 23.23.23.3 remote-as 123
 !
 address-family ipv4
 neighbor 12.12.12.1 activate
 neighbor 12.12.12.1 route-reflector-client
 neighbor 23.23.23.3 activate
 neighbor 23.23.23.3 route-reflector-client
 !
 address-family ipv4 multicast
 neighbor 12.12.12.1 activate
 neighbor 12.12.12.1 route-reflector-client
 neighbor 23.23.23.3 activate
 neighbor 23.23.23.3 route-reflector-client
!
!
ip pim rp-address 2.2.2.2
ip msdp peer 5.5.5.5 connect-source Loopback0
ip msdp sa-filter in 5.5.5.5 list 101
ip msdp sa-filter out 5.5.5.5 list 101
ip msdp cache-sa-state
ip msdp rpf rfc3618
!        
!
access-list 101 permit ip any host 239.1.1.1
access-list 101 permit ip any host 239.6.6.6
!

3.3           R3

!
ip multicast-routing
!
!
!
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
 ip pim sparse-mode
!
!
access-list 2 deny   224.0.1.39
access-list 2 deny   224.0.1.40
access-list 2 deny   232.0.0.0 0.255.255.255
access-list 2 permit any
!
interface FastEthernet0/0
 ip address 34.34.34.3 255.255.255.0
 ip pim sparse-mode
 ip multicast boundary 2
!
interface FastEthernet1/0
 ip address 23.23.23.3 255.255.255.0
 ip pim sparse-mode
!
router ospf 1
 router-id 3.3.3.3
 network 3.3.3.3 0.0.0.0 area 0
 network 23.23.23.3 0.0.0.0 area 0
!
router bgp 123
 bgp router-id 3.3.3.3
 neighbor 23.23.23.2 remote-as 123
 neighbor 34.34.34.4 remote-as 456
 !
 address-family ipv4
 redistribute ospf 1 route-map RP-SOURCE
 neighbor 23.23.23.2 activate
 neighbor 23.23.23.2 next-hop-self
 neighbor 34.34.34.4 activate
 !
 address-family ipv4 multicast
 redistribute ospf 1 route-map RP-SOURCE
 neighbor 23.23.23.2 activate
 neighbor 23.23.23.2 next-hop-self
 neighbor 34.34.34.4 activate
!
!
ip pim rp-address 2.2.2.2
!
!
access-list 1 permit 1.1.1.1
access-list 1 permit 2.2.2.2
!       
route-map RP-SOURCE permit 10
 match ip address 1
!

3.4           R4

!
ip multicast-routing
!
!
interface Loopback0
 ip pim sparse-mode
 ip router isis
!
access-list 2 deny   224.0.1.39
access-list 2 deny   224.0.1.40
access-list 2 deny   232.0.0.0 0.255.255.255
access-list 2 permit any
!
interface FastEthernet0/0
 ip pim sparse-mode
 ip multicast boundary 2
 ip router isis
!
interface FastEthernet1/0
 ip pim sparse-mode
!
router isis
 net 49.0001.4444.4444.4444.00
 is-type level-2-only
!
router bgp 456
 bgp router-id 4.4.4.4
 neighbor 34.34.34.3 remote-as 123
 neighbor 45.45.45.5 remote-as 456
 !
 address-family ipv4
 redistribute isis level-2 route-map RP-SOURCE
 neighbor 34.34.34.3 activate
 neighbor 45.45.45.5 activate
 neighbor 45.45.45.5 next-hop-self
!
 address-family ipv4 multicast
 redistribute isis level-2 route-map RP-SOURCE
 neighbor 34.34.34.3 activate
 neighbor 45.45.45.5 activate
 neighbor 45.45.45.5 next-hop-self
!
ip pim rp-address 5.5.5.5
!
!
!
!
access-list 1 permit 5.5.5.5
access-list 1 permit 6.6.6.6
!
route-map RP-SOURCE permit 10
 match ip address 1
!

3.5           R5

!
ip multicast-routing
!
!
interface Loopback0
 ip pim sparse-mode
!
interface FastEthernet0/0
 ip pim sparse-mode
 ip router isis
!
interface FastEthernet1/0
 ip pim sparse-mode
 ip router isis
!
router isis
 net 49.0001.5555.5555.5555.00
 is-type level-2-only
!
router bgp 456
 bgp router-id 5.5.5.5
 neighbor 45.45.45.4 remote-as 456
 neighbor 56.56.56.6 remote-as 456
 !
 address-family ipv4
 neighbor 45.45.45.4 activate
 neighbor 45.45.45.4 route-reflector-client
 neighbor 56.56.56.6 activate
 neighbor 56.56.56.6 route-reflector-client
!
 address-family ipv4 multicast
 neighbor 45.45.45.4 activate
 neighbor 45.45.45.4 route-reflector-client
 neighbor 56.56.56.6 activate
 neighbor 56.56.56.6 route-reflector-client
!
ip pim rp-address 5.5.5.5
ip msdp peer 2.2.2.2 connect-source Loopback0
ip msdp sa-filter in 2.2.2.2 list 101
ip msdp sa-filter out 2.2.2.2 list 101
ip msdp cache-sa-state
ip msdp rpf rfc3618
!
!
access-list 101 permit ip any host 239.1.1.1
access-list 101 permit ip any host 239.6.6.6
!

3.6           R6

!
ip multicast-routing
!
!
interface Loopback0
 ip pim sparse-mode
 ip router isis
 ip igmp join-group 239.4.4.4
 ip igmp join-group 239.1.1.1
!
interface FastEthernet1/0
 ip pim sparse-mode
 ip router isis
!
router isis
 net 49.0001.6666.6666.6666.00
 is-type level-2-only
!
router bgp 456
 bgp router-id 6.6.6.6
 neighbor 56.56.56.5 remote-as 456
 !
 address-family ipv4
 neighbor 56.56.56.5 activate
!
 address-family ipv4 multicast
 neighbor 56.56.56.5 activate
!
ip pim rp-address 5.5.5.5
!

Nenhum comentário: