Prefix List
Os prefix list , servem para poder fazer match de redes, ou grupos de redes. Ao igual que as access list elas tem números de sequência. A execução é feita do menor ao maior número de sequência, e também existe um deny implícito no final. Geralmente você utiliza de duas formas: Primeira forma de utilização:ip prefix-list Nome_Prefix_List seq Numero_Sequencia deny|permit a.b.c.d/len
O formato acima é utilizado quando se deseja fazer match de uma rede específica. Aqui a variavél "len", é a máscara da rede. Exemplo: Gostaria de fazer match da rede 192.168.100.0/24
ip prefix-list MINHA_REDE seq 5 permit 192.168.100.0/24
Segunda forma de utilização:
ip prefix-list Nome_Prefix_List seq Numero_Sequencia deny|permit a.b.c.d/len ge X le Y
Aqui "len", somente me indica quantos bits vou fazer match do endereço de rede a.b.c.d. "X" me diz qual é o valor mínimo da máscara de rede, e "Y" qual é o valor máximo da máscara de rede. Os acrônimos ge e le, significam "greater ou equal", maior ou igual e "less or equal", menor ou igual.
Exemplo: Gostaria de fazer match de toda a classe B, classful: Analisando o primeito octeto:
Classe B : 1000 000 - 128 1011 111 - 191
Somente me interessa fazer match dos primeiros 2 bits. E como a máscara de uma classe B classful é de 16 bits, então minha prefix-list ficaria:
ip prefix-list CLASSEB_FULL seq 5 permit 128.0.0.0/2 ge 16 le 16
E se eu quiser fazer match de toda a ClasseB incluindo subnetting: Ao incluir subnetting a máscara de rede para uma classe B pode variar de 16 até 32.
ip prefix-list CLASSEB_SUBNET seq 5 permit 128.0.0.0/2 ge 16 le 32
Outro exemplo:
Gostaria de fazer match de todas as redes.
Ao querer fazer match de todas as redes, não me interessa nenhum bit então ficaria 0.0.0.0/0. Me interessa todas as possivéis máscaras de rede então preciso utilizar um "le 32", que se traduz em considera todas as máscara de redes menores ou iguais a /32. Minha prefix list ficaria:
ip prefix-list ALL_NETWORKS seq 5 permit 0.0.0.0/0 le 32
Distribute List
As distribute-list serve para filtrar rotas, sejam elas rotas que estou recevendo (in), ou rotas que estou enviando (out).Da figura acima, o Roteador R1, foi configurado com uma distribute-list do tipo IN para filtrar a rota ROTA2, o resultado é que R1 não instala dita rota na sua routing table, e em consequência não propaga a rota para seus vizinhos. Do outro lado R1 foi configurado com uma distribute-list do tipo OUT entre R1 e R2 para filtrar a ROTA2, o resultado é que R1 instala na sua routing table ambas as rotas, porém ele somente envia a ROTA1 para o seu vizinho R1. Uma observação a ser feita aqui, para os protocolos Link State, como OSPF e IS-IS, eles utilizam uma base de dados de topologia LSDB para poder obter informação sobre os links do seus vizinhos, de tal forma que todos os roteadores precisam ter a mesma informação para poder ter uma topologia consistente. Então em um protocolo Link State, quando você aplica uma distribute-list você somente esta filtrando as rotas da routing table e não da LSDB. Vamos ver um exemplo, utilizemos o protocolo RIP que é bem simples
de utilizar:
No diagrama de rede acima, todos os roteadores executam RIPv2. Vejamos as tabelas de roteamento:
R1: R1(config-router)#do sh ip route rip | Inc ^R R 1.1.1.0 [120/1] via 172.16.1.2, 00:00:12, Ethernet0/2 R 1.1.2.0 [120/1] via 172.16.1.2, 00:00:12, Ethernet0/2 R 1.1.3.0 [120/1] via 172.16.1.2, 00:00:12, Ethernet0/2 R 4.4.4.0 [120/1] via 172.16.1.2, 00:00:12, Ethernet0/2 R1(config-router)#
R2: R2(config-router)#do sh ip route rip | Inc ^R R 1.1.1.0 [120/2] via 192.168.100.1, 00:00:18, Ethernet0/0 R 1.1.2.0 [120/2] via 192.168.100.1, 00:00:18, Ethernet0/0 R 1.1.3.0 [120/2] via 192.168.100.1, 00:00:18, Ethernet0/0 R 4.4.4.0 [120/2] via 192.168.100.1, 00:00:18, Ethernet0/0 R 10.10.10.0 [120/1] via 192.168.100.1, 00:00:18, Ethernet0/0 R 172.16.1.0 [120/1] via 192.168.100.1, 00:00:18, Ethernet0/0 R2(config-router)#
R3: R 1.1.1.0 [120/2] via 10.10.10.1, 00:00:11, Ethernet0/1 R 1.1.2.0 [120/2] via 10.10.10.1, 00:00:11, Ethernet0/1 R 1.1.3.0 [120/2] via 10.10.10.1, 00:00:11, Ethernet0/1 R 4.4.4.0 [120/2] via 10.10.10.1, 00:00:11, Ethernet0/1 R 172.16.1.0 [120/1] via 10.10.10.1, 00:00:11, Ethernet0/1 R 192.168.100.0/24 [120/1] via 10.10.10.1, 00:00:11, Ethernet0/1
Os três roteadores recebem as rotas de loopback. Vamos filtrar agora em R1, as rede de loopback0,1,2 de R4, para isso vamos utilizar uma prefix-list em conjunto com uma distribute list. Analisemos os endereços de LoopBack:
1.1.1.1 - 1.1.0000 0001.1 1.1.2.1 - 1.1.0000 0010.1 1.1.3.1 - 1.1.0000 0011.1
Dessa forma me interessa fazer match aos primeiros 22 bits, e uma máscara de 24 bits. Vou ter duas linhas na prefix-list a primeira para filtrar as loopback (deny), e a segunda para permitir o resto.
ip prefix-list LOOPBACKS seq 5 deny 1.1.0.0/22 ge 24 le 24 ip prefix-list LOOPBACKS seq 10 permit 0.0.0.0/0 le 32
Aplicando em R1:
R1(config-router)#distribute-list prefix LOOPBACKS in R1(config-router)#do sh ip route rip | Inc ^R R 4.4.4.0 [120/1] via 172.16.1.2, 00:00:17, Ethernet0/2 R1(config-router)#
Como esperado em R1 somente aparece a rota para a rede 4.4.4.0. Vejamos em R2 e R3:
R2#sh ip route | inc ^R R 4.4.4.0 [120/2] via 192.168.100.1, 00:00:24, Ethernet0/0 R 10.10.10.0 [120/1] via 192.168.100.1, 00:00:24, Ethernet0/0 R 172.16.1.0 [120/1] via 192.168.100.1, 00:00:24, Ethernet0/0 R2#
R3#sh ip route rip | inc ^R R 4.4.4.0 [120/2] via 10.10.10.1, 00:00:09, Ethernet0/1 R 172.16.1.0 [120/1] via 10.10.10.1, 00:00:09, Ethernet0/1 R 192.168.100.0/24 [120/1] via 10.10.10.1, 00:00:09, Ethernet0/1 R3#
As rotas também não aparecem em R2,R3 isso porque R1 não as propago para eles. Vejamos outro exemplo, dessa vez vamos filtrar as rotas de forma que R2 não receba as mesmas.
R1(config-router)#distribute-list prefix LOOPBACKS out ethernet 0/0 R1(config-router)#Mandamos um clear ip route *, para atualizar. Vejamos como ficaram as rotas:
R1: R1(config-router)#do sh ip route rip | Inc ^R R 1.1.1.0 [120/1] via 172.16.1.2, 00:00:23, Ethernet0/2 R 1.1.2.0 [120/1] via 172.16.1.2, 00:00:23, Ethernet0/2 R 1.1.3.0 [120/1] via 172.16.1.2, 00:00:23, Ethernet0/2 R 4.4.4.0 [120/1] via 172.16.1.2, 00:00:23, Ethernet0/2 R1(config-router)#
R2: R2#sh ip route | inc ^R R 4.4.4.0 [120/2] via 192.168.100.1, 00:00:14, Ethernet0/0 R 10.10.10.0 [120/1] via 192.168.100.1, 00:00:14, Ethernet0/0 R 172.16.1.0 [120/1] via 192.168.100.1, 00:00:14, Ethernet0/0 R2#
R3: R3#sh ip route rip | inc ^R R 1.1.1.0 [120/2] via 10.10.10.1, 00:00:04, Ethernet0/1 R 1.1.2.0 [120/2] via 10.10.10.1, 00:00:04, Ethernet0/1 R 1.1.3.0 [120/2] via 10.10.10.1, 00:00:04, Ethernet0/1 R 4.4.4.0 [120/2] via 10.10.10.1, 00:00:04, Ethernet0/1 R 172.16.1.0 [120/1] via 10.10.10.1, 00:00:04, Ethernet0/1 R 192.168.100.0/24 [120/1] via 10.10.10.1, 00:00:04, Ethernet0/1 R3#
Como esperado, R1 esta filtrando as rotas na saída para R2 :).
Route Maps
As route-maps, vendría a ser como uma sequência de condicionais "if....then". Cada condição na route-map tem um número de sequência. A ordem de execução da route map é do menor ao maior número de sequência, similar as access-list. As route-map tem as ações de deny/permit similar as access-list, assim como um deny implícito no final. O deny e o permit de uma route-map tem um significado diferente dependendo se você vai utilizar para filtering, redistribution, PBR. As route maps, oferecem opções que não são possíveis via access-list, como por exemplo modificar os atributos de BGP. Vejamos um exemplo, para o caso de filtering: Vou trocar o protocolo para OSPF em vez de RIPRx: Rx(config)#no router rip Rx(config)#router ospf 1 Rx(config)#network 0.0.0.0 255.255.255.255 area 0 Em R4 Modificar as interfaces de LoopBack para point-to-point R4(config)#int loX R4(config)#ip ospf network point-to-pointRotas em R1, R2 e R3:
R1: R1(config-router)#do sh ip route ospf | Inc ^O O 1.1.1.0 [110/11] via 172.16.1.2, 00:02:22, Ethernet0/2 O 1.1.2.0 [110/11] via 172.16.1.2, 00:02:22, Ethernet0/2 O 1.1.3.0 [110/11] via 172.16.1.2, 00:02:22, Ethernet0/2 O 4.4.4.0 [110/11] via 172.16.1.2, 00:02:22, Ethernet0/2 R1(config-router)# R2: R2(config-router)#do sh ip route ospf | Inc ^O O 1.1.1.0 [110/21] via 192.168.100.1, 00:02:49, Ethernet0/0 O 1.1.2.0 [110/21] via 192.168.100.1, 00:02:49, Ethernet0/0 O 1.1.3.0 [110/21] via 192.168.100.1, 00:02:49, Ethernet0/0 O 4.4.4.0 [110/21] via 192.168.100.1, 00:02:49, Ethernet0/0 O 10.10.10.0 [110/20] via 192.168.100.1, 00:03:11, Ethernet0/0 O 172.16.1.0 [110/20] via 192.168.100.1, 00:03:11, Ethernet0/0 R2(config-router)# R3: R3(config-router)#do sh ip route ospf | Inc ^O O 1.1.1.0 [110/21] via 10.10.10.1, 00:00:32, Ethernet0/1 O 1.1.2.0 [110/21] via 10.10.10.1, 00:00:32, Ethernet0/1 O 1.1.3.0 [110/21] via 10.10.10.1, 00:00:32, Ethernet0/1 O 4.4.4.0 [110/21] via 10.10.10.1, 00:00:32, Ethernet0/1 O 172.16.1.0 [110/20] via 10.10.10.1, 00:00:42, Ethernet0/1 O 192.168.100.0/24 [110/20] via 10.10.10.1, 00:00:42, Ethernet0/1 R3(config-router)#
Vou utilizar uma route-map para filtrar as rotas de loopback em R1: Primeiro vou definir uma prefix-list que faça match com as redes de loopback que vamos filtrar:
ip prefix-list FILTERING_ROUTEMAP seq 5 permit 1.1.0.0/22 ge 24 le 24
E a route-map ficaria:
route-map FILTERING deny 5 match ip address prefix-list FILTERING_ROUTEMAP ! route-map FILTERING permit 10
Interessante notar que quem faz o "deny" é a route-map, por isso que na prefix-list colocamos "permit". A última linha da route-map vai deixar passar o resto das redes. Aplicando em R1:
R1(config)#router ospf 1 R1(config-router)#distribute-list route-map FILTERING in R1(config-router)#
Vejamos a routing table:
R1#sh ip route ospf | Inc ^O O 4.4.4.0 [110/11] via 172.16.1.2, 00:00:32, Ethernet0/2 R1# R2#sh ip route ospf | Inc ^O O 1.1.1.0 [110/21] via 192.168.100.1, 00:00:39, Ethernet0/0 O 1.1.2.0 [110/21] via 192.168.100.1, 00:00:39, Ethernet0/0 O 1.1.3.0 [110/21] via 192.168.100.1, 00:00:39, Ethernet0/0 O 4.4.4.0 [110/21] via 192.168.100.1, 00:00:39, Ethernet0/0 O 10.10.10.0 [110/20] via 192.168.100.1, 00:00:39, Ethernet0/0 O 172.16.1.0 [110/20] via 192.168.100.1, 00:00:39, Ethernet0/0 R2# R3#sh ip route ospf | Inc ^O O 1.1.1.0 [110/21] via 10.10.10.1, 00:00:55, Ethernet0/1 O 1.1.2.0 [110/21] via 10.10.10.1, 00:00:55, Ethernet0/1 O 1.1.3.0 [110/21] via 10.10.10.1, 00:00:55, Ethernet0/1 O 4.4.4.0 [110/21] via 10.10.10.1, 00:00:55, Ethernet0/1 O 172.16.1.0 [110/20] via 10.10.10.1, 00:00:55, Ethernet0/1 O 192.168.100.0/24 [110/20] via 10.10.10.1, 00:00:55, Ethernet0/1 R3#
A distribute-list funcionou ela filtro as rotas em R1, porém R2 e R3 continuam com as rotas de loopback. Isso acontece porque agora o protocolo de roteamento é um link state, e a distribute-list somente apago as rotas da RIB em R1 e não da LSDB, a verdade não existe mecanismo de apagar na LSDB. Se vocês analisarem a LSDB de R1 ela provavélmente contem os LSAs das loopback, vamos verificar:
R1#sh ip ospf database router adv-router 4.4.4.4 | Inc (Link ID) (Link ID) Network/subnet number: 1.1.1.0 (Link ID) Network/subnet number: 1.1.2.0 (Link ID) Network/subnet number: 1.1.3.0 (Link ID) Network/subnet number: 4.4.4.0 (Link ID) Designated Router address: 172.16.1.2 R1#
Eles estão lá na LSDB. Agora modificamos nossa topologia para utilizar a route-map para redistribuição:
A configuração de R1 ficaria:
R1#sh run | section router router ospf 1 network 10.10.10.1 0.0.0.0 area 0 network 192.168.100.1 0.0.0.0 area 0 router rip version 2 network 172.16.0.0 no auto-summary R1#
Agora gostariamos de redistribuir únicamente a rota 4.4.4.0/24 do RIP para o OSPF, e tambem queremos tagear as rota com o valor de 120. A prefix-list a utilizar seria:
R1(config)#ip prefix-list R4_LOOPBACK4 seq 5 permit 4.4.4.0/24 R1(config)#
E a route-map:
route-map RIP->OSPF permit 5 match ip address prefix-list R4_LOOPBACK4 set tag 120
O deny implícito da route-map vai se encarregar de não redistribuir as outras rotas. O "set" irá tagear as rotas redistribuidas com o valor de 120 vejamos as rotas em R2 e R3:
R2#sh ip route | Inc ^O O E2 4.4.4.0 [110/20] via 192.168.100.1, 00:00:18, Ethernet0/0 O 10.10.10.0 [110/20] via 192.168.100.1, 00:10:56, Ethernet0/0 R2# R3#sh ip route | Inc ^O O E2 4.4.4.0 [110/20] via 10.10.10.1, 00:00:29, Ethernet0/1 O 192.168.100.0/24 [110/20] via 10.10.10.1, 00:29:37, Ethernet0/1 R3#
Vejamos se o tag foi setado:
R2#sh ip route 4.4.4.0 Routing entry for 4.4.4.0/24 Known via "ospf 1", distance 110, metric 20 Tag 120, type extern 2, forward metric 10 Last update from 192.168.100.1 on Ethernet0/0, 00:01:53 ago Routing Descriptor Blocks: * 192.168.100.1, from 192.168.100.1, 00:01:53 ago, via Ethernet0/0 Route metric is 20, traffic share count is 1 Route tag 120 R2#
Beleza!..Por hoje é isso ai, vocês podem brincar com route-maps para PBR ou para BGP por exemplo.
Abcs Jose