様々なVPNの比較（IPsec-VPN，SSL-VPN）

# 背景
- 仕事でAWSとクライアントが使用しているエントリーVPNとを接続する必要がありました。その際に社内でエントリーVPNなのに専用線と言う人もいて、インターネットVPN以外を総じて専用線と言ってしまっているのではないかと思いました。加えて、プライベートネットワークとして用いられる方法にどういうものがあるのか、ネットワークスペシャリスト試験の勉強をしている中で整理しておきたかったのでまとめてみました。

# VPNの種類
- 一口にVPNと言っても様々な種類があります。プライベートネットワークとして使われる専用線、広域イーサネットも含めた比較を表にしました。

<table>
  <tbody>
    <tr>
      <td> </td>
      <td>回線</td>
      <td>技術等</td>
      <td>アクセス回線</td>
      <td>レイヤ</td>
      <td>プロトコル</td>
    </tr>
    <tr>
      <th>専用線</th>
      <td>専用線</td>
      <td>-</td>
      <td>-</td>
      <td rowspan="2">
        レイヤ２
      </td>
      <td rowspan="2">
        IP以外も可
      </td>
    </tr>
    <tr>
      <th>広域イーサネット</th>
      <td rowspan="3">
        閉域網
      </td>
      <td>VLAN<br> MPLS
        <br> PBB 等</td>
      <td rowspan="2">
        多種多様<br> （高速デジタル専用線
        <br>Ethernet専用線<br>ATM専用線<br>フレッツ等）
      </td>
    </tr>
    <tr>
      <th>IP-VPN</th>
      <td rowspan="2">
        MPLS
      </td>
      <td rowspan="3">
        レイヤ３
      </td>
      <td rowspan="3">
        IPのみ<br />（カプセル化によりIP以外も可）
      </td>
    </tr>
    <tr>
      <th>エントリーVPN</th>
      <td>ADSL、FTTH等</td>
    </tr>
    <tr>
      <th>インターネットVPN</th>
      <td>インターネット</td>
      <td>-</td>
      <td>-</td>
    </tr>
  </tbody>
</table>


<table>
  <tbody>
    <tr>
      <td> </td>
      <td>帯域</td>
      <td>構築</td>
      <td colspan="4" rowspan="1">製品例</td>
    </tr>
    <tr>
      <th>専用線</th>
      <td rowspan="3">
        ギャランティ型<br />（帯域を確保）
      </td>
      <td>専用線を引く</td>
      <td rowspan="5">
        <a href="https://www.ntt.com/business/services/network/vpn/vpn.html" target="_blank">Arcstar Universal One</a>
      </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <th>広域イーサネット</th>
      <td rowspan="3">
        閉域網を利用するので、各社サービスを利用
      </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
    <tr>
      <th>IP-VPN</th>
      <td><a href="https://www.ntt.com/business/services/network/vpn/4vpn/ip-vpn.html" target="_blank">Arcstar IP-VPN</a></td>
      <td><a href="https://flets-w.com/biz/vpngate/" target="_blank">フレッツ・VPNゲート</a></td>
      <td rowspan="2">
        <a href="http://www.fujitsu.com/jp/services/infrastructure/network/businessnetwork/vpn-service/" target="_blank">FENICSビジネスVPNサービス</a>
      </td>
    </tr>
    <tr>
      <th>エントリーVPN</th>
      <td rowspan="2">
        ベストエフォート型<br />（トラフィック状況により変化）
      </td>
      <td> </td>
      <td><a href="https://flets-w.com/biz/vpnwide/" target="_blank">フレッツ・VPNワイド</a></td>
    </tr>
    <tr>
      <th>インターネットVPN</th>
      <td>VPNルータを調達できれば個人でも可能</td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

# VPNで用いられるトンネリングプロトコル
- VPNはトンネリングプロトコルの視点からとリモートアクセスVPNの方法の視点からの２つの視点から整理すると分かりやすいと思います。まずは、トンネリングプロトコルから。

<table>
  <tbody>
    <tr>
      <td> </td>
      <td>プロトコル</td>
      <td>暗号化</td>
    </tr>
    <tr>
      <td rowspan="2">レイヤ2</td>
      <td>PPTP</td>
      <td>しない</td>
    </tr>
    <tr>      
      <td>L2TP</td>
      <td>しない</td>
    </tr>
    <tr>
      <td rowspan="3">レイヤ3</td>
      <td>GRE</td>
      <td>しない</td>
    </tr>
    <tr>
      <td>IP in IP</td>
      <td>しない</td>
    </tr>
    <tr>
      <td>IPsec</td>
      <td>できる</td>
    </tr>
  </tbody>
</table>
- この中で、IPsecだけ暗号化も行うことができます。（ESPを用いた場合）
- 暗号化を行わない他のプロトコルとIPsecを組み合わせて使う場合もあります。この場合、IPsecはトンネリングを行わないトランスポートモードとして用いられることが多くなります。
  - L2TP over IPsec（eg. H28.午後I問2, H28.午後II問2）
  - GRE over IPsec（eg. H30.午後I問3, H28.午後II問2）
  - IP in IP と IPsec（eg. H29.午後I問3）

# リモートアクセスVPNの二つの方法
- IPsec-VPNとSSL-VPNの二種類があります。SSL-VPNはRFCで定義されたプロトコルではありませんが、良く使われます。

## IPsec-VPN
### IPsecにおけるトランスポートモードとトンネルモード
- IPsecにはトランスポートモードとトンネルモードがあります。一般的に、トランスポートモードは端末間での通信、トンネルモードはルータ間での通信に用います。
- トンネリングはL2TPやGREなどで行うという場合は、IPsecではトンネリングは行わずに暗号化だけを行うトランスポートモードとして利用することもあります。
- 暗号化範囲はトランスポートモードではTCP/UDPヘッダからESPトレイラ、トンネルモードではIPヘッダも暗号化します。暗号化することで盗聴に備えることができます。
- 認証範囲は、どちらもESPヘッダからESPトレイラです。ここでいう認証とは、メッセージ認証のことで、受け取ったパケットが改ざんされていないかを検知できます。
    - ネットワークスペシャリスト試験では、「認証」ということばが２つの意味で出て来ます。ひとつは通信相手の認証という意味での認証。もう一つが、今回のメッセージ認証です。メッセージを認証するためのコードをMAC（Message Authentication Code）と呼びます。MACアドレスのMACとは違う意味なので注意が必要です。

|モード名称|NWヘの適用例|暗号化範囲|認証範囲|トンネリング|パケット例|
| --- | --- | --- | --- | --- | --- |
|トランスポートモード|端末間|TCP/UDPヘッダ〜ESPトレイラ|ESPヘッダ〜ESPトレイラ|しない|![transport.png](https://qiita-image-store.s3.amazonaws.com/0/121304/5596ecb1-2cc5-fea8-f2d7-3d26873dbe5e.png)|
|トンネルモード|ルータ間|IPヘッダ〜ESPトレイラ|ESPヘッダ〜ESPトレイラ|する|![tunnelmode.png](https://qiita-image-store.s3.amazonaws.com/0/121304/e54a9f95-1348-d7da-2310-69af250af768.png)|

### IPsecで用いられるプロトコル
- IPsec-VPNでは、IKE、ESP、AHの３つのプロトコルが用いられます。IKEは暗号化通信を行う前の前段階で用いられる、通信相手の認証のためのプロトコルです。IKEはIPsecにおいて必須ではないですが、VPNでIPsecを用いる場合は鍵交換においてIKEを利用することが多いです。
- ESPは暗号化・認証を行い、AHは認証のみを行います。旧番のIPsecではESPに認証は規定されていなかったため、AHがありましたが、今はESPにも認証機能があります。
    - 繰り返しになりますが、ここでいう認証とはメッセージ認証です。IKEは通信相手の認証です。

|プロトコル名|用途|ポート番号|IPプロトコル番号|
| --- | --- | --- | --- |
| IKE | 鍵交換プロトコル（IPsec通信を行う前に、IPsec接続先と認証を行う） | 500（UDP） | - |
| ESP | 暗号化・認証 | - | 50 |
| AH | 認証のみ（暗号化はしない） | - | 51 |

### IPsecの通信手順
- IPsecの通信を安全に行うために、IKEプロトコルで鍵交換を行います。IKEには、フェーズ1とフェーズ2があり、その後の実際の暗号化通信も合わせて、３つの手順に分けられます。
- <strong>【IKE】</strong>フェーズ1（ISAKMP SAの確立）※ SA: Security Association
  - フェーズ2で使う共通鍵を事前につくる（事前共有鍵）。
  - また、フェーズ2で用いる暗号化アルゴリズムも決定する。
  - フェーズ1には、事前共有鍵の作り方が異なるメインモードとアグレッシブモードの２つのモードがある。
<table>
  <tbody>
    <tr><td>メインモード</td><td>事前共有鍵の割り当てにIPアドレスを用いる</td></tr>
    <tr><td>アグレッシブモード</td><td>事前共有鍵の割り当てに利用者のIDなど運用者が独自に設定したIDを用いる</td></tr>
  </tbody>
</table>
※ フェーズ1における認証には、事前共有鍵のほか、デジタル署名、公開鍵暗号、改良型公開鍵暗号の４つの方式がある。
- <strong>【IKE】</strong>フェーズ2（IPsec SAの確立）
  - フェーズ1で作成した事前共有鍵を用いてIPSecによる暗号化通信で用いる暗号化アルゴリズム（例：3DES, AES）や認証アルゴリズム（例：MD5, SHA-1）を決定する。
  - フェーズ１で確立されたISAKMP SA上でやりとりされているので、暗号化されている。

- <strong>【ESP】</strong>IKEのフェーズ2で確立されたIPsec SA上でESPプロトコルを使ってIPsec通信が行われる。

### SSL-VPN[^1] [^2]
- SSL/TLS（HTTPS）を用いてリモートアクセスVPNを実現します。
- SSL-VPNの方式には、「リバースプロキシ」「ポートフォワーディング」「L2フォワーディング」の３つがあります。それぞれ、実現方法が異なり、使用用途に制限があります。

| 実現方法 | SSL確立 | 仕組み | 用途の制限 | 
| --- | --- | --- | --- |
| リバースプロキシ | Webブラウザを用いて、リモートアクセス端末とVPN装置間でSSLを確立。 | Webブラウザでリモートアクセス端末のユーザ認証 | Webブラウザ上で動作するアプリケーションしか使用できない |
| ポートフォワーディング | WebブラウザからJavaアプレットなどのモジュールが自動でダウンロードし、モジュールがSSLを確立 | ポート番号がHTTPSのポート番号（一般的には443）でないアプリケーションを、HTTPSのポート番号に変換。企業イントラネット内で使えるサーバのポート番号をVPN装置に定義する | 通信中にポート番号が変わるアプリケーションは使えない。<br>例）FTP(アクティブモード)、MSN Messanger でのファイル転送[^1] |  
| L2フォワーディング | SSL-VPNクライアントソフトウェアをインストールする。 | アプリケーションのデータをHTTPのパケットに入れてカプセル化し、SSL で暗号化。| 全てのアプリケーションを使用できる。|

# 演習
### １. インターネットVPNを実現するために用いられる技術であり，ESP（Encapsulating Security Payload）やAH（Authentication Header）などのプロトコルを含むものはどれか。（H26S-SC-問20，H23特-SC-問18）
 - ア　IPsec
 - イ　MPLS
 - ウ　PPP
 - エ　SSL

### ２. VPNでセキュアなプロトコルであるIPsec, L2TP, TLSの、OSI基本参照モデルにおける相対的な位置関係はどれか。A〜Dから選べ。（H29S-AP-AMII-問45）


| 上位層（アプリケーション層） | A | B | C | D |
| :---: | :---: | :---: | :---: | :---: |
| ↑ | IPsec | IPsec | TLS | TLS |
| ↓ | L2TP | TLS | IPsec | L2TP |
| <strong>下位層（物理層）</strong> | TLS | L2TP | L2TP | IPsec |

### ３. IPsecに関する記述のうち、適切なものはどれか。（H30-NW-問19，H28A-SC-問15，H27S-SC-問9）
 - ア　IKEはIPsecの鍵交換のためのプロトコルであり、ポート番号80が使用される。
 - イ　暗号化アルゴリズムとして，HMAC-SHA1が使用される。
 - ウ　トンネルモードを使用すると，暗号化通信の区間において，エンドツーエンドの通信で用いる元のIPのヘッダを含めて暗号化できる。
 - エ　ホストAとホストBとの間でIPsec通信を行う場合，認証や暗号化アルゴリズムを両者で決めるためにESPヘッダではなくAHヘッダを使用する。

### 4. 図はIPv4におけるIPsecのデータ形式を示している。ESPトンネルモードの電文中で，暗号化されているのはどこか。（H24-NW-問12）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/121304/ed8b7d94-de2b-43b2-ce24-a4af7f980a4a.png)

 - ア　ESPヘッダからESPトレーラまで
 - イ　TCPヘッダからESP認証データまで
 - ウ　オリジナルIPヘッダからESPトレーラまで
 - エ　新IPヘッダからESP認証データまで

### ５. IPv6において，拡張ヘッダを利用することによって実現できるセキュリティ機能はどれか。（H28A-AP-問36）
 - ア　URLフィルタリング機能
 - イ　暗号化機能
 - ウ　ウイルス検疫機能
 - エ　情報漏えい検知機能

### 6. IPv6においてIPv4から仕様変更された内容の説明として，適切なものはどれか。（H27-NW-問9，H22-NW-問11）
 - ア　IPヘッダのTOSフィールドを使用し，特定のクラスのパケットに対する資源予約ができるようになった。
 - イ　IPヘッダのアドレス空間が，32ビットから64ビットに拡張されている。
 - ウ　IPヘッダのチェックサムフィールドを追加し，誤り検出機能を強化している。
 - エ　IPレベルのセキュリティ機能（IPsec）である認証と改ざん検出機能のサポートが必須となり，パケットを暗号化したり送信元を認証したりすることができる。

### 7. MPLSの説明として，適切なものはどれか。（H28-NW-問9）
 - ア　IPプロトコルに暗号化や認証などのセキュリティ機能を付加するための規格である。
 - イ　L2FとPPTPを統合して改良したデータリンク層のトンネリングプロトコルである。
 - ウ　PPPデータフレームをIPパケットでカプセル化して，インターネットを通過させるためのトンネリングプロトコルである。
 - エ　ラベルと呼ばれる識別子を挿入することによって，IPアドレスに依存しないルーティングを実現する，ラベルスイッチング方式を用いたパケット転送技術である。

### 8. [　オ　]に入れる適切な字句を答えよ。（H29-NW-PMI-問１-設問１）
 - SSL-VPNの基本的な動作には[　オ　]，ポートフォワーディング，L2フォワーディングの３方式がある。

### 9. 以下の文を読み，問いに答えよ。（H30-NW-PMI-問3抜粋）
 - IP-VPNは通信事業者が運営する閉域IPネットワーク（事業者閉域IP網）を利用者のトラフィック交換に提供するサービスである。
 - IP-VPNは①*事業者閉域IP網内で複数の利用者のトラフィックを中継するのに，RFC3031で規定された方式*が用いられる。
 - 利用者のネットワークと事業者閉域IP網との接続点において，利用者が設置するCE（Customer Edge）ルータから送られたパケットは，通信事業者のPE（Provider Edge）ルータで[　ア　]と呼ばれる短い固定長のタグ情報が付与される。
 - 事業者閉域IP網内では，②*タグ情報*を参照して中継され，[　ア　]は対向の[　イ　]で取り除かれる。
 - IPsecは，暗号技術を利用してノード間通信を行うためのプロトコルであり，IPパケット通信の完全性・気密性を確保する。
 - IPsecはOSI基本参照モデルの[　ウ　]レイヤで動作する。
    - 問1. ア〜ウに入れる適切な字句を答えよ。
    - 問2. ①について，IP-VPNサービス提供のために事業者閉域IP網内で用いられるパケット技術を答えよ。
    - 問3. ②について，事業者閉域IP網内の利用者トラフィック中継処理において，タグ情報を利用する目的を25字以内で述べよ。

# 演習問題解答例

1. 答えば<strong>ア</strong>です。特に解説するまでもありませんね。

2. 答えは<strong>C</strong>です。L2TPはレイヤ2のプロトコル、IPsecはレイヤ3のプロトコルです。L2TPはL2とありますし、IPsecはIPとあるのでレイヤ3（ネットワーク層）であるというのはわかりやすいですね。TLSはHTTPSで使用していますが、HTTPSはTCPプロトコルを用い、ポート番号を443用いることからわかるように、レイヤ4（トランスポート層）です。

3. 答えは<strong>ウ</strong>です。
アでは、ポート番号80が間違いです。IKEはポート番号500を用います。ポート番号に関しては「[ネットワークスペシャリスト試験で出題されがちなポート番号まとめ](https://qiita.com/yuyasat/items/cdba7381330373d00759)」もご覧ください。
イは間違いです。HMAC-SHA1は暗号化アルゴリズムではりません。IPsecでメッセージ認証（改ざんの検知）で用いられていたハッシュ関数です。SHA1やSHA256というのはハッシュ関数の名称です。ハッシュ関数とは、あるデータが与えられた時に任意の固定長の文字列に変換する関数で、ハッシュ関数で得られた値を比較することで、送られたデータが改ざんされていないかを確認することができます。
ウは正解です。暗号化範囲に関しては、この記事で記述した通りです。
エは間違いです。AHは認証のみで暗号化アルゴリズムは用いられません。

4. トンネルモードですので、暗号化範囲はIPヘッダ〜ESPトレイラです。暗号化範囲はESPヘッダの次から、認証範囲は、ESPヘッダからとしっかりと覚えておきましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/121304/4d26b7c8-3cdd-18af-7d25-d99e7205a951.png)

5. 正解は<strong>イ</strong>です。IPsecは何もインターネットVPNのためだけの技術ではありません。その役割は、認証と暗号化です。IPv6はIPsecのサポートが必須となっています。IPv4に比べ、セキュリティ機能が強化されているわけです。IPv6において、IPヘッダは40バイトと固定長で、IPsecのヘッダはIPヘッダには入ってきません。IPv6には、拡張ヘッダというものがあり、ここにIPsecに関する情報が入ってきます。

6. 正解は<strong>エ</strong>です。4で説明した通り、IPv6はIPsecのサポートが必須です。
ア. TOSフィールドはIPv4のヘッダに含まれるもので、IPv6にはありません。
イ. IPv6は128ビットです。IPv6は例えば、省略せずに書くと、`2001:0db8:1234:5678:90ab:cdef:0000:0000`といった形で表記されます。１６進数４つで構成されたブロックが８つあります。16進数１文字は何ビットでしょうか？15は二進数で表すと1111になります。すなわち、16進数一文字は4ビットということです。`4x4x8=128`で128ビットと覚えましょう。
ウ. チェックサムフィールドもIPv4のヘッダに含まれるもので、IPv6にはありません。

7. 正解は<strong>エ</strong>です。MPLSはラベルと呼ばれる識別子を利用してパケットがどの利用者のものであるかを区別します。
ア. IPSecの説明です。暗号化はESP、認証はESPおよびAHが担います。
イ. L2TPの説明です。L2TPはL2Fの前２文字とPPTPの後ろ２文字を合わせた略称なので覚えやすいですね。MPLSはレイヤ3の技術なので、データリンク層ではありません。
ウ. PPTPの略です。この問題でレイヤ2のトンネリングプロトコルが3つ出てきました。L2F、PPTP、そしてその二つを統合したL2TPはしっかりと覚えておきましょう。L2Fは現在ではほとんど使われることはありませんが、L2TPを覚える過程で頭に入ってくると思います。

8. <strong>リバースプロキシ</strong>が入ります。SSL-VPNには３種類の実現方法があるという旨は本記事の通りです。リバースプロキシは利用できる用途に最も制限がある実現方法になります。
9. 問1　ア IP-VPNはMPLSという技術が用いられています。MPLSの基本的な技術について問われています。答えは<strong>ラベル</strong>です。MPLSがMulti-Protocol Label Switchingの略であるということを知っていれば、容易い問題だったと思います。
イ　ラベルはどこで取り除かれるのかを問われています。事業者閉域IP網内をラベルをつけてどの利用者のものかを判別します。したがって、<strong>PEルータ</strong>になります。CEルータやPEルータを知らない人でも、本文を読めば回答が導き出せる問題になっています。
ウ　答えは<strong>L3（ネットワーク）</strong>です。これは基本的な問題です。
問2. 問1アで説明した通り、答えは<strong>MPLS</strong>です。
問3. まだIPAの正解が出ていないので、現状での私の回答ですが、「パケットがどの利用者のものであるかを識別するため」（２５字）としました。
（追記）IPAの解答例は、「利用者ごとのトラフィックを区別するため」（１９字）となっていました。

# 参考
 - より深く理解するためには、ネットワークスペシャリストの過去問を解くことをお勧めします。以下に過去の出題をまとめました。特に、午後Iの出題は技術を問うものが多いのでお勧めです。

|  | H22 | H23 | H24 | H25 | H26 | H27 | H28 | H29 | H30 |
|:---|:---|:---|:---|:---|:---|:---|:---|:---|:---|
| IP-VPN | | | | | | | | | PMI-問3 |
| L2TP over IPsec | | | | | | | PMI-問2<br>PMII-問2 | | |
| GRE over IPsec | | | | | | | PMII-問2 | | PMI-問3 |
| IP in IP とIPsec | | | | | | | | PMI-問3 | |
| IPSec-VPN | PMII-問2 | | | | | | | | |
| SSL-VPN | PMII-問2 | | | PMI-問1[^3] | PMII-問2[^4] | | | PMI-問1 | |


[^1]: http://www.fujitsu.com/jp/products/network/security-bandwidth-control-load-balancer/ipcom/material/data/2/3.html
[^2]: https://www.infraexpert.com/study/security8.html
[^3]: SSL-VPN ポートフォワーディング
[^4]: SSL-VPN L2フォワーディング