Cisco機器でDMVPN Phase 1を設定する
Cisco IOS / IOS XE ルータ 3 台で、IKEv2 PSK により保護された DMVPN Phase 1 を構成する。
DMVPN の mGRE、NHRP、Phase の違いは DMVPNの仕組みとPhase 1・2・3、IKEv2 / IPsec の各設定要素は Cisco IOSのIPsec設定要素 を参照する。
- Hub 1 台と Spoke 2 台で DMVPN cloud を作る。
- Hub-Spoke の NHRP 登録を確立する。
- Hub は 1 個の mGRE interface で複数の Spoke を収容する。
- Spoke は point-to-point GRE で Hub だけを peer とする。
- Spoke 間通信を常に Hub 経由で転送する。
- EIGRP または OSPF で各拠点 LAN を広告する。
flowchart TB
subgraph dataPath[" "]
direction LR
lan1["Spoke1 LAN<br/>192.168.1.0/24"]
spoke1["Spoke1 / point-to-point GRE<br/>Tunnel0: 10.255.0.11<br/>NBMA: 198.51.100.2"]
hub["Hub / NHS / mGRE<br/>Tunnel0: 10.255.0.1<br/>NBMA: 203.0.113.2"]
spoke2["Spoke2 / point-to-point GRE<br/>Tunnel0: 10.255.0.12<br/>NBMA: 192.0.2.2"]
lan2["Spoke2 LAN<br/>192.168.2.0/24"]
lan1 --- spoke1
spoke1 ==>|"Spoke間通信もHubへ送る"| hub
hub ==>|"Hubが宛先Spokeへ再転送"| spoke2
spoke2 --- lan2
end
style dataPath fill:none,stroke:none
Hub は tunnel mode gre multipoint により、1 個の Tunnel0 で動的に登録される複数の Spoke を扱う。Spoke は tunnel destination 203.0.113.2 により、GRE の外側宛先を Hub に固定する。
Spoke1 から Spoke2 LAN への packet は、Spoke1-Hub の GRE / IPsec peer と Hub-Spoke2 の GRE / IPsec peer を順に通る。逆方向も同じであり、Spoke1 と Spoke2 の間に直接の NHRP mapping や IPsec SA は作られない。
| 項目 | 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 アドレスへの経路が必要である。
DMVPN Tunnel を作る前に、各ルータから必要な NBMA アドレスへ到達できることを確認する。
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 ProposalとPolicyを作成する
Section titled “1. IKEv2 ProposalとPolicyを作成する”Hub、Spoke1、Spoke2 のすべてに同じ Proposal と Policy を設定する。
conf tcrypto ikev2 proposal DMVPN-IKEV2-PROPOSAL encryption aes-cbc-256 integrity sha256 group 14exit
crypto ikev2 policy DMVPN-IKEV2-POLICY proposal DMVPN-IKEV2-PROPOSALexitProposal と Policy の各コマンドが選ぶアルゴリズムは IKEv2の設定要素 を参照する。
2. IKEv2のremote peerを設定する
Section titled “2. IKEv2のremote peerを設定する”Hubではremote addressを限定しない
Section titled “Hubではremote addressを限定しない”Hub は複数の Spoke から動的に接続されるため、Keyring と IKEv2 Profile をすべての remote IPv4 address に一致させる。
crypto ikev2 keyring DMVPN-IKEV2-KEYRING peer DMVPN-SPOKES 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-demandexitKeyring の address は、remote peer に使用する Keyring entry と PSK を選ぶ。Profile の match identity remote address は、remote の IKE identity がアドレスである場合に、この Profile を選ぶ。選択対象が異なるため、Hub では両方を wildcard にする。
SpokeではHubだけに限定する
Section titled “SpokeではHubだけに限定する”Phase 1 の Spoke が接続する remote peer は Hub の 203.0.113.2 だけである。Spoke1 と Spoke2 の両方に、次の Keyring と Profile を設定する。
crypto ikev2 keyring DMVPN-IKEV2-KEYRING peer DMVPN-HUB address 203.0.113.2 pre-shared-key ChangeMe-StrongKey exitexit
crypto ikev2 profile DMVPN-IKEV2-PROFILE match identity remote address 203.0.113.2 255.255.255.255 authentication remote pre-share authentication local pre-share keyring local DMVPN-IKEV2-KEYRING dpd 10 3 on-demandexitPhase 2 / 3 では Spoke 間の動的 peer に一致するため Spoke 側も wildcard にするが、Phase 1 では直接 peer を作らない。ここを Hub だけに限定しても、NHRP 登録と Hub 経由の Spoke 間通信は成立する。
dpd 10 3 on-demand は任意である。省略しても SA は確立するが、応答しない peer の検出と SA の削除が遅れる場合がある。
3. IPsec Transform SetとProfileを作成する
Section titled “3. IPsec Transform SetとProfileを作成する”Hub、Spoke1、Spoke2 のすべてに設定する。
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 group14exitDMVPN では GRE が外側 IP header を作るため、IPsec は transport mode で GRE header 以降を保護する。Transform Set、PFS、transport mode の一般説明は関連する IPsec ページを参照する。
4. HubのmGREとNHRPを設定する
Section titled “4. 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 を受け取り、Tunnel / NBMA mapping を動的に学習する。ip nhrp map multicast dynamic は、登録済み Spoke を EIGRP / OSPF の multicast 配送先に加える。
Phase 1 では NHRP Redirect を使わないため、ip nhrp redirect は設定しない。Hub が mGRE であることは、Spoke 間を直接通信させるためではなく、Spoke ごとの Tunnel interface を Hub に作らず収容するためである。
tunnel key 100 と ip nhrp authentication DMVPN100 は任意、ip nhrp network-id 100 は NHRP を有効化するために必要である。三つの違いは 三つの識別設定 を参照する。
5. Spoke1のpoint-to-point GREとNHRPを設定する
Section titled “5. Spoke1のpoint-to-point GREと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 nhs 10.255.0.1 ip nhrp network-id 100 ip tcp adjust-mss 1360 tunnel source GigabitEthernet0/0 tunnel destination 203.0.113.2 tunnel key 100 tunnel protection ipsec profile DMVPN-IPSEC-PROFILE no shutdownexittunnel destination 203.0.113.2 は、GRE の外側宛先を Hub に固定し、Tunnel0 を point-to-point GRE として動作させる。tunnel mode gre multipoint は設定しない。
ip nhrp map は Hub の Tunnel address 10.255.0.1 を NBMA address 203.0.113.2 に対応付け、ip nhrp nhs は登録先を Hub にする。point-to-point GRE では multicast も固定した tunnel destination へ送られるため、Spoke に ip nhrp map multicast は必要ない。
Phase 1 の Spoke は remote Spoke の NHRP mapping を作らないため、ip nhrp shortcut も設定しない。
6. Spoke2のpoint-to-point GREとNHRPを設定する
Section titled “6. Spoke2のpoint-to-point GREと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 nhs 10.255.0.1 ip nhrp network-id 100 ip tcp adjust-mss 1360 tunnel source GigabitEthernet0/0 tunnel destination 203.0.113.2 tunnel key 100 tunnel protection ipsec profile DMVPN-IPSEC-PROFILE no shutdownexitSpoke2 も Spoke1 と同様に、GRE、NHRP、IKEv2 の remote peer を Hub だけに固定する。
7. 動的ルーティングを設定する
Section titled “7. 動的ルーティングを設定する”EIGRP と OSPF は代替構成である。以下のどちらか一方だけを設定する。
EIGRPを使う場合
Section titled “EIGRPを使う場合”Hub の設定。
interface Tunnel0 no ip split-horizon 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.255exitHub の split horizon を無効化し、Spoke1 から学習した LAN 経路を同じ Tunnel0 の先にある Spoke2 へ広告できるようにする。split horizon の仕組みは Hubのsplit horizon を参照する。
Phase 1 では EIGRP の next-hop-self を残す。Hub が別の Spoke へ経路を広告するときに next hop を Hub へ変更することで、Spoke 間の traffic は Hub へ送られる。Phase 2 用の no ip next-hop-self eigrp 100 は設定しない。
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 point-to-multipoint 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 point-to-multipoint 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 point-to-multipoint ip ospf 10 area 0exit
interface GigabitEthernet0/1 ip ospf 10 area 0exit全ルータで OSPF network type を point-to-multipoint にそろえ、DR / BDR を使わずに Hub と各 Spoke が Adjacency を形成する。Spoke に作られる remote Tunnel address の /32 route は Hub を next hop とするため、Phase 1 の転送方法と一致する。Phase 3 のように shortcut と競合しないため、この構成では /32 route を distribute-list で除外しない。
8. 設定を保存する
Section titled “8. 設定を保存する”3 台すべてで設定を保存する。
endwrite memoryHubでNHRP登録を確認する
Section titled “HubでNHRP登録を確認する”Hub で確認する。
show dmvpnshow ip nhrpHub が次の動的 mapping を学習していることを確認する。
10.255.0.11 -> 198.51.100.210.255.0.12 -> 192.0.2.2SpokeでHubとのpeerを確認する
Section titled “SpokeでHubとのpeerを確認する”Spoke1 と Spoke2 で確認する。
show interface Tunnel0show ip nhrp nhsshow ip nhrpshow dmvpnTunnel0 の Tunnel source / destination が自分の NBMA address と 203.0.113.2 の組み合わせになり、NHS 10.255.0.1 が応答していることを確認する。各 Spoke に remote Spoke の動的 NHRP entry は必要ない。
動的ルーティングを確認する
Section titled “動的ルーティングを確認する”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 が Hub の 10.255.0.1 になることを確認する。Spoke2 では 192.168.1.0/24 を同じように確認する。
Spoke間通信がHubを通ることを確認する
Section titled “Spoke間通信がHubを通ることを確認する”Spoke1 で実行する。
ping 192.168.2.1 source 192.168.1.1 repeat 5traceroute 192.168.2.1 source 192.168.1.1Spoke1 からの packet が最初に Hub の Tunnel address 10.255.0.1 へ送られ、その後 Spoke2 へ転送されることを確認する。通信後も Spoke1 に 10.255.0.12 -> 192.0.2.2 という動的 mapping は作られない。
IKEv2とIPsecを確認する
Section titled “IKEv2とIPsecを確認する”show crypto ikev2 sashow crypto ipsec sashow crypto sessionHub には Spoke1 と Spoke2 に対する SA が存在する。各 Spoke の remote peer は Hub の 203.0.113.2 だけになり、Spoke1 と Spoke2 の間には直接の IKEv2 / IPsec SA が作られない。Spoke 間の traffic を流すと、Hub 上の両方の IPsec SA で encaps / decaps counter が増える。
よくある失敗
Section titled “よくある失敗”| 症状 | 確認する場所 |
|---|---|
| Hub に Spoke が登録されない | NBMA 疎通、Hub の wildcard Profile、Spoke の固定 remote address、PSK、NHRP authentication |
| Spoke の Tunnel0 が down | tunnel source、tunnel destination 203.0.113.2、underlay route |
| EIGRP neighbor はできるが remote LAN を学習しない | Hub の no ip split-horizon eigrp 100、LAN の network statement |
| EIGRP で remote LAN の next hop が remote Spoke になる | Hub に Phase 2 用の no ip next-hop-self eigrp 100 が残っていないか |
| OSPF neighbor が形成されない | 全ルータの point-to-multipoint、timer、passive-interface |
| Spoke 間通信が暗号化されない | Hub-Spoke 両方の Tunnel protection、二つの Hub-Spoke SA の counter |
| 小さい ping だけ通る | Tunnel MTU、TCP MSS、underlay の path MTU、NAT-T |
通常推奨される構成
Section titled “通常推奨される構成”この例では Hub の IKEv2 Profile がすべての remote IPv4 address に一致し、全 Spoke が共通 PSK を使用する。管理可能な環境では、IKEv2 証明書認証や Spoke ごとの認証・認可を検討する。
Hub を冗長化する場合は、複数 NHS、dual-hub、dual-cloud のいずれを使うかを設計し、動的ルーティングと障害時の経路を確認する。
暗号方式は機器の対応範囲とポリシーに合わせる。AES-GCM、明示的な PRF、ECDH を使う構成は PRFとAEAD を参照する。
- DMVPNの仕組みとPhase 1・2・3
- Cisco機器でDMVPN Phase 2を設定する
- Cisco機器でDMVPN Phase 3を設定する
- Cisco機器でGRE over IPsecを設定する
- Cisco機器でEIGRPを設定する
- Cisco機器でOSPFを設定する