VPN / IPsec
IPsec(IP security)は、IPプロトコルファミリーに暗号化や認証などのセキュリティー機能を提供する一連のプロトコル群です。本製品は、IPsecトンネルインターフェースを通じて、次のIPsec関連機能をサポートしています。
- サポートするIPプロトコルファミリー
- デリバリー(外側)プロトコル:IPv4/IPv6
- ペイロード(内側)プロトコル:IPv4/IPv6
- デリバリー(外側)プロトコル:IPv4/IPv6
- 鍵交換と通信路のネゴシエーション機能
- IKEv2
- IKEv2:INIT、AUTH、CREATE_CHILD_SA、INFORMATIONAL交換
- 暗号化アルゴリズム:AES256、AES192、AES128
- 認証アルゴリズム:SHA512、SHA256、SHA1
- Diffie-Hellmanグループ:18、16、15、14、5、2
- 認証方式:事前共有鍵、証明書
- IKEv2:INIT、AUTH、CREATE_CHILD_SA、INFORMATIONAL交換
- IKEv2
- 通信を保護するための機能
- IPsecプロトコル:ESP(暗号化・認証)
- IPsec動作モード
- トンネルモード(IPsecトンネルインターフェース)
- トランスポートモード(L2TPv3、GREトンネルインターフェース)
- トンネルモード(IPsecトンネルインターフェース)
- 暗号化アルゴリズム:AES256、AES192、AES128
- 認証アルゴリズム:AES-GCM(16/12/8バイトICV)、SHA512、SHA256、SHA1
- IPsecプロトコル:ESP(暗号化・認証)
- その他の機能
- DPD(Dead Peer Detection)
- NAT-T(NAT-Traversal)
- DPD(Dead Peer Detection)
IPsec機能は、IPsecトンネルインターフェースだけでなく、L2TPv3、GREの各トンネルインターフェースでも利用できますが、本解説編ではIPsecトンネルインターフェースとマルチポイントIPsecトンネルインターフェースに特化した説明を行います。IPsecを利用可能な他のトンネルインターフェースについては下記の各解説編をご参照ください。
トンネルインターフェース全般については「VPN」の「トンネルインターフェース」を、インターフェース全般については「インターフェース」の「一般設定」をご覧ください。
IPsecを使用するための具体的かつ全体的な設定については「設定例集」をご覧ください。
また、本製品では、証明書認証を使用したルーター間のIPsec VPN接続にも対応しています。
詳しくは、外部CAが発行した証明書を使用したルーター間のIPsec VPN接続をご覧ください。
基本設定
IPsec over IPv4
IPv4ネットワーク上にIPsecトンネルインターフェースを作成するには、次の手順にしたがいます。
以下では、上記構成図のルーターAを例に、基本的な拠点間IPsec VPNを構築するための具体的な設定手順を示します。
なお、前提事項として、ルーターA・BはIPv4でインターネットに接続しているものとします。WAN側インターフェースのIPアドレスは固定であり、ルーター間でのIP通信もできているものとします。
- ISAKMPの事前共有鍵を設定します。これにはcrypto isakmp keyコマンドを使います。addressパラメーターで指定するのは、IPsecの接続相手(対向装置)、すなわち、ルーターBのIPアドレスです。
awplus(config)# crypto isakmp key ouR4ecret address 10.2.2.2
- トンネルインターフェースtunnel0を作成します。
awplus(config)# interface tunnel0
- トンネリング方式としてipsec ipv4(IPsec over IPv4)を指定します。これには、tunnel mode ipsecコマンドを使います。
awplus(config-if)# tunnel mode ipsec ipv4
- トンネルインターフェースから送信するデリバリーパケットの始点・終点アドレス(自装置と対向装置のIPアドレス)を指定します。これには、tunnel source / tunnel destinationコマンドを使います。
awplus(config-if)# tunnel source 10.1.1.1 awplus(config-if)# tunnel destination 10.2.2.2
- トンネルインターフェースに対し、IPsecによる保護を適用します。これにはtunnel protection ipsecコマンドを使います。
awplus(config-if)# tunnel protection ipsec
- トンネルインターフェースtunnel0にIPアドレスを設定して、同インターフェースでIPv4パケットのルーティングが行われるようにします。これには、ip addressコマンドを使います。
awplus(config-if)# ip address 192.168.254.1/30
- 対向拠点へのスタティック経路を登録します。これには、ip routeコマンドを使います。
awplus(config-if)# exit awplus(config)# ip route 192.168.20.0/24 tunnel0
IPsec over IPv6
IPv6ネットワーク上にIPsecトンネルインターフェースを作成するには、次の手順にしたがいます。
以下では、上記構成図のルーターAを例に、基本的な拠点間IPsec VPNを構築するための具体的な設定手順を示します。
なお、前提事項として、ルーターA・BはIPv6でインターネットに接続しているものとします。WAN側インターフェースのIPv6アドレスは固定であり、ルーター間でのIPv6通信もできているものとします。
- ISAKMPの事前共有鍵を設定します。これにはcrypto isakmp keyコマンドを使います。addressパラメーターで指定するのは、IPsecの接続相手(対向装置)、すなわち、ルーターBのIPv6アドレスです。
awplus(config)# crypto isakmp key ouR4ecret address 2001:db8:2:2::2
- トンネルインターフェースtunnel0を作成します。
awplus(config)# interface tunnel0
- トンネリング方式としてipsec ipv6(IPsec over IPv6)を指定します。これには、tunnel mode ipsecコマンドを使います。
awplus(config-if)# tunnel mode ipsec ipv6
- トンネルインターフェースから送信するデリバリーパケットの始点・終点アドレス(自装置と対向装置のIPv6アドレス)を指定します。これには、tunnel source / tunnel destinationコマンドを使います。
awplus(config-if)# tunnel source 2001:db8:1:1::1 awplus(config-if)# tunnel destination 2001:db8:2:2::2
- トンネルインターフェースに対し、IPsecによる保護を適用します。これにはtunnel protection ipsecコマンドを使います。
awplus(config-if)# tunnel protection ipsec
- トンネルインターフェースtunnel0にIPv6のリンクローカルアドレスを設定して、同インターフェースでIPv6パケットのルーティングが行われるようにします。これには、ipv6 enableコマンドを使います。
awplus(config-if)# ipv6 enable
- 対向拠点へのスタティック経路を登録します。これには、ipv6 routeコマンドを使います。
awplus(config-if)# exit awplus(config)# ipv6 route 2001:db8:10:20::/64 tunnel0
外部CAが発行した証明書を使用したルーター間のIPsec VPN接続
外部CAが発行した証明書を使用し、ルーター間でIPsec VPN接続を行うには、次の手順にしたがいます。
なお、前提事項として、ルーターA・BはIPv4でインターネットに接続しているものとします。WAN側インターフェースのIPアドレスは固定であり、ルーター間でのIP通信もできているものとします。
本構成では、ルーター間で証明書認証を使用するため、サーバー側のIPsec設定に加えて、下記の設定が必要になります。
- (a) トラストポイントの設定
- (b) 外部CAのルート証明書をインポート
- (c) サーバー証明書の署名要求(CSR)の生成
- (d) サーバー証明書の発行
- (e) サーバー証明書のインポートとトラストポイントへの保存
トラストポイントの設定
- 外部CAのルート証明書、本製品の秘密鍵ペアとサーバー証明書を保存するためのトラストポイント「vpn_trust」を作成します。
これには、crypto pki trustpoint、enrollmentコマンドを使います。
awplus(config)# crypto pki trustpoint vpn_trust Created trustpoint "vpn_trust". awplus(ca-trustpoint)# enrollment terminal
- サーバー証明書のサブジェクト名(subjectName)とサブジェクト代替名(altSubjectName)を指定します。
これには、subject-nameコマンドとsubject-alt-nameコマンドを使います。
サブジェクト名のCommon Name(CN)およびサブジェクト代替名は、トンネルインターフェースに設定する本製品のローカル名(tunnel local nameコマンドで指定する文字列)と一致している必要があります。
awplus(ca-trustpoint)# subject-name /CN=test1.example.com awplus(ca-trustpoint)# subject-alt-name test1.example.com awplus(ca-trustpoint)# end
外部CAのルート証明書をインポート
- 外部CAのルート証明書ファイルをテキストエディターで開き、
-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----の行までをクリップボードにコピーします。
- トラストポイント「vpn_trust」に外部CAのルート証明書をインポートし、同トラストポイントの使用準備を完了します。
これにはcrypto pki authenticateコマンドを使います。
コマンドを実行すると次のようなメッセージが表示されるので、コピーしておいたものをペーストし、「Enter」キーを押してください。
awplus# crypto pki authenticate vpn_trust Paste the certificate PEM file into the terminal. Type "abort" to cancel.
- 内容を確認し、「Accept this certificate?」に「y」で答えてください。
awplus# crypto pki authenticate vpn_trust Paste the certificate PEM file into the terminal. Type "abort" to cancel. -----BEGIN CERTIFICATE----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ... xaPuyjGcQ3kCjW32sO0InQxjLPCp/celKKRZbIwETAor -----END CERTIFICATE----- Complete ("END CERTIFICATE" detected). Subject : /C=JP/O=EXAMPLE/CN=SampleRootCA Issuer : /C=JP/O=EXAMPLE/CN=SampleRootCA Valid From : Apr 7 05:32:30 2023 GMT Valid To : Apr 4 05:32:30 2033 GMT Fingerprint : D51BB535 8CBCFE2C BDD6E56B 759BB5C9 4CF9DCBF This is a self-signed CA certificate. The certificate has been validated successfully. Accept this certificate? (y/n): y Successfully authenticated trustpoint "vpn_trust".
サーバー証明書の署名要求(CSR)の生成
- 外部CA発行の証明書を利用するためのトラストポイント「vpn_trust」において、本製品の公開鍵ペア(秘密鍵と公開鍵)を生成し、サーバー証明書の署名要求(CSR)を生成します。
これにはcrypto pki enrollコマンドを使います。
コマンドを実行すると次のようにCSRの内容が出力されるので、-----BEGIN CERTIFICATE REQUEST-----から-----END CERTIFICATE REQUEST-----の行までをクリップボードにコピーしてPC上のファイル(ここでは「example_csr.pem」とします)に保存してください。
awplus# crypto pki enroll vpn_trust Using private key "server-default"... Cut and paste this request to the certificate authority: ----------------------------------------------------------------- -----BEGIN CERTIFICATE REQUEST----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ... sQCD7gbOkrMSEpDCSdB85P5on2Gs+CwpHsYlhA== -----END CERTIFICATE REQUEST----- -----------------------------------------------------------------
サーバー証明書の発行
- 前の手順でPC上に保存したCSRファイル(本例ではexample_csr.pem)を外部CAに渡し、サーバー証明書の発行を依頼してください。
ここでは、外部CAが発行した本製品のサーバー証明書を example_cert.pem という名前のファイルとして入手したものと仮定します。
サーバー証明書のインポートとトラストポイントへの保存
- 本製品のサーバー証明書をテキストエディターで開き、
-----BEGIN CERTIFICATE-----から-----END CERTIFICATE-----の行までをクリップボードにコピーします。
- サーバー証明書をトラストポイントに保存します。
これにはcrypto pki import pemコマンドを使います。
コマンドを実行すると次のようなメッセージが表示されるので、コピーしておいたものをペーストし、「Enter」キーを押してください。
awplus# crypto pki import vpn_trust pem terminal Paste the certificate PEM file into the terminal. Type "abort" to cancel.
- 内容を確認し、「Accept this certificate?」に「y」で答えてください。
awplus# crypto pki import vpn_trust pem terminal Paste the certificate PEM file into the terminal. Type "abort" to cancel. -----BEGIN CERTIFICATE----- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ... WF/C9/ijoy0UIjDFJms6uBo5gw== -----END CERTIFICATE----- Complete ("END CERTIFICATE" detected). Subject : /O=AlliedWare Plus/CN=test1.example.com Issuer : /C=JP/O=EXAMPLE/CN=SampleRootCA Valid From : Apr 19 07:41:24 2023 GMT Valid To : Apr 18 07:41:24 2024 GMT Fingerprint : FAB1FC57 6CD0DC6A 7198C3F2 67E37C0F 6FAE8AFB This is not a valid CA certificate. Attempting to import as a server certificate. The certificate has been validated successfully. Accept this certificate? (y/n): y The certificate was successfully imported.
IPsec VPNの設定
- ISAKMPの通信方式を規定するISAKMPプロファイルを作成します。
ここでは、crypto isakmp profileコマンドでISAKMPプロファイルを作成し、以下の情報を設定します。
- 自装置の認証方式(local authentication)
- 対向装置の認証方式(remote authentication)
- 証明書認証を行う場合に使用するトラストポイント(pki trustpoint)
- アルゴリズム(transform)
awplus(config)# crypto isakmp profile cert_vpn awplus(config-isakmp-profile)# local authentication certificate awplus(config-isakmp-profile)# remote authentication certificate awplus(config-isakmp-profile)# pki trustpoint vpn_trust awplus(config-isakmp-profile)# transform 1 integrity SHA256 encryption AES256 group 14 awplus(config-isakmp-profile)# exit
- 自装置の認証方式(local authentication)
- 対向ルーターとの間で使用するISAKMPプロファイルを指定します。
これにはcrypto isakmp peerコマンドを使います。
awplus(config)# crypto isakmp peer hostname test2.example.com profile cert_vpn
- トンネルインターフェースtunnel0を作成します。
これには、interfaceコマンドでトンネルインターフェースを作成し、以下の情報を設定します。
- トンネリング方式(tunnel mode ipsec)
- トンネルインターフェースから送信するデリバリーパケットの始点(自装置)アドレス(tunnel source)
- トンネルインターフェースから送信するデリバリーパケットの終点(対向装置)アドレス(tunnel destination)
- 自装置ID(ローカル名)(tunnel local name)
- 対向装置ID(リモート名)(tunnel remote name)
- トンネルインターフェースに対するIPsec保護の適用とIPsecプロファイルの指定(tunnel protection ipsec)
- トンネルインターフェースのIPアドレス(ip address)
awplus(config)# interface tunnel0 awplus(config-if)# tunnel mode ipsec ipv4 awplus(config-if)# tunnel source 10.1.1.1 awplus(config-if)# tunnel destination 10.2.2.2 awplus(config-if)# tunnel local name test1.example.com awplus(config-if)# tunnel remote name test2.example.com awplus(config-if)# tunnel protection ipsec awplus(config-if)# ip address 192.168.254.1/30 awplus(config-if)# exit
- トンネリング方式(tunnel mode ipsec)
- 対向拠点へのスタティック経路を登録します。これには、ip routeコマンドを使います。
awplus(config)# ip route 192.168.20.0/24 tunnel0
プロファイル
IPsec機能で使用する暗号化アルゴリズム、認証アルゴリズムなど各種パラメーターの組み合わせは、「プロファイル」と呼ぶ設定要素で定義します。プロファイルにはISAKMPプロファイルとIPsecプロファイルの2種類があり、それぞれISAKMP、IPsecの通信方式を規定します。本製品では、一般的なパラメーターの組み合わせが「デフォルトプロファイル」としてあらかじめ定義されているため、本製品同士の接続では複雑な設定は不要ですが、他機器と接続する場合などには必要に応じて「カスタムプロファイル」を定義して使用することも可能です。
以下、デフォルトプロファイルの内容と、カスタムプロファイルの定義・使用方法について説明します。
デフォルトプロファイル
本製品では、ISAKMP、IPsecそれぞれの通信で使用する一般的なパラメーターの組み合わせが、優先順位とともに「デフォルトプロファイル」としてあらかじめ定義されています。後述するカスタムプロファイルの設定を行っていない場合は、自動的にデフォルトプロファイルが使用されます。以下にその内容を示します。
デフォルトISAKMPプロファイル
デフォルトISAKMPプロファイルの内容は下記のとおりです。ISAKMPパラメーターの組み合わせは、優先度の高いほうから順にトランスフォーム 1 ~ 12の12通りが定義されています。
| AES256 | AES256 | AES256 | AES256 | AES128 | AES128 | |
| SHA256 | SHA256 | SHA1 | SHA1 | SHA256 | SHA256 | |
| 14 | 16 | 14 | 16 | 14 | 16 | |
| AES128 | AES128 | 3DES | 3DES | 3DES | 3DES | |
| SHA1 | SHA1 | SHA256 | SHA256 | SHA1 | SHA1 | |
| 14 | 16 | 14 | 16 | 14 | 16 | |
デフォルトIPsecプロファイル
デフォルトIPsecプロファイルの内容は下記のとおりです。IPsecパラメーターの組み合わせは、優先度の高いほうから順にプロポーザル 1 ~ 10の10通りが定義されています。
| ESP | ESP | ESP | ESP | ESP | ESP | |
| AES256 | AES256 | AES256 | AES256 | AES128 | AES128 | |
| SHA256 | GCM16 | GCM8 | SHA1 | SHA256 | GCM16 | |
| ESP | ESP | ESP | ESP | |||
| AES128 | AES128 | 3DES | 3DES | |||
| GCM8 | SHA1 | SHA256 | SHA1 | |||
カスタムプロファイル
デフォルトプロファイルでは一般的なパラメーターの組み合わせを網羅していますが、対向機器のサポートしているパラメーターが異なり、デフォルトプロファイルで接続できない場合は、カスタムプロファイルを定義することにより対応が可能です。カスタムISAKMPプロファイル
カスタムISAKMPプロファイルは、crypto isakmp profileコマンドで命名・作成し、同コマンド実行後の移行先であるISAKMPプロファイルモードで具体的な内容を定義します。カスタムISAKMPプロファイルでは、本製品がサポートしている範囲内で、下記パラメーターの組み合わせを自由に定義できます。
ISAKMPプロファイルの構造は、「デフォルトISAKMPプロファイル」の表をご覧いただくとイメージしやすいでしょう。
- 1つのISAKMPプロファイルに対して複数設定できるパラメーター
下記3つのパラメーターを一組の「トランスフォーム」(transform)として、複数の組み合わせを優先順位とともに指定できます。
- 暗号化アルゴリズム
- 認証アルゴリズム
- Diffie-Hellmanグループ
- 暗号化アルゴリズム
- 1つのISAKMPプロファイルに対して1つだけ設定できるパラメーター
- SA有効期間(lifetime)
- DPDキープアライブ間隔(dpd-interval)
- SA有効期間(lifetime)
適用
カスタムISAKMPプロファイルは、crypto isakmp peerコマンドを使って、対向装置またはインターフェースごとに適用します。対向装置10.2.2.2との間でカスタムISAKMPプロファイルlegacyを使用するには、次のようにします。
awplus(config)# crypto isakmp peer address 10.2.2.2 profile legacy
IPアドレスが不定な対向装置との間でカスタムISAKMPプロファイルを使用したいときは、次のようにdynamicキーワードを使います。この場合、IPアドレスが不定なすべての対向装置とのISAKMP通信において、指定したカスタムISAKMPプロファイルが使われます。
awplus(config)# crypto isakmp peer dynamic profile legacy-aggr
特定のトンネルインターフェースで使用するカスタムISAKMPプロファイルを固定的に設定したいときは、次のようにpolicyパラメーターにトンネルインターフェース名を指定します。この場合、該当トンネルインターフェースを使用するすべてのISAKMP通信において、指定したカスタムISAKMPプロファイルが使われます。
awplus(config)# crypto isakmp peer policy tunnel0 profile myprof
crypto isakmp peerコマンドでカスタムISAKMPプロファイルを指定していない対向装置との間ではデフォルトISAKMPプロファイルが使われます。
カスタムIPsecプロファイル
カスタムIPsecプロファイルは、crypto ipsec profileコマンドで命名・作成し、同コマンド実行後の移行先であるIPsecプロファイルモードで具体的な内容を定義します。カスタムIPsecプロファイルでは、本製品がサポートしている範囲内で、下記パラメーターの組み合わせを自由に定義できます。
IPsecプロファイルの構造は、「デフォルトIPsecプロファイル」の表をご覧いただくとイメージしやすいでしょう。
- 1つのIPsecプロファイルに対して複数設定できるパラメーター
下記3つのパラメーターを一組の「トランスフォーム」(transform)として、複数の組み合わせを優先順位とともに指定できます。
- IPsecプロトコル
- 暗号化アルゴリズム
- 認証アルゴリズム
- IPsecプロトコル
- 1つのIPsecプロファイルに対して1つだけ設定できるパラメーター
作成
次に、カスタムIPsecプロファイルの具体的な定義例を示します。SA有効期間1時間、暗号化/認証アルゴリズムの組み合わせは「AES128/SHA1」の1つだけ。
awplus(config)# crypto ipsec profile legacy awplus(config-ipsec-profile)# lifetime seconds 3600 awplus(config-ipsec-profile)# transform 1 protocol esp integrity sha1 encryption aes128
SA有効期間1時間、暗号化/認証アルゴリズムの組み合わせは優先度の高い順に「AES256/SHA256」、「AES128/SHA256」の2つ。
awplus(config)# crypto ipsec profile shortlife awplus(config-ipsec-profile)# lifetime seconds 3600 awplus(config-ipsec-profile)# transform 1 protocol esp integrity sha256 encryption aes256 awplus(config-ipsec-profile)# transform 2 protocol esp integrity sha256 encryption aes128
適用
カスタムIPsecプロファイルは、tunnel protection ipsecコマンドのprofileパラメーターを使って、トンネルインターフェースごとに適用します。トンネルインターフェースtunnel0にカスタムIPsecプロファイルlegacyを適用するには、次のようにします。
awplus(config)# interface tunnel0 ... awplus(config-if)# tunnel protection ipsec profile legacy
tunnel protection ipsecコマンドのprofileパラメーターでカスタムIPsecプロファイルを指定していない場合、該当トンネルインターフェースではデフォルトIPsecプロファイルが使われます。
その他
IPsec DPD
IPsec DPDは、IPsecの対向側の接続断を検知する機能です。本製品では、DPD要求パケットを定期的に対向側に送信するキープアライブ方式を使用しています。
対向側は、DPD要求パケットに応答することで自身が動作していることを証明します。
IKEv2
IKEv2の場合、最後に成功した(応答があった)DPD要求から dpd-interval + 166 秒後にSAが削除されます。DPD要求に失敗した場合(応答がなかった場合)、4秒後にIKE再送要求(IKE retransmit request)が動作し、5回リトライします。
リトライするたびに送信間隔が徐々に大きくなります。
初期設定(dpd-interval 30)の場合のシーケンスを次に示します。

設定と状態の確認
ISAKMP/IPsec SAの情報を確認するには、show isakmp sa / show ipsec saコマンドを使います。awplus# show isakmp sa awplus# show ipsec sa
ISAKMP/IPsecの統計情報を確認するには、show isakmp counters / show ipsec countersコマンドを使います。
awplus# show isakmp counters awplus# show ipsec counters
IPsecの動作状況を確認するには、show ipsec peer / show ipsec policyコマンドを使います。
awplus# show ipsec peer awplus# show ipsec policy
ISAKMPの事前共有鍵を確認するには、show isakmp keyコマンドを使います。
awplus# show isakmp key
ISAKMP/IPsecプロファイル(動作パラメーター)の内容を確認するには、show isakmp profile / show ipsec profileコマンドを使います。
awplus# show isakmp profile awplus# show ipsec profile
各対向装置について、使用するISAKMPプロファイルと事前共有鍵の設定有無を確認するには、show isakmp peerコマンドを使います。
awplus# show isakmp peer