コンテンツにスキップ

Cisco ASAでIKEv2 IPsec VPNを設定する

二台の Cisco ASA で、IKEv2、PSK、static crypto map を使った policy-based site-to-site IPsec VPN を設定する。

ASA のインターフェース、security level、ACL、NAT は Cisco ASAの全体像、crypto ACL、crypto map、tunnel-group、identity NAT の関係は Cisco ASAのIPsec設定要素 を参照する。


flowchart LR
    hosta["Host-A<br/>192.168.1.10"] --> lana["LAN-A<br/>192.168.1.0/24"]
    lana --> asaa["ASA-A<br/>inside: 192.168.1.1<br/>outside: 203.0.113.1"]
    asaa ==>|IKEv2 / ESP| asab["ASA-B<br/>outside: 203.0.113.2<br/>inside: 192.168.2.1"]
    asab --> lanb["LAN-B<br/>192.168.2.0/24"]
    lanb --> hostb["Host-B<br/>192.168.2.10"]

項目 ASA-A ASA-B
outside interface GigabitEthernet0/0 GigabitEthernet0/0
outside address 203.0.113.1/24 203.0.113.2/24
inside interface GigabitEthernet0/1 GigabitEthernet0/1
inside address 192.168.1.1/24 192.168.2.1/24
local LAN 192.168.1.0/24 192.168.2.0/24
remote LAN 192.168.2.0/24 192.168.1.0/24
peer address 203.0.113.2 203.0.113.1
PSK ChangeMe-StrongKey ChangeMe-StrongKey

Host-A の default gateway は 192.168.1.1、Host-B の default gateway は 192.168.2.1 とする。203.0.113.0/24 はドキュメント用の例示アドレスである。実機では、インターフェースID、アドレス、ネットワーク、PSKを実際の値へ置き換える。

この構成では二台の outside が同じセグメントにあり、peer への経路は connected route になる。peer がルータの先にある場合は、outside 側に peer まで到達できる経路が必要である。


1. インターフェースと経路を設定する

Section titled “1. インターフェースと経路を設定する”

ASA-A の設定。

enable
configure terminal
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 203.0.113.1 255.255.255.0
no shutdown
exit
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 192.168.1.1 255.255.255.0
no shutdown
exit

ASA-B の設定。

enable
configure terminal
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 203.0.113.2 255.255.255.0
no shutdown
exit
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 192.168.2.1 255.255.255.0
no shutdown
exit

nameif で付けた inside と outside は、後続の NAT、IKEv2、crypto map から参照される。no shutdown がないインターフェースは有効にならず、IPアドレスだけを設定しても通信できない。

このnameifでは、insideのsecurity levelは省略時に100、outsideは既定の0になる。security-level 100とsecurity-level 0は、意図する値を設定へ明示するための任意コマンドである。

設定後、両方の ASA でインターフェース状態と outside 間の疎通を確認する。

show interface ip brief
ping 203.0.113.2

ASA-B では ping 203.0.113.1 を実行する。outside 同士で疎通できない状態では、IKEv2 の設定を進めても SA は確立しない。

ASA-Aからremote LANをoutsideへ転送する静的経路を設定する。

route outside 192.168.2.0 255.255.255.0 203.0.113.2

ASA-Bでは送信元と宛先の拠点を反転する。

route outside 192.168.1.0 255.255.255.0 203.0.113.1

crypto mapは保護する通信とpeerを定義するが、remote LANへのルーティング経路を作成しない。各ASAがremote LANをoutsideへ転送できる経路が必要である。この構成では対向ASAのoutsideアドレスをnext hopにしている。ISPルータを経由する構成では、そのルータをnext hopにしたremote LANへの経路またはdefault routeを使用する。

経路を確認する。

show route

remote LANへの経路がoutsideを指していることを確認する。


2. local LANとremote LANのオブジェクトを作成する

Section titled “2. local LANとremote LANのオブジェクトを作成する”

ASA-A の設定。

object network LOCAL-LAN
subnet 192.168.1.0 255.255.255.0
exit
object network REMOTE-LAN
subnet 192.168.2.0 255.255.255.0
exit

ASA-B の設定。

object network LOCAL-LAN
subnet 192.168.2.0 255.255.255.0
exit
object network REMOTE-LAN
subnet 192.168.1.0 255.255.255.0
exit

同じオブジェクト名を使用しているが、LOCAL-LAN は各 ASA から見た自拠点、REMOTE-LAN は対向拠点を表す。そのため、両端で subnet の値は反対になる。


3. VPN通信へidentity NATを設定する

Section titled “3. VPN通信へidentity NATを設定する”

ASA-A と ASA-B の両方で設定する。

nat (inside,outside) 1 source static LOCAL-LAN LOCAL-LAN destination static REMOTE-LAN REMOTE-LAN no-proxy-arp route-lookup

この規則は、LOCAL-LANからREMOTE-LANへの通信について、送信元と宛先を同じアドレスのまま維持する。提示した新規構成には他のNAT規則がないため、identity NATを省略してもアドレスは変換されない。insideからoutsideへのdynamic PATなどが存在し、その規則がVPN通信にも一致する構成では、crypto ACLと同じアドレスを維持するためにidentity NATが必要である。

送信元だけでなく宛先のREMOTE-LANも条件にするため、通常のインターネット宛通信までidentity NATされない。コマンド中の1はSection 1の先頭へ挿入するline番号であり、既存のmanual NATより先に評価させる。

no-proxy-arpとroute-lookupは任意オプションである。no-proxy-arpは、このidentity NATに基づいてoutsideでproxy ARPへ応答することを防ぐ。route-lookupはNAT規則のoutsideだけで出力先を決めず、手順1で作成したremote LANへの静的経路を使ってegressを決める。

評価順序を確認する。

show nat detail

VPN用identity NATが、同じ通信に一致する可能性のあるPATやmanual NATより前に表示されることを確認する。


ASA-A と ASA-B の両方で設定する。

access-list VPN-TRAFFIC extended permit ip object LOCAL-LAN object REMOTE-LAN

このACLは access-group でインターフェースへ適用しない。後でcrypto mapの match address から参照し、IPsecで保護する通信を選ぶ。

両端ともコマンドの見た目は同じだが、手順2で LOCAL-LAN と REMOTE-LAN の値を反転している。このため、ASA-Aでは 192.168.1.0/24 → 192.168.2.0/24、ASA-Bでは 192.168.2.0/24 → 192.168.1.0/24 が選択される。


ASA-A と ASA-B の両方で設定する。

crypto ikev2 policy 10
encryption aes-256
integrity sha256
group 14
prf sha256
lifetime seconds 86400
exit

crypto ikev2 policy 10 は、IKEv2 SA の暗号化、完全性確認、PRF、DH groupを一つにまとめる。10 はローカルでの優先順位であり、対向と同じ番号にする必要はない。両端で共通のアルゴリズムがなければ IKEv2 SA は確立しない。

lifetime seconds 86400 は既定値と同じであるため省略できる。この設定では、使用する値を明示するため記載している。

続けて、両方のASAでoutside interfaceのIKEv2を有効にする。

crypto ikev2 enable outside

IKEv2 policyを作成しただけでは、outsideでIKEv2を受け付けない。crypto ikev2 enable outside は、VPNを終端するインターフェースでIKEv2を動作させるために必要である。

ASA自身が終端するIKE、NAT-T、ESPのパケットは、既定ではoutsideのinterface ACLへUDP 500、UDP 4500、ESPのpermitを追加しなくても受け付けられる。復号後にASAを通過する通信の扱いは手順9で確認する。


ASA-A と ASA-B の両方で設定する。

crypto ipsec ikev2 ipsec-proposal IPSEC-PROPOSAL
protocol esp encryption aes-256
protocol esp integrity sha-256
exit

このproposalは、VPNを通る実データをESPで保護するときの方式を定義する。aes-256 が機密性、sha-256 が完全性確認とデータ送信元認証を担当する。手順5のIKEv2 policyと同じ種類のアルゴリズム名が現れるが、保護するSAが異なる。


7. crypto mapを作成してoutsideへ適用する

Section titled “7. crypto mapを作成してoutsideへ適用する”

ASA-A の設定。

crypto map OUTSIDE-MAP 10 match address VPN-TRAFFIC
crypto map OUTSIDE-MAP 10 set peer 203.0.113.2
crypto map OUTSIDE-MAP 10 set ikev2 ipsec-proposal IPSEC-PROPOSAL
crypto map OUTSIDE-MAP 10 set pfs group14
crypto map OUTSIDE-MAP interface outside

ASA-B の設定。

crypto map OUTSIDE-MAP 10 match address VPN-TRAFFIC
crypto map OUTSIDE-MAP 10 set peer 203.0.113.1
crypto map OUTSIDE-MAP 10 set ikev2 ipsec-proposal IPSEC-PROPOSAL
crypto map OUTSIDE-MAP 10 set pfs group14
crypto map OUTSIDE-MAP interface outside

match address は保護する通信、set peer は送信先となる対向ASA、set ikev2 ipsec-proposal はESPの方式をcrypto map entryへ結びつける。この三つがなければ、ASAは「どの通信を、どの対向へ、どの方式で保護するか」を決定できない。

set pfs group14 は一般には任意である。この構成ではChild SAを作り直すときにも新しいDH鍵交換を行うため設定し、両端を同じgroupにする。

crypto map OUTSIDE-MAP interface outside は、同じ名前を持つcrypto map set全体をoutsideへ適用する。entryを作成しただけではインターフェース上で処理されないため、この適用が必要である。


ASA-A の設定。

tunnel-group 203.0.113.2 type ipsec-l2l
tunnel-group 203.0.113.2 ipsec-attributes
ikev2 remote-authentication pre-shared-key ChangeMe-StrongKey
ikev2 local-authentication pre-shared-key ChangeMe-StrongKey
exit

ASA-B の設定。

tunnel-group 203.0.113.1 type ipsec-l2l
tunnel-group 203.0.113.1 ipsec-attributes
ikev2 remote-authentication pre-shared-key ChangeMe-StrongKey
ikev2 local-authentication pre-shared-key ChangeMe-StrongKey
exit

tunnel-group名をpeerのoutsideアドレスにすることで、到着したIKEv2通信をpeer固有の認証設定へ対応づける。type ipsec-l2l は拠点間VPNとして作成するために必要である。

remote-authentication は相手が示した認証情報を検証し、local-authentication は自分が相手へ示す認証情報を生成する。この構成では同じPSKを双方向に使うが、IKEv2のlocalとremoteは別々に設定する。


ASA 7.0(1)以降ではsysopt connection permit-vpnが既定で有効である。既定動作を設定へ明示する場合は、ASA-AとASA-Bの両方で任意に設定する。

sysopt connection permit-vpn

この構成では、復号後のVPN通信がoutsideのinterface ACLと転送先インターフェースのegress ACLを迂回する。コマンドを省略しても、既定値が変更されていなければ同じ動作になる。

VPN経由で到達できるプロトコルやホストをASAのinterface ACLでさらに制限する構成では、この動作を前提にせず、復号後の通信とACLに沿ってアクセス制御を設計する。

inside interfaceへingress ACLが適用されている場合、local LANからremote LANへの通信はそのACLでも許可する必要がある。


ASA-A と ASA-B の両方で実行する。

end
write memory

両方のASAで実行する。

show running-config crypto ikev2
show running-config crypto ipsec
show running-config crypto map
show running-config tunnel-group
show access-list VPN-TRAFFIC
show nat detail
show running-config all sysopt

確認する内容は次のとおり。

  • IKEv2 policyとIPsec proposalに意図したアルゴリズムが表示される
  • crypto mapのpeerが対向ASAのoutsideアドレスになっている
  • crypto mapがoutsideへ適用されている
  • tunnel-group名がpeerアドレスになっている
  • identity NATがdynamic PATより先に評価される位置にある
  • sysopt connection permit-vpnが有効である

パケットの処理経路を確認する

Section titled “パケットの処理経路を確認する”

ASA-AでHost-AからHost-BへのICMPを模擬する。

packet-tracer input inside icmp 192.168.1.10 8 0 192.168.2.10 detailed

ASA-Bでは送信元と宛先を反転する。

packet-tracer input inside icmp 192.168.2.10 8 0 192.168.1.10 detailed

NATで送信元アドレスが変わらず、VPN phaseでcrypto mapに一致することを確認する。実通信を流す前の静的な設定確認であり、SAの確立そのものは次の手順で確認する。

Host-AからHost-Bへpingを送信する。

ping 192.168.2.10

最初のパケットを契機にIKEv2 SAとChild SAが作成されるため、最初の数パケットはタイムアウトする場合がある。Host-BからHost-Aへの通信も確認する。

両方のASAで実行する。

show crypto ikev2 sa
show crypto ikev2 sa detail

Status が READY または UP-ACTIVE となり、localとremoteに両ASAのoutsideアドレス、認証方式にPSK、暗号方式にAES-256、DH groupに14が表示されることを確認する。

show crypto ipsec sa
show vpn-sessiondb detail l2l

確認する内容は次のとおり。

  • local selectorとremote selectorが両拠点LANになっている
  • ESPの暗号化方式がAES-256、完全性確認方式がSHA-256になっている
  • Host-AとHost-Bの通信に応じてencaps、decaps、encrypt、decryptのカウンタが増える
  • 片側だけでなく両方向のパケットカウンタが増える

症状 確認する場所
IKEv2 SAが作成されない outside間の到達性、crypto ikev2 enable outside、IKEv2 policy、peerアドレス、tunnel-group名、PSK
IKEv2 SAはあるがIPsec SAがない crypto ACLの反転、IPsec proposal、crypto mapの関連づけ、PFS group
IPsec SAはあるが通信できない Hostのdefault gateway、identity NAT、inside ACL、戻り経路、selector、sysopt connection permit-vpn
encapsだけ増えてdecapsが増えない 対向側crypto ACL、対向側NAT、戻り経路、途中でのESPまたはUDP 4500の遮断
VPN通信がoutsideアドレスへPATされる identity NATの内容とNAT tableでの評価順序

SAを作り直して確認する場合、次のコマンドを任意で使用できる。通信中のセッションを切断するため、影響を確認してから実行する。

clear crypto ikev2 sa
clear crypto ipsec sa