Olá Pessoal.
Através das VPNs tradicionais acaba sendo inviável implementar uma topologia full-mesh para estabelecimento de todos os links possíveis entre as unidades remotas de uma empresa porque sua complexidade é de ordem exponencial, matematicamente expressada através da fórmula (n²-n)/2. Por exemplo, uma empresa que tenha 5 unidades teria que configurar 10 VPNs para conectar essas unidades através de todas as ligações possíveis: (5²-5)/2 = (25 - 5)/2 = 20/2 = 10.
Uma solução comum para contornar essa complexidade é a implementação de uma topologia hub-and-spoke, de forma que cada filial é conectada apenas com a matriz (ponto central concentrador), o que reduz a quantidade de ligações necessárias à quantidade de unidades remotas. A figura abaixo traz uma imagem comparando essas duas topologias.
Embora a topologia hub-and-spoke resolva o problema da complexidade, ela implica em pior desempenho caso duas filiais queiram se comunicar entre si, uma vez que será necessário trafegar os dados pelo ponto central. Do ponto de vista de desempenho seria mais interessante que as duas filiais tivessem uma VPN diretamente configurada entre elas. A tecnologia de DMVPN (Dynamic Multipoint VPN) provê uma solução escalável para configuração de túneis dinâmicos em ambientes que possuem diversos sites. A vantagem dessa solução é que ela é "simples" de configurar como a topologia hub-and-spoke, mas tem o desempenho otimizado da topologia full-mesh.
Na configuração de DMVPN é necessário criar VPNs apenas entre as filiais e a matriz (unidade central), no entanto, quando há comunicação entre duas filiais, essa solução estabelece dinamicamente uma VPN temporária para que o tráfego entre as unidades não tenha que passar pelo ponto central. Por conta do overhead inerente a todo processo dinâmico, é recomendado que essa solução seja implementada tendo em mente a regra 80/20, onde 80% do tráfego ocorra entre filiais e matriz e os demais 20% ocorram entre as filiais.
O processo de configuração da DMVPN combina as seguintes tecnologias: Túneis GRE (Generic Routing Encapsulation), IPSec e Protocolo NHRP (Next Hop Resolution Protocol). Para exemplificar sua configuração estarei utilizando como base o cenário apresentado na figura abaixo, onde existem 3 unidades remotas conectadas na Internet. Observem no cenário que R1 representa o ponto central (hub), enquanto que R2 e R3 são spokes.
A principal diferença na configuração de uma DMVPN em relação a uma VPN tradicional é que o roteador no ponto central (hub) irá executar uma instância servidora do protocolo NHRP. As filiais executam uma instância cliente do NHRP, informando automaticamente seus endereços públicos para manter a tabela de pontos (spokes) do servidor sempre atualizada. Quando duas filiais (spokes) vão se comunicar o roteador da filial de origem do tráfego faz uma busca ao servidor NHRP (roteador da matriz) para saber o endereço público de destino da outra ponta. Depois disso já é possível iniciar o processo de estabelecimento de um túnel dinâmico temporário através de uma interface mGRE (multipoint GRE).
Então vamos à configuração de R1 (hub):
01. R1(config)# crypto isakmp policy 10
02. R1(config-isakmp)# hash md5
03. R1(config-isakmp)# authentication pre-share
04. R1(config-isakmp)# exit
05. R1(config)# crypto isakmp key SENHA address 0.0.0.0 0.0.0.0
06. R1(config)# crypto ipsec transform-set NOME esp-3des esp-md5-hmac
07. R1(cfg-crypto-trans)# exit
08. R1(config)# crypto ipsec profile DMVPN
09. R1(ipsec-profile)# set security-association lifetime seconds 120
10. R1(ipsec-profile)# set transform-set NOME
11. R1(ipsec-profile)# exit
12. R1(config)# int tunnel 0
13. R1(config-if)# ip address 192.168.0.1 255.255.255.0
14. R1(config-if)# ip mtu 1440
15. R1(config-if)# ip nhrp authentication SENHA
16. R1(config-if)# ip nhrp map multicast dynamic
17. R1(config-if)# ip nhrp network-id 1
18. R1(config-if)# tunnel source f0/0
19. R1(config-if)# tunnel mode gre multipoint
20. R1(config-if)# tunnel key 0
21. R1(config-if)# tunnel protection ipsec profile DMVPN
22. R1(config-if)# exit
23. R1(config)# ip route 192.168.2.0 255.255.255.0 192.168.0.2
24. R1(config)# ip route 192.168.3.0 255.255.255.0 192.168.0.3
Em relação à configuração, reparem que o servidor NHRP foi ativado nas linhas 15, 16 e 17; e que o modo do túnel é "gre multipoint" (linha 19). Apenas para constar, as linhas 23 e 24 são rotas estáticas necessárias para direcionar o tráfego destinado às redes locais (LAN) através do endereço do respectivo roteador na VPN Multiponto.
Agora vamos à configuração de R2 e R3 (spokes):
01. R2(config)# crypto isakmp policy 10
02. R2(config-isakmp)# hash md5
03. R2(config-isakmp)# authentication pre-share
04. R2(config-isakmp)# exit
05. R2(config)# crypto isakmp key SENHA address 0.0.0.0 0.0.0.0
06. R2(config)# crypto ipsec transform-set NOME esp-3des esp-md5-hmac
07. R2(cfg-crypto-trans)# exit
08. R2(config)# crypto ipsec profile DMVPN
09. R2(ipsec-profile)# set security-association lifetime seconds 120
10. R2(ipsec-profile)# set transform-set NOME
11. R2(ipsec-profile)# int tunnel 0
12. R2(config-if)# ip address 192.168.0.2 255.255.255.0
13. R2(config-if)# ip mtu 1440
14. R2(config-if)# ip nhrp authentication SENHA
15. R2(config-if)# ip nhrp map multicast dynamic
16. R2(config-if)# ip nhrp map 192.168.0.1 203.0.113.2
17. R2(config-if)# ip nhrp map multicast 203.0.113.2
18. R2(config-if)# ip nhrp network-id 1
19. R2(config-if)# ip nhrp nhs 192.168.0.1
20. R2(config-if)# tunnel source f0/0
21. R2(config-if)# tunnel mode gre multipoint
22. R2(config-if)# tunnel key 0
23. R2(config-if)# tunnel protection ipsec profile DMVPN
24. R2(config-if)# exit
25. R2(config)# ip route 192.168.1.0 255.255.255.0 192.168.0.1
26. R2(config)# ip route 192.168.3.0 255.255.255.0 192.168.0.3
***
R3(config)#
01. R3(config)# crypto isakmp policy 10
02. R3(config-isakmp)# hash md5
03. R3(config-isakmp)# authentication pre-share
04. R3(config-isakmp)# exit
05. R3(config)# crypto isakmp key SENHA address 0.0.0.0 0.0.0.0
06. R3(config)# crypto ipsec transform-set NOME esp-3des esp-md5-hmac
07. R3(cfg-crypto-trans)# exit
08. R3(config)# crypto ipsec profile DMVPN
09. R3(ipsec-profile)# set security-association lifetime seconds 120
10. R3(ipsec-profile)# set transform-set NOME
11. R3(ipsec-profile)# int tunnel 0
12. R3(config-if)# ip address 192.168.0.3 255.255.255.0
13. R3(config-if)# ip mtu 1440
14. R3(config-if)# ip nhrp authentication SENHA
15. R3(config-if)# ip nhrp map multicast dynamic
16. R3(config-if)# ip nhrp map 192.168.0.1 203.0.113.2
17. R3(config-if)# ip nhrp map multicast 203.0.113.2
18. R3(config-if)# ip nhrp network-id 1
19. R3(config-if)# ip nhrp nhs 192.168.0.1
20. R3(config-if)# tunnel source f0/0
21. R3(config-if)# tunnel mode gre multipoint
22. R3(config-if)# tunnel key 0
23. R3(config-if)# tunnel protection ipsec profile DMVPN
24. R3(config-if)# exit
25. R3(config)# ip route 192.168.1.0 255.255.255.0 192.168.0.1
26. R3(config)# ip route 192.168.2.0 255.255.255.0 192.168.0.2
Em relação às configurações das filiais (spokes), vale observar que a configuração do NHRP mudou porque agora os roteadores são clientes, por isso a necessidade de fazer manualmente o mapeamento entre o IP da DMVPN com o endereço público de R1 (203.0.113.2). Alguns comandos interessantes para verificar se as configurações estão funcionando são:
Router# show crypto isakmp sa
Router# show crypto ipsec sa
Router# show ip nhrp
Nesse exemplo, sempre que R2 e R3 forem se comunicar, então antes será estabelecida uma VPN dinâmica entre eles, de forma que o tráfego entre R2 e R3 não tenha que ser intermediado por R1. Depois de um tempo sem tráfego entre R2 e R3 o túnel é desativado para economizar recursos dos roteadores, já que as associações criptográficas demandam bastante processamento.
Abraço.
Samuel.