Introduction to DMVPN

DMVPN (Dynamic Multipoint VPN) is a routing technique we can use to build a VPN network with multiple sites without having to statically configure all devices. It’s a “hub and spoke” network where the spokes will be able to communicate with each other directly without having to go through the hub. Encryption is supported through IPsec which makes DMVPN a popular choice for connecting different sites using regular Internet connections. It’s a great backup or alternative to private networks like MPLS VPN.

There are four pieces to the DMVPN puzzle:

  • Multipoint GRE (mGRE)
  • NHRP (Next Hop Resolution Protocol)
  • Routing (RIP, EIGRP, OSPF, BGP, etc.)
  • IPsec (not required but recommended)

Let me explain these different topics…

Multipoint GRE

Our “regular” GRE tunnels are point-to-point and don’t scale well. For example, let’s say we have a company network with some sites that we want to connect to each other using regular Internet connections:

HQ Branch Routers Internet

Above we have one router that represents the HQ and there are four branch offices. Let’s say that we have the following requirements:

  • Each branch office has to be connected to the HQ.
  • Traffic between Branch 1 and Branch 2 has to be tunneled directly.
  • Traffic between Branch 3 and Branch 4 has to be tunneled directly.

To accomplish this we will have to configure a  bunch of GRE tunnels which will look like this:

HQ Branch Routers Internet GRE Tunnels

Thing will get messy quickly…we have to create multiple tunnel interfaces, set the source/destination IP addresses etc. It will work but it’s not a very scalable solution. Multipoint GRE, as the name implies allows us to have multiple destinations. When we use them, our picture could look like this:

HQ Branch Routers Internet GRE Multipoint Tunnel

When we use GRE Multipoint, there will be only one tunnel interface on each router. The HQ for example has one tunnel with each branch office as its destination. Now you might be wondering, what about the requirement where branch office 1/2 and branch office 3/4 have a direct tunnel?

Right now we have a hub and spoke topology. The cool thing about DMVPN is that we use multipoint GRE so we can have multiple destinations. When we need to tunnel something between branch office 1/2 or 3/4, we automatically “build” new tunnels:

HQ Branch Routers Internet GRE Multipoint Tunnel Dynamic

When there is traffic between the branch offices, we can tunnel it directly instead of sending it through the HQ router. This sounds pretty cool but it introduces some problems…

When we configure point-to-point GRE tunnels we have to configure a source and destination IP address that are used to build the GRE tunnel. When two branch routers want to tunnel some traffic, how do they know what IP addresses to use? Let me show you what I’m talking about:

HQ Branch Routers Internet GRE Multipoint Tunnel Dynamic

Above we have our HQ and two branch routers, branch1 and branch2. Each router is connected to the Internet and has a public IP address:

  • HQ: 1.1.1.1
  • Branch1: 2.2.2.2
  • Branch2: 3.3.3.3

On the GRE multipoint tunnel interface we use a single subnet with the following private IP addresses:

  • HQ: 192.168.1.1
  • Branch1: 192.168.1.2
  • Branch2: 192.168.1.3

Let’s say that we want to send a ping from branch1’s tunnel interface to the tunnel interface of branch2. Here’s what the GRE encapsulated IP packet will look like:

DMVPN GRE Header Unknown Destination IP

The “inner” source and destination IP addresses are known to use, these are the IP address of the tunnel interfaces. We encapsulate this IP packet, put a GRE header in front of it and then we have to fill in the “outer” source and destination IP addresses so that this packet can be routed on the Internet. The branch1 router knows it’s own public IP address but it has no clue what the public IP address of branch2 is…

To fix this problem, we need some help from another protocol…

NHRP (Next Hop Resolution Protocol)

We need something that helps our branch1 router figure out what the  public IP address is of the branch2 router, we do this with a protocol called NHRP (Next Hop Resolution Protocol). Here’s an explanation of how NHRP works:

  • One router will be the NHRP server.
  • All other routers will be NHRP clients.
  • NHRP clients register themselves with the NHRP server and report their public IP address.
  • The NHRP server keeps track of all public IP addresses in its  cache.
  • When one router wants to tunnel something to another router, it will request the NHRP server for the public IP address of the other router.

Since NHRP uses this server and clients model, it makes sense to use a hub and spoke topology for multipoint GRE. Our hub router will be the NHRP server and all other routers will be the spokes.

Here’s an an illustration of how NHRP works with multipoint GRE:

DMVPN NHRP Spoke Registration Request

Above we have two spoke routers (NHRP clients) which establish a tunnel to the hub router. Later once we look at the configurations you will see that the destination IP address of the hub router will be statically configured on the spoke routers. The hub router will dynamically accept spoke routers. The routers will use a NHRP registration request message to register their public IP addresses to the hub.

DMVPN Hub Builds Cache

The hub, our NHRP server will create a mapping between the public IP addresses and the IP addresses of the tunnel interfaces.

DMVPN NHRP Initiation Request from spoke1 to the hub router.

A few seconds later, spoke1 decides that it wants to send something to spoke2. It needs to figure out the destination public IP address of spoke2 so it will send a NHRP resolution request, asking the Hub router what the public IP address of spoke 2 is.

DMVPN NHRP Resolution Reply

The Hub router checks its cache, finds an entry for spoke 2 and sends the NHRP resolution reply to spoke1 with the public IP address of spoke2.

DMVPN Spoke1 to Spoke2 packet

Spoke1 now knows the destination public IP address of spoke2 and is able to tunnel something directly. This is great, we only required the hub to figure out what the public IP address is and all traffic can be sent from spoke to spoke directly.

In NHRP terminology , you’ll see that we don’t talk about “public IP addresses” but NBMA addresses. NHRP is an old protocol (the RFC is from 1998) which was originally developed for NBMA networks like frame-relay or ATM.

When we talk about DMVPN, we often refer to an underlay and overlay network:

  • The underlay network is the network we use for connectivity between the different routers, for example the Internet.
  • The overlay network is our private network with GRE tunnels.
NHRP is a bit similar to ARP or frame-relay inverse ARP. Instead of mapping L2 to L3 information, we are now mapping a tunnel IP address to a NBMA IP address.

DMVPN has different versions which we call phases, there’s three of them:

  • Phase 1
  • Phase 2
  • Phase 3

Let me give you an overview of the three phases:

Phase 1

With phase 1 we use NHRP so that spokes can register themselves with the hub. The hub is the only router that is using a multipoint GRE interface, all spokes will be using regular point-to-point GRE tunnel interfaces. This means that there will be no direct spoke-to-spoke communication, all traffic has to go through the hub!

Since our traffic has to go through the hub, our routing configuration will be quite simple. Spoke routers only need a summary or default route to the hub to reach other spoke routers.

Phase 2

The disadvantage of phase 1 is that there is no direct spoke to spoke tunnels. In phase 2, all spoke routers use multipoint GRE tunnels so we do have direct spoke to spoke tunneling. When a spoke router wants to reach another spoke, it will send an NHRP resolution request to the hub to find the NBMA IP address of the other spoke.

There are two requirements to make spoke to spoke tunnels work:

We're Sorry, Full Content Access is for Members Only...

If you like to keep on reading, Become a Member Now! Here is why:

  • Learn any CCNA, CCNP and CCIE R&S Topic. Explained As Simple As Possible.
  • Try for Just $1. The Best Dollar You've Ever Spent on Your Cisco Career!
  • Full Access to our 660 Lessons. More Lessons Added Every Week!
  • Content created by Rene Molenaar (CCIE #41726)

503 Sign Ups in the last 30 days

satisfaction-guaranteed
100% Satisfaction Guaranteed!
You may cancel your monthly membership at any time.
No Questions Asked!

Tags: , , ,


Forum Replies

  1. Hi Rene,

    Can you please clear something for me. I understand with policy based vpns we don’t nat vpn traffic via the no nat acl or the twice nat command. How does route based know not to nat traffic? Is it simply because there is no nat configuration attached to the tunnel? Does the same logic apply to cisco and palo alto route based vpns?

    Thanks!
    Fabian

  2. Hello laz,
    I have a few questions.

    1. Would you please let me know the order of operations when a packet is being sent over a DMVPN protected with IPSEC tunnel?
      My understanding is route lookup which is the tunnel interface-----GRE encapsulation-----IPSEC encapsulation—exit out of the interface. Please let me know if it is correct?
    2. If the IPSEC tunnel goes down still I should be able to send out traffic through the GRE tunnel. The only problem is the traffic will not be encrypted. Is it correct?
    3. For the sake of this conversation, let’s just say I have only one SP
    ... Continue reading in our forum

  3. Hello Azm

    For this question, Cisco has an excellent example and explanation as to the order of operations for the scenario you describe. This information can be found here.

    ... Continue reading in our forum

  4. Hello Azm

    Can you share the relevant portions of your configs so we can take a closer look? Also, please specify what traffic was flowing, that is, from what source to what destination address.

    Thanks!

    Laz

  5. Hello Laz,
    The config is below

    //cdn-forum.networklessons.com/uploads/default/original/1X/59ddc90f7d83846a041948119131c403661d2e72.png

    HUB#sho run inter tunnel 0
    
    !
    interface Tunnel0
     ip address 10.0.0.1 255.255.255.0
     no ip redirects
     ip nhrp map multicast dynamic
     ip nhrp network-id 1
     ip nhrp redirect
     tunnel source 1.1.1.1
     tunnel mode gre multipoint
    end
    
    
    HUB#sho run inter ethernet 0/1
    
    !
    interface Ethernet0/1
     description WAN INTERFACE
     ip address 1.1.1.1 255.255.255.0
    
    ip route 0.0.0.0 0.0.0.0 Tunnel0
    
    HUB#ping 10.10.10.4 source tunnel 0
    Type escape sequ
    ... Continue reading in our forum

32 more replies! Ask a question or join the discussion by visiting our Community Forum