Roteamento por políticas – Policy-based Routing

Tenho certeza que alguns aqui já estavam sentindo falta de posts mais técnicos… 😉 ! Bom, vamos lá, então! Este tópico é um pouco avançado, mas bastante interessante. Alguns aqui já devem ter ouvido falar da sigla PBR. PBR significa Policy-based Routing, ou roteamento baseado em políticas. E o que seriam estas “políticas”? Nada mais do que regras…! O modo tradicional de roteamento dita que um router irá encaminhar um pacote para a interface de saída que conste em sua tabela de roteamento como destino para a rede presente no campo “Destination”, no cabeçalho do pacote. Ou seja, o router apenas examina o endereço IP de destino, verifica sua tabela e, se a rede em questão for conhecida ele irá encaminhar o pacote para a interface de saída. Se não for conhecida (e não existir uma rota menos específica ou uma rota default), o router irá descartar o pacote.

Graficamente, o processo padrão de roteamento é ilustrado no diagrama abaixo.

routing1.gif

Neste caso, quando um pacote é originado na rede 10 com destino à rede 30, o mesmo é encaminhado aos roteadores existentes no caminho e estes examinam o destino em suas tabelas de roteamento. No retorno, as coisas se invertem… o que era destino (rede 30) passa a ser origem, e o que era origem (rede 10) passa a ser destino. O processo se repete no caminho de volta.

Agora, vamos complicar um pouco… suponha o diagrama abaixo, uma elaboração da rede anteriormente apresentada:

routing_pbr.gif

Vamos imaginar que, na rede 10, eu tenha 2 PCs (PC1 em amarelo e PC2, em verde), e que eu queira que os pacotes originados pelo PC1 com destino à rede 30 atravessem a rota em amarelo (A, B, C), e que os pacotes originados pelo PC2, com destino à rede 30 atravessem a rota em verde (A, C). Como podemos fazer para que isso ocorra, sendo que o processo normal de roteamento apenas examina as tabelas de rotas e segue os caminhos que lá se encontram? Em nosso diagrama, isso pode ser um problema, já que os routers têm apenas a rota verde em suas tabelas.

Existem formas de fazer com que o router utilize outros critérios para a seleção de rotas, além das informações que se encontram na tradicional tabela de roteamento. Uma destas formas é chamada de Policy-based Routing, ou roteamento baseado em políticas. Podemos determinar rotas específicas, à partir de informações específicas. Em nosso exemplo, podemos fazer com que os roteadores roteiem baseando-se nos endereços IP de origem, e não na tabela de roteamento (que examina o endereço IP de destino). Configuramos o roteador, portanto, para que, assim que um pacote com o endereço de ORIGEM 10.1.1.100 atravesse a interface Fa0/0, ele seja direcionado à interface de saída S0/1. Quanto aos pacotes gerados pelo PC2, podemos simplesmente nos dar ao luxo de não fazer nada! Isso fará com que pacotes gerados pelo PC2 caiam no processo padrão de roteamento, ou seja, o endereço de destino será examinado e, com base nas informações da tabela de roteamento, o pacote seguirá o caminho verde.

Este tipo de configuração é interessante para atingir um balanceamento de carga mais homogêneo, por exemplo. Mas pode também ser usado para outros fins.

As configurações de PBR em roteadores Cisco usam “route-maps” para especificar as políticas à serem seguidas. Para a rede ilustrada, a configuração do Router A  ficaria conforme abaixo:

ip access-list standard ACL_PC1
 permit host 10.1.1.100
!
route-map RM_PC1 permit 10
 description Desvia trafego originado pelo PC1 para rota A_B_C
 match ip address ACL_PC1
 set ip next-hop 40.1.1.2
!
interface Fa0/0
 ip address 10.1.1.1 255.255.255.0
 ip policy route-map RM_PC1
!
end

Podemos usar uma ACL padrão, pois o que nos interessa é determinar o IP de origem, apenas. Notem que o “match” que usamos foi no resultado da ACL criada. Indicamos que, se houver um “match”, o pacote seja direcionado para o Router B como “next-hop” (ip 40.1.1.2). Existem muitos outros “match” que podem ser usados, para a criação das mais diversas políticas. Mas por hoje, fiquemos por aqui 😉

Espero que tenham gostado!

E se puderem, testem o cenário no Dynamips (não creio que o Packet Tracer suporte este tipo de config).

Um abs!

Marco Filippetti

22 comentários

Pular para o formulário de comentário

  1. Muito obrigado pela dica Marco. Agora consegui entender como funciona este recurso PBR. Trabalho em uma empresa que oferece serviços de voz e ao dar show run no router visualizei este comando mas sinceramente não conseguia entender a lógica desta configuração. Quem fez esta configuração no router da empresa foi um cara muito expert que só anda correndo, então não conseguia solicitar que me explicasse tal lógica, mas com este post que vc disponibilizou passou a clarear mais. Obrigado!

  2. Bah show de bola mesmo…. tambem não conhecia esse recurso.

  3. Muito interessante!

    Vi esse tipo de artifício estudando para BSCI, mas não entrei a fundo só sabia o básico (que configura na interface e por meio de route-maps).

    Obrigado pela dica Marco.

    Abração,
    Maurício.

  4. Legal Marco,

    Explicação clara e de simples entendimento! Além de muito útil!

    Abraços!

  5. Bem legal.

    Marco, fiquei com uma dúvida:

    1 – Como que funcionaria a rota de retorno neste caso?

  6. Marcos… vlw

  7. Alexandre, neste caso, como o router “C” não foi configurado com PBR, o retorno dos pacotes ocorrerá sempre pelo caminho {C,A}, já que apenas a tabela de roteamento será usada. Mas, pode-se configurar um PBR em “C”, para que pacotes com destino ao PC1 sigam por {C,B,A}, e com destino ao PC2 por {C,A}. Para isso, teríamos que observar o destino do pacote (e não a origem), e portanto, teríamos que usar uma ACL estendida, e não standard, no router “C”.

    Abs!

    Marco.

  8. hahahaha.. Vc adivinhou! Eu estava procurando um tutorial disso! Muito obrigado! Excelente!!

  9. Bastante interessante Marco, Obrigado mesmo pela dica, espero que post mais topicos sobre PBR..

    abs..!!

    E seguindo seu conselho, irei verificar no Dynamips..

  10. Só uma dúvida Marco, e se a comunicação entre o Link do router A e B cair, como vai ser tratado esses pacotes que tem a regra Policy-based Routing? (exemplo: Serial0/1 is up, line protocol is down – cai a camada 3, mas a camada 2 continua ok).

    Os pacotes do PC1 não vão chegar ao destino?

  11. Boa pergunta Alexandre!

    Neste caso o “set” deixa de ser executado (uma vez que o next-hop informado deixa de existir) e o pacote segue o fluxo normal de roteamento (indo direto para “C”).

    Abs!

  12. Marco,

    Mas se um pacote faz o caminho A,B,C e o retorno sendo C,A. Funciona? O retorno não tem que ser sempre o mesmo caminho da ida ?

  13. Alexandre, esta é uma das vantagens de redes IP… não. O caminho de ida não precisa ser igual ao de volta 😉 .

    Abs!

    Marco.

  14. Show…

    Muitissimo esclarecedor, Marco. Para mim, o caminho de volta deveria ser igual ao caminho de ida!…

    Vivendo e aprendendo…SEMPRE!…

    Abraços e Obrigado!

  15. Aeee Marcão!! Muito PBR na VIVAX heim?!

    []’s
    Alexander

  16. Olá a todos, sou novo por aqui e estou começando o CCNA agora, mas comecei a ler os comentarios e exercícios e confesso que estou surpreso, muinto boa as informações aqui postada, tanto o Marcos como as demais pessoas que participam stão de parabéns por este trabalho.
    Gostei do exemplo acima, ainda ñ compreendi 100% por que comecei o 3º módulo agora, então tudo é novidade pra mim e dificil tbm.

    Abraços a todos.

  17. Obrigado Marcos

    Estava tentando arrumar uma forma de fazer exatamente isso. Obrigado

  18. Bom dia a todos.

    Posso trabalhar dessa forma em um ambiente com dois tipos de link (Um é Link de Fibra e outro é um balanceamento entre 3 Links Frame-relay)???

    route-map RM_PC1 permit 10
    description Desvia trafego originado pelo PC1 para rota A_B_C
    match ip address ACL_PC1
    set ip next-hop 40.1.1.2
    set ip next-hop 45.1.1.2
    set ip next-hop 50.1.1.2
    !

    onde 50.1.1.2 ; 45.1.1.2 ; 40.1.1.2 seriam minhas respectivas WANs dos links Frame balaceados, e outro detalhe é que esses 3 links seriais são balanceados por pacote.

    essa forma estaria correta? ou isso não é possivel eu teria que criar varios ROUTE-MAP , um para cada link balanceado.

    lembrando que o Link de Fibra também estaria em um outro Route-map.

    At. Danilo

  19. Marco, não sei se ainda conseguirá visualizar minha pergunta.
    Estou com esse problema na empresa na qual trabalho, quero dividir o tráfego sainte internet para dois links diferentes, mas lá no nosso Catalyst 4006, só tenho interfaces Port-Channel configuradas, sendo uma pra cada Vlan.
    Eu até fiz o Route-map e a ACL, mas algo não está dando certo, porque para aplicar eu preciso estar dentro do modo Route-Map e não consigo aplicar a policy direto na interface port-channel, pois lá não existe o comando: ip policy route-map

    Bom, se receber esse meu post e puder me dar uma dica de como fazer, fico muito agradecido.

    Obrigado,

    Marcos.

  20. Marcos, poste sua questão no fórum, por favor. E, se possível, adicione um diagrama ilustrando o que você está dizendo.

    Obrigado!

    Marco.

  21. Parabéns Marco, esse artigo ficou bem didático, vai direto ao assunto!!! 😀

  22. Muito boa a explicação Marco ! ( Inclusive conheci seu blog anos depois de ter o livro ! rs )

    Se me permite perguntar…
    No caso de já possuir dois route-maps visando fazer o balanceamento entre 2 ISP, um terceiro route-map funcionaria ?
    Eu amarraria à policy a interface “contrária” do desvio ?

    A idéia seria direcionar destinos específicos ( que requerem negociação ), como bancos…e sites que devem interagir sempre com o mesmo end de origem…sempre à uma mesma saída.

    Vlw!
    Abs!

Deixe um comentário