【DMVPN】mGRE、NHRPの概要をわかりやすく解説

DMVPN(Dynamic Multipoint VPN)は、多くの拠点をつなぐ VPN を、接続先のルータをすべて静的に設定しなくても作れるようにする技術です。構成は「ハブアンドスポーク」ですが、スポークどうしの通信が必要になると、スポーク間に直接トンネルを張れます。あらかじめフルメッシュのトンネルを設定しておく必要はありません。

この記事では、DMVPN を支える2つの仕組み、マルチポイント GRE(mGRE)と NHRP(Next Hop Resolution Protocol)の役割と、スポーク間に直接トンネルができるまでの流れを、図で順に説明します。

この記事でわかること
  1. mGRE:1つのトンネルインターフェースで複数の宛先とつながる仕組み
  2. NHRP:トンネルのアドレスから相手の NBMA アドレスを調べる仕組み
  3. スポークの登録から、スポーク間に直接トンネルができるまでの流れ
  4. オーバーレイとアンダーレイのアドレスの関係

DMVPN を構成する2つの仕組み

仕組み役割
マルチポイント GRE(mGRE)1つのトンネルインターフェースで、複数の相手とトンネルを張る
NHRPトンネルの相手のアドレス(トンネルアドレス)から、インターネット側のアドレス(NBMA アドレス)を調べる

実際の DMVPN では、これに IPsec を組み合わせてトンネルの通信を暗号化するのが一般的です。この記事では、トンネルを作る仕組みである mGRE と NHRP に絞って説明します。

マルチポイント GRE(mGRE)

GRE トンネルは、1つのトンネルインターフェースに1つの宛先を設定するポイントツーポイントが基本です。拠点が増えるたびに、トンネルインターフェースも増やす必要があります。マルチポイント GRE では、1つのトンネルインターフェースで複数の宛先とトンネルを張れます。

ただし、mGRE のトンネルインターフェースには宛先を固定で書かないので、パケットを送るときに「このトンネルの相手のインターネット側のアドレスはどれか」を別の方法で知る必要があります。そこで使うのが NHRP です。

NHRP(Next Hop Resolution Protocol)

NHRP は、ネクストホップサーバ(NHS)と NHRP クライアント(NHC)で動くプロトコルです。DMVPN では、ハブが NHS、スポークが NHRP クライアントになります。

トンネルの下にある、インターネットなどの公衆網で使うアドレスを、パブリックアドレスまたは NBMA(Non-Broadcast Multi-Access)アドレスと呼びます。トンネルインターフェースに付けるアドレスは、トンネルアドレス(プライベートアドレス)です。

mGRE トンネル アンダーレイ HUB(NHS) Tunnel 192.168.0.1 NBMA 169.254.0.1 Spoke1(NHRP クライアント) Tunnel 192.168.0.2 NBMA 169.254.0.2 Spoke2(NHRP クライアント) Tunnel 192.168.0.3 NBMA 169.254.0.3
図1 DMVPN の構成。ハブが NHS、スポークが NHRP クライアント

スポークには、ハブのトンネルアドレスと NBMA アドレスの対応を静的に設定しておきます。スポークは起動するとハブに自分の対応を登録(NHRP 登録)し、ハブはその登録からスポークの情報を動的に学習します。ハブ側に、スポークのアドレスを1台ずつ設定する必要はありません。

機器NHRP での役割あらかじめ知っていること
ハブNHS(ネクストホップサーバ)自分のアドレスだけ。スポークの情報は登録で学習する
スポークNHRP クライアントハブのトンネルアドレスと NBMA アドレスの対応(静的に設定)

基本動作

スポークがハブに登録する

まず、NHRP クライアントであるスポークは、自分のトンネルアドレスと NBMA アドレスの対応を、NHRP Registration Request で NHS(ハブ)に登録します。ハブは、スポークのトンネルアドレスと NBMA アドレスの対応表(NHRP キャッシュ)を作ります。

Spoke1 192.168.0.2 / 169.254.0.2 HUB(NHS) 192.168.0.1 / 169.254.0.1 Spoke2 192.168.0.3 / 169.254.0.3 Registration Request 192.168.0.2 は 169.254.0.2 Registration Request 192.168.0.3 は 169.254.0.3 NHRP キャッシュ 192.168.0.2 → 169.254.0.2 192.168.0.3 → 169.254.0.3
図2 スポークの登録(NHRP Registration Request)

スポーク2の NBMA アドレスを問い合わせる

スポーク1からスポーク2(トンネルアドレス 192.168.0.3)へ通信したいとします。スポーク1は、スポーク2の NBMA アドレスを知らないので、ハブに NHRP Resolution Request を送って問い合わせます。

ハブは NHRP キャッシュを参照し、NHRP Resolution Reply でスポーク2の NBMA アドレス(169.254.0.3)を返します。

Spoke1 192.168.0.2 / 169.254.0.2 HUB(NHS) 192.168.0.1 / 169.254.0.1 Spoke2 192.168.0.3 / 169.254.0.3 Resolution Request 192.168.0.3 の NBMA アドレスは? Resolution Reply 169.254.0.3 です
図3 NBMA アドレスの問い合わせ(NHRP Resolution Request/Reply)

スポーク間に直接トンネルを張る

これでスポーク1は、スポーク2の NBMA アドレスがわかりました。スポーク1は、169.254.0.3 宛てに直接トンネルを張り、ハブを経由せずにスポーク2と通信します。

直接トンネル アンダーレイ HUB(NHS) Tunnel 192.168.0.1 NBMA 169.254.0.1 Spoke1(NHRP クライアント) Tunnel 192.168.0.2 NBMA 169.254.0.2 Spoke2(NHRP クライアント) Tunnel 192.168.0.3 NBMA 169.254.0.3
図4 スポーク1とスポーク2の間に直接トンネルができる

ハブとスポークの間のトンネルは常に張られていますが、スポーク間のトンネルは、スポーク間で通信が発生したときに必要に応じて作られます。拠点が多くても、使わないスポーク間のトンネルは作られないので、設定や機器の負荷を抑えられます。

オーバーレイとアンダーレイ

この構成のアドレスを、オーバーレイ(トンネル)とアンダーレイ(トンネルの下の公衆網)に分けて整理します。どの機器も、両方の層にアドレスを持っています。

オーバーレイ トンネル 192.168.0.0/24 アンダーレイ NBMA 169.254.0.0/24 .2 .2 .1 .1 .3 .3 Spoke1 HUB Spoke2
図5 オーバーレイとアンダーレイのアドレス
機器トンネルアドレス(オーバーレイ)NBMA アドレス(アンダーレイ)
HUB192.168.0.1169.254.0.1
Spoke1192.168.0.2169.254.0.2
Spoke2192.168.0.3169.254.0.3

NHRP が調べているのは、この表の「トンネルアドレスに対応する NBMA アドレス」です。

まとめ

項目内容
mGRE1つのトンネルインターフェースで複数の相手とトンネルを張る
NHRPトンネルアドレスから NBMA アドレスを調べる。ハブが NHS、スポークがクライアント
Registration Requestスポークが自分のトンネルアドレスと NBMA アドレスの対応をハブに登録する
Resolution Request/Replyスポークがハブに相手の NBMA アドレスを問い合わせ、ハブが答える
スポーク間トンネル通信が発生したときに、相手の NBMA アドレス宛てに直接張る

コメント