Meraki以外のVPNピア
Meraki MX では サイト間VPNとして Auto VPN機能を実装しています。これはMeraki MX が自動的に接続先MXのIPアドレスやNATトラバーサルなどを必要な設定を行い、ワンクリックでサイト間VPNトンネルを作成できる独自のソリューションです。
ただし、この Auto VPN機能はMeraki MXの独自の実装であるため、拠点にそれぞれMXアプライアンスが設置されている必要があります。
ネットワークのマイグレーションの一環でMeraki MX以外の機器とのIPsecが必要な場合、他社との接続、Azure/AWS/GCPなどのパブリッククラウドとの接続などの場合で、Meraki MX以外の機器とIPsec VPNを構築したい場合もあると思います。
それを実現するのが「Meraki以外のVPNピア」 (non-Meraki VPN peer) です。
こちらはIPSECパラメータを指定することで、Meraki MX以外の機器とのIPsec接続を実現することができます。
対抗機器側の設定サンプルとして、IOS-XEルータで接続設定、接続確認ができましたので、記録としてこちらに記事として記載します。
Mrakiダッシュボード側の設定
「セキュリティ&SD-WAN」「サイト間VPN」で、下の方にある「オーガナイゼーション全体の設定」にある「Meraki以外のVPNピア」の項目を設定していきます。
IOS-XEとの対抗を前提とした設定項目は以下です
1. 名前
2. IKEバージョン
3. IPsecポリシー
4. Public IP / Hostname
5. プライベートサブネット
6. 事前共有シークレット
7. 利用可否
名前
IPsec接続先をMerakiダッシュボード認識するための名称になります。
対抗先機器のIPsec設定パラメータに影響はありませんので、任意の値を設定可能です
IKEバージョン
IKEv1、もしくは、IKEv2 から選択可能です。対抗機器に設定予定のパラメータを考慮して決定しましょう。
IPsecポリシー
IPsec設定の各種パラメータであるフェーズ1の暗号、認証、Diffie-Hellman、ライフタイム等の設定を行います。デフォルト設定値、AWS/Azure/Umblrellaなど向けの設定値の他、カスタムでの設定が可能です。
今回は今使っている環境に合わせてカスタムでパラメータを設定しました
Public IP / Hostname
接続先のIPアドレスを入力します
プライベートサブネット
対抗拠点のIPアドレスセグメントを入力します
事前共有シークレット
IPsecの事前共有シークレットを設定します
利用可否
この「Meraki以外のVPNピア」がどのMXに設定するかを指定する項目になります。デフォルト状態ではすべてのMXでこの「Meraki以外のVPNピア」が有効になります(対抗先もその通り設定する必要があります)。
一方で特定のサイトでのみ「Meraki以外のVPNピア」を有効にしたい場合は、ここにネットワークのタグを指定します。今回は特定のサイトのみで有効化したいため、タグを指定します。
ネットワークのタグはネットワークの一覧から確認、設定が可能です
最終的にMeraki Dashboardでの設定はこちらのようになりました
IOS-XEの設定
IOS-XEでIPsecを設定するのに当たって、crypto-mapをあてるのか、vtiなのか、vtiのときに tunnel mode はtunnelなのかtransportなのか、tunnel mode は gre なのか ipsec なのか、色々迷いました。以下にASA向けの設定サンプルがあり、こちらでは crypto-map で設定がされていたので、これにそった設定をしていきたいと思います。
IOS-XEでのCrypto Mapサポート終了について
Cisco IOS-XEにおいてIPsecに使用されるCrypto Map機能のサポート終了がアナウンスされています。
Crypto Mapを使用IPsec機能はIOS-XE 17.6.6までのサポートになります。よって、今回はマイグレーション方法として機能追加されたMulti-SA VTI機能の紹介とMulti-SA VTIで設定していきます。
Multi-SA VTIは IOS-XE 16.12で機能実装しており、Crypto Mapとのコンパチ接続をサポートする機能になります。
IOS-XEの設定
Cisco IOS XEルータでのマルチSA仮想トンネルインターフェイスの設定というドキュメントがあるので、そちらを参考にいただくと分かりやすいのです。
私の環境ではDMVPN向けの設定を適宜流用してこのような設定をおこないました。
crypto ikev2 proposal default
encryption aes-cbc-256 aes-cbc-192 aes-cbc-128
integrity sha512 sha384 sha256
group 19 14 21
crypto ikev2 keyring MERAKI_KR
peer MERAKI_PEER
address 192.0.2.1 255.255.255.255
pre-shared-key 0 cisco123
!
crypto ikev2 profile MERAKI_PROFILE
match identity remote address 192.0.2.1
authentication remote pre-share
authentication local pre-share
keyring local MERAKI_KR
dpd 30 5 on-demand
crypto ipsec security-association replay window-size 1024
crypto ipsec transform-set MERAKI_TRANSFORM esp-aes 256 esp-sha256-hmac
mode tunnel
crypto ipsec fragmentation after-encryption
crypto ipsec profile MERAKI_IPSEC
set transform-set MERAKI_TRANSFORM
set ikev2-profile MERAKI_PROFILE
reverse-route
!
interface Tunnel1
ip unnumbered GigabitEthernet0/0/0
tunnel source GigabitEthernet0/0/0
tunnel mode ipsec ipv4
tunnel destination 192.0.2.1
tunnel protection ipsec policy ipv4 CRYPTO_ACL
tunnel protection ipsec profile MERAKI_IPSEC
!
ip access-list extended CRYPTO_ACL
10 permit ip 192.168.0.0 0.0.0.255 172.16.0.0 0.0.0.255
ポイントとしては、
- crypto ipsec profile に reverse-route がはいること
- ACL (CRYPTO_ACL) で暗号化対象のトラフィックを指定すること
- IPsec接続後、このACLがルーティングテーブルに載る
- ipsec mode ipsec ipv4 , mode tunnel
- tunnel のIPはMeraki側の指定がないのでなんでもよいのですが、ip unnumbred で WANポートを指定しています
IKEv2のパラメータは他の拠点向けにつかっているものを踏襲しています。それぞれの環境にあわせていただければと思います。
確認
#show crypto ikev2 sa
IPv4 Crypto IKEv2 SA
Tunnel-id Local Remote fvrf/ivrf Status
1 x.x.x.x/4500 y.y.y.y/4500 none/lab READY
Encr: AES-CBC, keysize: 256, PRF: SHA256, Hash: SHA256, DH Grp:14, Auth sign: PSK, Auth verify: PSK
Life/Active Time: 86400/50700 sec
CE id: 1051, Session-id: 27
Local spi: C708D696D384DD39 Remote spi: AB6BAC2D39E9DE04
#show crypto ipsec sa
interface: Tunnel1
Crypto map tag: Tunnel8-head-0, local addr 192.0.2.1
protected vrf: lab
local ident (addr/mask/prot/port): (192.168.0.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (172.16.0.0/255.255.255.0/0/0)
current_peer 192.0.2.2 port 4500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 3, #pkts encrypt: 3, #pkts digest: 3
#pkts decaps: 3, #pkts decrypt: 3, #pkts verify: 3
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0
local crypto endpt.: 192.0.2.1, remote crypto endpt.: 192.0.2.2
plaintext mtu 1390, path mtu 1460, ip mtu 1460, ip mtu idb Tunnel0
current outbound spi: 0xC99013F6(3381662710)
PFS (Y/N): N, DH group: none
inbound esp sas:
spi: 0xAF132A9(183579305)
transform: esp-256-aes esp-sha256-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 3440, flow_id: ESG:1440, sibling_flags FFFFFFFF80004048, crypto map: Tunnel8-head-0, initiator : True
sa timing: remaining key lifetime (k/sec): (4608000/3338)
IV size: 16 bytes
replay detection support: Y replay window size: 1024
Status: ACTIVE(ACTIVE)
inbound ah sas:
inbound pcp sas:
outbound esp sas:
spi: 0xC99013F6(3381662710)
transform: esp-256-aes esp-sha256-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 3439, flow_id: ESG:1439, sibling_flags FFFFFFFF80004048, crypto map: Tunnel8-head-0, initiator : True
sa timing: remaining key lifetime (k/sec): (4608000/3338)
IV size: 16 bytes
replay detection support: Y replay window size: 1024
Status: ACTIVE(ACTIVE)
outbound ah sas:
outbound pcp sas:
protected vrf: lab
local ident (addr/mask/prot/port): (192.168.0.0/255.255.255.0/0/0)
remote ident (addr/mask/prot/port): (172.16.0.0/255.255.255.0/0/0)
current_peer 192.0.2.2 port 4500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 8114, #pkts encrypt: 8114, #pkts digest: 8114
#pkts decaps: 7944, #pkts decrypt: 7944, #pkts verify: 7944
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0
local crypto endpt.: 192.0.2.1, remote crypto endpt.: 192.0.2.2
plaintext mtu 1390, path mtu 1460, ip mtu 1460, ip mtu idb Tunnel0
current outbound spi: 0xC7A6FF6F(3349610351)
PFS (Y/N): N, DH group: none
inbound esp sas:
spi: 0x494E1C77(1229855863)
transform: esp-256-aes esp-sha256-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 3438, flow_id: ESG:1438, sibling_flags FFFFFFFF80004048, crypto map: Tunnel8-head-0, initiator : True
sa timing: remaining key lifetime (k/sec): (4607996/3288)
IV size: 16 bytes
replay detection support: Y replay window size: 1024
Status: ACTIVE(ACTIVE)
inbound ah sas:
inbound pcp sas:
outbound esp sas:
spi: 0xC7A6FF6F(3349610351)
transform: esp-256-aes esp-sha256-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 3437, flow_id: ESG:1437, sibling_flags FFFFFFFF80004048, crypto map: Tunnel8-head-0, initiator : True
sa timing: remaining key lifetime (k/sec): (4607997/3288)
IV size: 16 bytes
replay detection support: Y replay window size: 1024
Status: ACTIVE(ACTIVE)
outbound ah sas:
outbound pcp sas:
疎通確認
Meraki Dashboard から対抗機器への疎通確認が可能です。
アプライアンスの画面から、ツールでpingが便利ですね。
今後の課題
今回はMulti-SA VTIで接続性を確認できました。
今後それ以外の方法(単純にVTIを使うなど)で接続できるのかは試してみたいと思います。
謝辞
本資料の作成に当たりこちらの投稿を参考にさせていただきました。私の課題のほぼすべてこちらで解決していたので、大変参考になりました。