Cisco機器でDMVPN Phase 2を設定する
Cisco IOS / IOS XE ルータ 3 台で、IKEv2 PSK により保護された DMVPN Phase 2 を構成する。
DMVPN の mGRE、NHRP、Phase の違いは DMVPNの仕組みとPhase 1・2・3、IKEv2 / IPsec の各設定要素は Cisco IOSのIPsec設定要素 を参照する。
- Hub 1 台と Spoke 2 台で DMVPN cloud を作る。
- 全ルータで mGRE を使用する。
- Hub-Spoke の NHRP 登録を確立する。
- routing protocol が remote Spoke の Tunnel address を next hop として広告する。
- NHRP Resolution により remote Spoke の NBMA address を学習する。
- Spoke 間のデータを Hub 経由にせず直接転送する。
- EIGRP または OSPF で各拠点 LAN を広告する。
flowchart TB
hub["Hub / NHS / mGRE<br/>Tunnel0: 10.255.0.1<br/>NBMA: 203.0.113.2"]
subgraph dataPath[" "]
direction LR
lan1["Spoke1 LAN<br/>192.168.1.0/24"]
spoke1["Spoke1 / mGRE<br/>Tunnel0: 10.255.0.11<br/>NBMA: 198.51.100.2"]
spoke2["Spoke2 / mGRE<br/>Tunnel0: 10.255.0.12<br/>NBMA: 192.0.2.2"]
lan2["Spoke2 LAN<br/>192.168.2.0/24"]
lan1 --- spoke1
spoke1 ==>|"NHRP解決後のデータは直接転送"| spoke2
spoke2 --- lan2
end
spoke1 -.-|"NHRP登録・解決"| hub
spoke2 -.-|"NHRP登録・解決"| hub
style dataPath fill:none,stroke:none
Spoke は自分の Tunnel / NBMA mapping を Hub / NHS へ登録する。Spoke1 が Spoke2 LAN の経路を学習した時点で、routing table の next hop は Spoke2 の 10.255.0.12 になる。
Spoke1 は Hub へ NHRP Resolution Request を送り、10.255.0.12 -> 192.0.2.2 を解決する。解決後のデータは Spoke2 へ直接送られ、Hub はデータ転送経路にならない。Phase 3 のように最初のデータを Hub が転送して NHRP Redirect を返す方式ではない。
| 項目 | Hub | Spoke1 | Spoke2 |
|---|---|---|---|
| 機器 | Cisco IOS / IOS XE ルータ | Cisco IOS / IOS XE ルータ | Cisco IOS / IOS XE ルータ |
| WANインターフェース | GigabitEthernet0/0 |
GigabitEthernet0/0 |
GigabitEthernet0/0 |
| NBMAアドレス | 203.0.113.2/30 |
198.51.100.2/30 |
192.0.2.2/30 |
| Underlay next hop | 203.0.113.1 |
198.51.100.1 |
192.0.2.1 |
| LANインターフェース | GigabitEthernet0/1 |
GigabitEthernet0/1 |
GigabitEthernet0/1 |
| LAN側アドレス | 192.168.0.1/24 |
192.168.1.1/24 |
192.168.2.1/24 |
| Tunnelインターフェース | Tunnel0 |
Tunnel0 |
Tunnel0 |
| Tunnelアドレス | 10.255.0.1/24 |
10.255.0.11/24 |
10.255.0.12/24 |
| Router ID | 1.1.1.1 |
2.2.2.2 |
3.3.3.3 |
| IKEバージョン | IKEv2 | IKEv2 | IKEv2 |
| 認証方式 | PSK | PSK | PSK |
| PSK | ChangeMe-StrongKey |
ChangeMe-StrongKey |
ChangeMe-StrongKey |
WAN / LAN インターフェースの IP アドレスと underlay route は設定済みで、3 台の NBMA アドレスが相互到達可能であることを前提とする。各ルータには、上表の underlay next hop を向く default route または remote NBMA アドレスへの経路が必要である。Phase 2 の直接 peer には Spoke 間の underlay 到達性も必要になる。
Hub で確認する。
ping 198.51.100.2 source GigabitEthernet0/0ping 192.0.2.2 source GigabitEthernet0/0Spoke1 で確認する。
ping 203.0.113.2 source GigabitEthernet0/0ping 192.0.2.2 source GigabitEthernet0/0Spoke2 で確認する。
ping 203.0.113.2 source GigabitEthernet0/0ping 198.51.100.2 source GigabitEthernet0/0以下のコマンドは Cisco IOS / IOS XE の構文に基づく。利用する IOS image により使える暗号方式や細部のキーワードが異なるため、投入前に ? で確認する。
関連する設定要素
Section titled “関連する設定要素”- NHRP、NHS、mGRE:DMVPNの仕組みとPhase 1・2・3
- IKE、IKE SA、Child SA:IKEとSA
- Proposal、Policy、Keyring、Profile、Transform Set、PFS:Cisco IOSのIPsec設定要素
- transport mode:トランスポートモードとトンネルモード
- EIGRP の基本:Cisco機器でEIGRPを設定する
- OSPF の基本:Cisco機器でOSPFを設定する
1. IKEv2とIPsecの共通設定を作成する
Section titled “1. IKEv2とIPsecの共通設定を作成する”Hub、Spoke1、Spoke2 のすべてに同じ設定を入れる。
conf tcrypto ikev2 proposal DMVPN-IKEV2-PROPOSAL encryption aes-cbc-256 integrity sha256 group 14exit
crypto ikev2 policy DMVPN-IKEV2-POLICY proposal DMVPN-IKEV2-PROPOSALexit
crypto ikev2 keyring DMVPN-IKEV2-KEYRING peer DMVPN-PEERS address 0.0.0.0 0.0.0.0 pre-shared-key ChangeMe-StrongKey exitexit
crypto ikev2 profile DMVPN-IKEV2-PROFILE match identity remote address 0.0.0.0 0.0.0.0 authentication remote pre-share authentication local pre-share keyring local DMVPN-IKEV2-KEYRING dpd 10 3 on-demandexit
crypto ipsec transform-set DMVPN-IPSEC-TS esp-aes 256 esp-sha256-hmac mode transportexit
crypto ipsec profile DMVPN-IPSEC-PROFILE set transform-set DMVPN-IPSEC-TS set ikev2-profile DMVPN-IKEV2-PROFILE set pfs group14exitPhase 2でremote addressを限定しない理由
Section titled “Phase 2でremote addressを限定しない理由”Hub は、NHRP Registration を送る複数の Spoke と動的に SA を作る。Spoke は Hub の NBMA address を事前に知っているが、直接通信する remote Spoke の NBMA address は NHRP Resolution が完了するまで分からない。
そのため、Hub だけでなく Spoke でも、Keyring の address と IKEv2 Profile の match identity remote address を wildcard にする。Spoke 側を Hub の 203.0.113.2 だけに限定すると、Hub-Spoke SA は作れても、remote Spoke の IKE identity が Profile に一致せず、Spoke-Spoke SA を作れない。
wildcard により一致範囲は広がるが、暗号化する traffic と実際の peer は tunnel protection ipsec profile、mGRE、NHRP により決まる。全 peer が同じ PSK を使うため、通常構成では証明書認証や peer ごとの認証・認可を検討する。
dpd 10 3 on-demand は任意である。省略しても SA は確立するが、応答しない peer の検出と SA の削除が遅れる場合がある。
DMVPN では mGRE が外側 IP header を作るため、IPsec は transport mode で GRE header 以降を保護する。
2. Tunnel0で共通して使用する値
Section titled “2. Tunnel0で共通して使用する値”全ルータで network-id 100、tunnel key 100、NHRP authentication の文字列 DMVPN100 を使用する。network-id は NHRP を有効化し、tunnel key は GRE cloud を識別し、NHRP authentication は別 cloud の誤混入を減らす。必須性と詳しい違いは 三つの識別設定 を参照する。
bandwidth 1000 は EIGRP などが参照する論理帯域幅であり、通信速度を制限しない。ip mtu 1400 と ip tcp adjust-mss 1360 は開始値であり、実際の path MTU に合わせて調整する。
3. HubのmGREとNHRPを設定する
Section titled “3. HubのmGREとNHRPを設定する”Hub で設定する。
interface Tunnel0 bandwidth 1000 ip address 10.255.0.1 255.255.255.0 no ip redirects ip mtu 1400 ip nhrp authentication DMVPN100 ip nhrp map multicast dynamic ip nhrp network-id 100 ip tcp adjust-mss 1360 tunnel source GigabitEthernet0/0 tunnel mode gre multipoint tunnel key 100 tunnel protection ipsec profile DMVPN-IPSEC-PROFILE no shutdownexitHub は NHS として Spoke の NHRP Registration を保持する。ip nhrp map multicast dynamic により、登録済み Spoke へ EIGRP / OSPF の multicast を複製する。
Phase 2 の直接通信は、routing 上の remote Spoke next hop を NHRP Resolution することで始まるため、Hub に ip nhrp redirect は設定しない。
4. Spoke1のmGREとNHRPを設定する
Section titled “4. Spoke1のmGREとNHRPを設定する”Spoke1 で設定する。
interface Tunnel0 bandwidth 1000 ip address 10.255.0.11 255.255.255.0 no ip redirects ip mtu 1400 ip nhrp authentication DMVPN100 ip nhrp map 10.255.0.1 203.0.113.2 ip nhrp map multicast 203.0.113.2 ip nhrp nhs 10.255.0.1 ip nhrp network-id 100 ip tcp adjust-mss 1360 tunnel source GigabitEthernet0/0 tunnel mode gre multipoint tunnel key 100 tunnel protection ipsec profile DMVPN-IPSEC-PROFILE no shutdownexitSpoke は起動時から知っている Hub の Tunnel / NBMA mapping と NHS を静的に設定する。remote Spoke の mapping は設定に列挙せず、通信開始時に NHRP Resolution で動的に学習する。
tunnel mode gre multipoint により、1 個の Tunnel0 から Hub と remote Spoke の両方へ送信できる。Phase 2 は NHRP Redirect / shortcut を使わないため、ip nhrp shortcut は設定しない。
5. Spoke2のmGREとNHRPを設定する
Section titled “5. Spoke2のmGREとNHRPを設定する”Spoke2 で設定する。
interface Tunnel0 bandwidth 1000 ip address 10.255.0.12 255.255.255.0 no ip redirects ip mtu 1400 ip nhrp authentication DMVPN100 ip nhrp map 10.255.0.1 203.0.113.2 ip nhrp map multicast 203.0.113.2 ip nhrp nhs 10.255.0.1 ip nhrp network-id 100 ip tcp adjust-mss 1360 tunnel source GigabitEthernet0/0 tunnel mode gre multipoint tunnel key 100 tunnel protection ipsec profile DMVPN-IPSEC-PROFILE no shutdownexitSpoke2 も Spoke1 と同じ役割の設定を行い、Tunnel address と NBMA address だけを変更する。
6. 動的ルーティングを設定する
Section titled “6. 動的ルーティングを設定する”EIGRP と OSPF は代替構成である。以下のどちらか一方だけを設定する。
EIGRPを使う場合
Section titled “EIGRPを使う場合”Hub の設定。
interface Tunnel0 no ip split-horizon eigrp 100 no ip next-hop-self eigrp 100exit
router eigrp 100 eigrp router-id 1.1.1.1 passive-interface default no passive-interface Tunnel0 network 10.255.0.0 0.0.0.255 network 192.168.0.0 0.0.0.255exitSpoke1 の設定。
router eigrp 100 eigrp router-id 2.2.2.2 passive-interface default no passive-interface Tunnel0 network 10.255.0.0 0.0.0.255 network 192.168.1.0 0.0.0.255exitSpoke2 の設定。
router eigrp 100 eigrp router-id 3.3.3.3 passive-interface default no passive-interface Tunnel0 network 10.255.0.0 0.0.0.255 network 192.168.2.0 0.0.0.255exitno ip split-horizon eigrp 100 は、ある Spoke から学習した経路を同じ Tunnel0 の別 Spoke へ広告できるようにする。
no ip next-hop-self eigrp 100 は、Hub が経路を別 Spoke へ広告するときに、元の Spoke の Tunnel address を next hop として維持する。Spoke1 では、Spoke2 LAN の経路が次の形になる必要がある。
192.168.2.0/24 via 10.255.0.12Spoke1 は 10.255.0.12 を NHRP で 192.0.2.2 に解決し、Spoke2 へ直接送る。next hop が Hub の 10.255.0.1 になっていると、Phase 2 の直接通信は開始できない。
OSPFを使う場合
Section titled “OSPFを使う場合”Hub の設定。
router ospf 10 router-id 1.1.1.1 passive-interface default no passive-interface Tunnel0exit
interface Tunnel0 ip ospf network broadcast ip ospf priority 255 ip ospf 10 area 0exit
interface GigabitEthernet0/1 ip ospf 10 area 0exitSpoke1 の設定。
router ospf 10 router-id 2.2.2.2 passive-interface default no passive-interface Tunnel0exit
interface Tunnel0 ip ospf network broadcast ip ospf priority 0 ip ospf 10 area 0exit
interface GigabitEthernet0/1 ip ospf 10 area 0exitSpoke2 の設定。
router ospf 10 router-id 3.3.3.3 passive-interface default no passive-interface Tunnel0exit
interface Tunnel0 ip ospf network broadcast ip ospf priority 0 ip ospf 10 area 0exit
interface GigabitEthernet0/1 ip ospf 10 area 0exit全ルータの Tunnel0 を broadcast network type にそろえる。Hub の priority を 255、Spoke を 0 にすることで、Hub だけを DR 選出対象にする。Spoke は Hub / DR と FULL Adjacency を形成し、同じ broadcast network 上にある remote Spoke の Tunnel address を LAN 経路の next hop として計算できる。
point-to-multipoint を使うと、remote Spoke の Tunnel address に対する /32 route が Hub 向きに作られ、Phase 2 が必要とする直接 next hop と競合する。この構成では broadcast を使うため、Phase 3 の BLOCK-DMVPN-HOSTS と distribute-list は設定しない。
OSPF の DR / BDR は priority を変更しても稼働中に先取りされない。既存の Adjacency に後から設定する場合は、Hub が DR になっていることを確認し、必要なら保守中に OSPF process または Tunnel interface を再確立する。
7. 設定を保存する
Section titled “7. 設定を保存する”3 台すべてで設定を保存する。
endwrite memoryHubでSpokeの登録を確認する
Section titled “HubでSpokeの登録を確認する”Hub で確認する。
show dmvpnshow ip nhrpHub が次の動的 mapping を学習していることを確認する。
10.255.0.11 -> 198.51.100.210.255.0.12 -> 192.0.2.2SpokeでNHSを確認する
Section titled “SpokeでNHSを確認する”Spoke1 と Spoke2 で確認する。
show ip nhrp nhsshow ip nhrpNHS 10.255.0.1 が応答状態であり、Hub の静的 NHRP entry が 203.0.113.2 を指していることを確認する。
routing next hopを確認する
Section titled “routing next hopを確認する”EIGRP を選んだ場合。
show ip eigrp neighborsshow ip route eigrpshow ip route 192.168.2.0OSPF を選んだ場合。
show ip ospf neighborshow ip ospf interface Tunnel0show ip route ospfshow ip route 192.168.2.0Spoke1 では 192.168.2.0/24 の next hop が Spoke2 の 10.255.0.12 になることを確認する。Spoke2 では 192.168.1.0/24 の next hop が 10.255.0.11 になる必要がある。
OSPF を使う場合、Hub の Tunnel0 が DR、Spoke の priority が 0 になっていることも確認する。各 Spoke と Hub / DR の Neighbor state は FULL になる。
NHRP Resolutionの前後を確認する
Section titled “NHRP Resolutionの前後を確認する”Spoke1 で show ip nhrp と show dmvpn を実行し、Spoke2 の動的 mapping がまだないことを確認する。既に通信済みなら entry が期限切れになるまで待つか、再起動後の未通信状態で確認する。
show ip nhrpshow dmvpnSpoke2 LAN 宛ての通信を発生させる。
ping 192.168.2.1 source 192.168.1.1 repeat 5traceroute 192.168.2.1 source 192.168.1.1続けて確認する。
show ip nhrpshow dmvpnshow crypto ikev2 sashow crypto ipsec sashow crypto session期待する処理は次のとおり。
- Spoke1 は routing table から next hop
10.255.0.12を得る。 - Spoke1 は Hub / NHS を通して NHRP Resolution Request を送る。
- Spoke1 は
10.255.0.12 -> 192.0.2.2の動的 mapping を学習する。 - Spoke1 と Spoke2 の間に IKEv2 / IPsec SA が作られる。
- データは Hub を経由せず、Spoke1 から Spoke2 へ直接送られる。
NHRP Resolution と IKEv2 / IPsec SA の確立を待つ間、最初の一部の ping が失敗する場合がある。確立後の traceroute に Hub の 10.255.0.1 が中継点として現れないことを確認する。
Phase 2 は NHRP shortcut を使わない。routing table の next hop 自体が remote Spoke であり、show ip nhrp shortcut や show ip route next-hop-override を成立条件にはしない。
よくある失敗
Section titled “よくある失敗”| 症状 | 確認する場所 |
|---|---|
| Hub に Spoke が登録されない | NBMA 疎通、PSK、NHRP authentication、network-id、NHS、Hub mapping |
| remote LAN の next hop が Hub になる | EIGRP の no ip next-hop-self、OSPF の broadcast network type と DR |
| next hop は remote Spoke だが NHRP mapping ができない | Hub への NHS / mapping、remote Spoke の登録、Spoke 間 underlay 到達性 |
| NHRP mapping はあるが直接 IPsec SA ができない | Spoke 側の wildcard Keyring / Profile、PSK、Tunnel protection |
| EIGRP neighbor はできるが remote LAN を学習しない | Hub の no ip split-horizon eigrp 100、LAN の network statement |
| OSPF neighbor が形成されない | 全ルータの broadcast、Hub / Spoke priority、multicast mapping、passive-interface |
| OSPF route が Hub next hop になる | Hub が DR か、point-to-multipoint や古い /32 route が残っていないか |
| 直接通信が NAT / PAT を越えられない | UDP 500 / 4500、NAT-T、Spoke 間 session を許可できる NAT 動作か |
| 小さい ping だけ通る | Tunnel MTU、TCP MSS、underlay の path MTU、NAT-T |
通常推奨される構成
Section titled “通常推奨される構成”Phase 2 では、各 Spoke が remote Spoke ごとの経路を持ち、その next hop を維持する必要がある。Hub で経路を集約して Spoke へ広告すると、集約経路の next hop が Hub になり、直接通信を開始できない場合がある。経路集約や階層化が必要な構成では Phase 3 を検討する。
この例は、すべての peer に一致する wildcard と共通 PSK を使用する。管理可能な環境では IKEv2 証明書認証や peer ごとの認証・認可を検討する。
異なる Spoke が別々の PAT 装置の配下にある場合、Hub-Spoke SA が成立しても Spoke-Spoke SA を作れないことがある。Phase 2 の成立確認では、Hub-Spoke と Spoke-Spoke を分けて確認する。
- DMVPNの仕組みとPhase 1・2・3
- Cisco機器でDMVPN Phase 1を設定する
- Cisco機器でDMVPN Phase 3を設定する
- Cisco機器でGRE over IPsecを設定する
- Cisco機器でEIGRPを設定する
- Cisco機器でOSPFを設定する