CI部2課の山﨑です。
コロナウイルスの影響でテレワークが普及したことで「VPN」という言葉をよく耳にするようになりました。 AWSではClient VPNとSite to Site VPNという2つのVPNサービスがありますが今回はSite to Site VPNについてIPsecの仕組みを整理しながら理解を深めていきます。
VPNとは
VPN(Virtual Private Network)とはIPsec(Security Architecture for Internet Protocol)という技術を使って、ネットワーク層でIPパケットのカプセル化や認証、暗号化を行うことでインターネット上に作られた仮想的な専用線を示します。よってVPNを理解するためにはIPsecという技術に対する理解が必要となります。 今回はVPNのメリット、デメリット等は割愛します。
IPsecとは
JPNICでは以下のように説明されています。
IPsecは、暗号技術を使ってIPパケットの完全性や機密性を実現する仕組みです。IPパケットの保護によって、HTTPやFTPといったアプリケーションプロトコルを使って転送されるデータが保護されます。また既存のアプリケーションプログラムを変更しなくても、その通信でIPsecを利用することができます。
IPsecを使うホストは、相手のホストと事前にIPsecで使う暗号の種類や暗号鍵を取り決めます。この取り決めはSA(Security Association)と呼ばれます。SAの交換と、交換する相手ホストの認証にIKE(Internet Key Exchange)が使われます。
誤解を恐れずに要約すると、IPsecはIPパケットを保護する技術と言えます。
図を使ってIPsecを紐解いてみる
全体像
まずAWSが提供しているSite to Site VPN接続を図にしてみます。今回はAWSとデータセンターを接続するというケースを想定して図示しました。Site to Site VPN接続はデフォルトで冗長構成を取っているため冗長化を考慮する必要はありません。
上記に図に書かれている Tunnel はAWS - データセンター間のデータの通り道のようなものです。Tunnel の実態は以下の図のIPsec SAと呼ばれるもので、IPsec SA を構築するためには2つのフェーズでそれぞれ必要な処理を実施する必要があります。IPsec は IPsec SA を構築・利用する際に使用されます。
フェーズ1
フェーズ1では ISAKMP SA を確立します。 ISAKMP とはInternet Security Association Key Management Protocol の略称で主に鍵交換や対向認証に利用されるプロトコルです。また SA とは Security Association の略称でここではIPsecによって作られる仮想的な専用線という意味で使われます。
よって ISAKMP SA を確立するということは言い換えると、フェーズ2以降で鍵交換や対向認証を行う際に使用する仮想的な専用線を作る、ということです。ちなみにIPsecでVPNを構築する際はVPN接続を開始する機器をイニシエーター、VPN接続を受ける機器をレスポンダーと呼びます。
フェーズ1では行われる処理を要約すると以下の通りです。
実施する処理
- ISAKMP SA を確立する上で使用する暗号化アルゴリズム、ハッシュアルゴリズム、ライフタイム(ISAKMP SA の生存時間)をイニシエーターとレスポンダー間で取り決める(SAパラメータのネゴシエーション)
- ISAKMP SA を確立する上で使用する共有鍵を作成する
VPN接続を作成する時のAWSコンソール画面を確認してみると、SAパラメータのネゴシエーションで取り決められるパラメータが設定可能であることが分かります。
フェーズ1の処理を以下、図示します。
フェーズ1を図解
フェーズ1ではイニシエーターとレスポンダーがそれぞれメッセージ送信端末の身元確認を行います(対向認証)。Site to Site VPN ではこの身元確認に事前共有鍵認証という手法をデフォルトの認証オプションとして採用しています。事前共有鍵認証ではイニシエーターとレスポンダーに予め同じ鍵(文字列)を設定しておき、その鍵をチェックして認証を行います。AWSでは事前共有鍵は事前共有キー (PSK)と呼んでおりAWS側がデフォルトで生成してくれます。もちろん指定の事前共有キーを設定することも可能です。事前共有鍵認証以外ではACMのプライベート証明書を利用した認証が可能です
フェーズ2
フェーズ2ではIPsec SA を確立します。フェーズ2で行われる通信にはフェーズ1で確立したISAKMP SA を利用するため通信は暗号化されています。
フェーズ2では行われる処理を要約すると以下の通りです。フェーズ1とやっていることは特に変わりません。
実施する処理
- IPSec SA を確立する上で使用する暗号化アルゴリズム、ハッシュアルゴリズム、ライフタイム(IPsec SA の生存時間)をイニシエーターとレスポンダー間で取り決める(SAパラメータのネゴシエーション)
- IPSec SA を確立する上で使用する共有鍵を作成する
フェーズ2の処理を以下、図示します。
フェーズ2を図解
IPsec SA が確立されたらESP(Encapslating Security Payload)プロトコルを用いてIPパケットを暗号化、カプセル化して対向機器にメッセージを送信します。これでIPsec を用いたVPN接続が確立されます。
Configファイルを見てみる
Yamahaルータを対向機器と仮定して設定ファイルをダウンロードして中身を見てみました。
1: Internet Key Exchange (IKE) Configuration
tunnel select 1
ipsec ike encryption 1 aes-cbc
ipsec ike group 1 modp1024
ipsec ike hash 1 sha
ipsec ike pre-shared-key 1 text lVjXXz5r0bZzhs3w7iHn2NXmYeBu7IYH
暗号化アルゴリズム、ハッシュアルゴリズム、DHグループ番号、事前共有キーの情報が書かれていました。
2: IPSec Configuration
ipsec tunnel 201
ipsec sa policy 201 1 esp aes-cbc sha-hmac
ipsec ike duration ipsec-sa 1 3600
ipsec ike pfs 1 on
ipsec tunnel outer df-bit clear
ipsec ike keepalive use 1 on dpd 10 3
フェーズ2で使用する暗号化アルゴリズムやハッシュアルゴリズム、フェーズ2の有効期限(デフォルト3,600秒)等が書かれていました。
3: Tunnel Interface Configuration
ipsec ike local address 1 198.16.0.32
ipsec ike remote address 1 3.114.184.122
ip tunnel address 169.254.97.130/30
ip tunnel remote address 169.254.97.129
ipsec ike local id 1 0.0.0.0/0
ipsec ike remote id 1 0.0.0.0/0
ip tunnel tcp mss limit 1379
tunnel enable 1
tunnel select none
ipsec auto refresh on
インターフェイスの設定以外にもTCPセッションのMSS(最大セグメントサイズ)等も書かれていました。
まとめ
今回はIPsecの仕組みを整理しながらSite to Site VPN の設定を確認してみました。普段何気なく耳にしたり使っている技術を紐解くのはなかなか面白いものですね
山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ
カスタマーサクセス部所属。2019年12月にインフラ未経験で入社し、AWSエンジニアとしてのキャリアを始める。2023 Japan AWS Ambassadors/2023-2024 Japan AWS Top Engineers