VPN (Virtual Private Network)の仕組み

新しく書き直したので、下記をご覧ください。

※コメント欄で指摘いただきましたが、説明画像の方で "Layar" と記載されているものは誤りで、正しくは "Layer" となります。ご指摘いただいた方ありがとうございます。


1.VPNとは

パブリックネットワーク(インターネット)上に仮想的にプライベートネットワークを拡張する技術です。

そもそもパブリック, プライベートネットワークって何?

 - パブリックネットワーク(インターネット)は誰でもアクセスできるネットワークです。
 - プライベートネットワークは特定の端末しかアクセスできないネットワークです。

画像1

言い方を変えましょう。

- インターネットは誰でもアクセスできます。
 (プライベートネットワーク→パブリックネットワーク)
- 会社パソコンから会社のサーバにはアクセスできます。
 (プライベートネットワーク→プライベートネットワーク)
- インターネットから会社のサーバに無断でアクセスできません。
 (パブリックネットワーク→プライベートネットワーク)

VPNで何ができるの?

VPNはパブリックネットワーク上にプライベートネットワークを仮想的に拡張する技術です。上の図でいうと自宅から会社までプライベートネットワークを伸ばします。これにより、プライベートネットワーク→プライベートネットワークの通信となるため、自宅から会社のサーバにアクセスできます。

2.VPNの種類

VPNの種類は次のように分けられます。

●インターネットVPN
 - SSH,SSLポートフォワーディング方式(Layer4 VPN)
 - PPTP, L2F, L2TP方式(Layer2 VPN)
●専用閉塞網によるVPN
 - IP-VPN 方式(Layer3 VPN)
    - 広域イーサネット方式(Layer2 VPN)

ここから各VPN方式の詳細な説明に入りますが、長いので自分の気になるVPN方式だけ読むのが良いかと思います。

ただし、前提知識として "OSI参照モデル" と "カプセル化" という概念を知っている必要があります(一応 "暗号,認証の種類" も)。知らない人はまずはこちらをお読みください。

(事前知識1)OSI参照モデルとは

コンピュータの通信を機能ごとに階層化したモデルのことです。

画像2

データを送信する際にはOSI参照モデルの上のLayerから下のLayerへデータが流れていきます。逆にデータを受信する際には下のLayerから上のLayerに流れます。

ちなみにOSI参照モデルは理論の話です。実際にインターネットの通信に使用されているのはTCP/IPの階層のほうです。現実的に分ける必要が無いLayerが1つに集約されてます。

詳しい説明は下記のサイトがわかりやすいですね。

上の表をぼや〜と頭に入れながら次に進んでください。

(事前知識2)カプセル化とは

データ + ヘッダを1つのデータと見なし、新しいヘッダをつけることです。(ナンノコッチャ)

OSI参照モデルではデータを下のLayerに送る際に、データ(送りたいデータ本体)にヘッダ(送るための情報)を付与します。各Layerごとに担当するヘッダをデータに引っ付けて下のレイヤーに流していきます。例えばアプリケーション層(Layer7 ~ 5)で作成したSMTP(メール)ヘッダをカプセル化する動きをみます。

画像3

アプリケーション層(Layer7 ~ 5)ではデータ(上図では「はなこちゃんだいすき」)にアプリケーション固有の規定をヘッダを付けます。SMTP(メール)の場合はFrom(送信先)やTo(受信先)などがヘッダとして規定されています。全てのヘッダを付け終わったら下のLayer4に流します。

Layer4は自分の担当外であるLayer7~5でくっついたヘッダ(From, To, Subject)とデータ(はなこちゃん大好き)を区別しません。そのためこれらを1つのデータと見なし、TCPヘッダを付与します。

このようにデータ + ヘッダを1つのデータと見なすことがカプセル化です。

補足1
カプセル化したデータを送ることをトンネリングと呼ばれてます。
(正確に言うと通信プロトコル上で異なる通信プロトコルを透過的に伝送すること)
補足2
先程VPNの種類を紹介した際に、Layer "n"と記載していましたが、OSI参照モデルの第"n"層でデータをカプセル化してVPNを実現することを表します。

(事前知識3)暗号化,認証技術の種類

こんな種類の暗号化,認証が使われてるんだなーぐらいの認識でいいです。詳しく知りたい方はググってください。

 - SSH

SSHはOSI参照モデルの第7Layer に属する暗号化方式です。

有名な利用例として、他のコンピュータにアクセスする際に使います。

 - SSL

SSLはOSI参照モデルの第5Layer に属する暗号化方式です。

有名な利用例はブラウザでウェブサイトにアクセスする際に下記のようにHTTPSプロトコルを使用してアクセスしますよね?

https://ja.wikipedia.org/wiki/Virtual_Private_Network

これってhttp over ssl つまりLayer7のhttpヘッダをsslで暗号化したものなんですよね。

 - IPsec

IPsecはOSI参照モデルの第3Layer に属する暗号化方式です。

有名な利用例は・・・すいません。。。誰か教えてください。


予備知識はここまで。こっから本題のVPNの話です。

3. インターネットVPN

インターネットVPNでは、パブリックネットワークに暗号化 + カプセル化を使用して仮想的なプライベートネットワークを作成することで別のプライベートネットワーク間で通信することです。

具体的な例に言い換えるとお家(プライベートネットワーク)から会社(プライベートネットワーク)に、インターネット(パブリックネットワーク)を使ってアクセスすることです。

インターネットVPNは次の動作をします。
1. プライベートネットワーク内でデータを暗号化 + カプセル化
2. パブリックネットワーク(インターネット)を経由して上記のデータを送信
3. 別のプライベートネットワークでカプセル化を解除+復号化

画像4

パブリックネットワークは誰でもアクセスできるので、第三者に愛の告白が読まれてしまいます。困ります。そのため中身が見られないように暗号化します。

次に、はなこちゃんのプライベートネットワークにアクセスする際に、コンピュータの防壁(NAT, Proxy, ファイアウォールと呼ばれる)を通る必要があります。上記の図で言うと赤丸の部分です。この壁に愛の告白が阻まれてしまいます。困ります。そのため、中身を隠して(カプセル化して)、コンピュータの防壁を通過します。(中身を隠すと防壁を通り抜ける理由は後述します。)

そのためインターネットVPNは暗号化 + カプセル化によって実現しています。

画像5

ちなみに上図で言うと緑のトンネルのようなものが仮想プライベートネットワーク(VPN)です。カプセル化のおかげでまるでプライベートネットワーク同士で通信しているよう(コンピュータの防壁が無いよう)に見えます。さらに第三者からもデータの中身がわかりません。そのため、プライベートネットワークのようなものだよねって意味で仮想プライベートネットワーク(VPN)といいます。

3.1 SSH,SSLポートフォワーディング方式(Layer4 VPN)

L4 VPNでは次の2つの技術を用いてをインターネットVPNを実現します。

1.  L5以上の暗号化、認証プロトコル(SSL, SSH)
2. L4でカプセル化(ポートフォワーディング(ポートマッピング)方式)

ポートフォワーディング(ポートマッピング)方式

ファイアーウォールを通過できないポート番号をカプセル化し、通過できるポート番号に変換することにより、プライベートネットワークにアクセスする方式です。

パブリックネットワークとプライベートネットワークの間にはポート番号を使用してアクセスを制御するファイアウォールがあります。ポート番号は使用するアプリケーションを指定するものです。例えばポート番号が25番ならSMTPプロトコルを使用し、メールアプリケーションにアクセスします。

画像6

上記の例では25番ポートの使用が禁止されているのでメールアプリケーションにアクセスできません。そこで登場するのがカプセル化です。

それではカプセル化を使用してポートフォワーディングを行い、プライベートネットワークのメールサーバにアクセスする動きを見ていきましょう。

画像7

1. SSLやSSHを使用してトンネリングを行う経路を確立します。

2. クライアントではメールサーバへアクセスするためのパケットを下記のように作成します。

画像8

3. 次にカプセル化するためにVPNアプリにデータを渡します。

先程作成したデータではポートが25番を指定しているので、送信先VPN装置のファイアウォールに阻まれてしまいます。そこでファイアウォールを通過すべく、VPNアプリにデータを送信し、そこでカプセル化を行います。

VPNアプリにデータを送信するために、送信先IPアドレスを127.0.0.1に指定します。127.0.0.1はローカルループバックアドレスと呼ばれ、自分自身のコンピュータを指します。これで自身のコンピュータ内にあるVPNアプリに届けられます。VPNアプリにループバックする条件は、アクセス先が指定のプライベートネットワーク(今回は220.0.0.1)かつそこに登録しているポート(今回は22 or 25 or 80)の場合です。

これによって指定のプライベートネットワークにアクセスする時はVPNアプリにデータを渡すことができ、指定のプライベートネットワーク以外にアクセスする時はインターネットに出ることが出来ます。

4. VPNアプリに届いたデータを次のようにカプセル化します。

画像9

これでファイアウォールを通過できる443ポートを指定しています。

5. トンネリングを用いて送信先のプライベートネットワークにデータを送信します。

6. VPN装置でカプセル化を解除します。
ちなみにVPN装置とはファイアウォール + NAT付きルータ + カプセル化、暗号化解除

画像10

7. 指定のポートへデータを送信します。

今回カプセル化を解除したTCPヘッダにはPort25が指定されているので、メールサーバ(SMTP)が選択されます。既にファイアウォールは通過しているので、ポート25番で弾かれることはありません。

3.2 PPTP, L2F, L2TP方式(Layer2 VPN)

L2 VPNでは次の3つの技術を用いてをインターネットVPNを実現します。

1.  L3以上の暗号化プロトコル(IPSec, SSL)
2. L2のカプセル化プロトコル(PPTP, L2F, L2TP)
3. 仮想NIC+仮想Switch Hub (SoftEther)

L2のカプセル化プロトコルの違いについての説明は下記のサイトがわかりやすいです。

仮想NIC+仮想Switch Hubやそれを構築するSoftEtherの説明は製作者の解説サイトがわかりやすいです。

L2 VPNの動作は以下のようになります。

0. 前準備: 仮想NICをインストール
 - 送信するデータは全て仮想NICを経由させる。
 - 仮想NICのプライベートIPアドレスは接続先のプライベートIPを割り当て
1. L2のカプセル化プロトコルでアクセス元VPN機器とアクセス先VPN機器間で認証を実施。トンネリング経路確立

画像11

2. データを転送する際に仮想NICを経由する。転送するデータは以下のように作成する。

画像12

宛先が別のプライベートネットワークにあるNICの場合、カプセル化を行い、サーバ側VPN装置(220.0.0.1)に送信。転送するデータは以下のようにカプセル化する。(正確にはHTTPヘッダをつける前にカプセル化したプロトコルのヘッダがついたりする。L2TPヘッダ等。ここではL2 VPN全般の考えのため省略)

画像13

3. カプセル化を解除し、指定されたNIC(192.168.0.1)にデータを転送する。

画像14

4. サーバはヘッダを見て適切なポート(SMTP = 25)にルーティング
 ファイアウォールは通過しているので、25番ポートでもOKです。

画像15

備考

3.3 Layer4 VPNと Layer2 のVPNの違い

Layer4 VPNではリクエスト時とレスポンス時にポートが変化するアプリケーションで通信できません。

この理由はL4はルータを使用しているためです。ルータを使用する場合はプライベートIPアドレスからパブリックIPアドレスに変更するためにNATに繋ぐ必要があります。NATはプライベートIP + ポートを使用してインターネットからのアクセスをルーティングします。

画像16

そのためリクエスト時とレスポンス時でポートが変わってしまうと、どのPCのレスポンスを届ければいいのかわからなくなります。

画像17

それに対してL2ではスイッチを使用して直接線で繋がっています(仮想的に繋がっていることにしています)。そのためポートが変更しても問題ありません。

3.4 接続形態の種類

インターネットVPNの接続形態によって名前がついています。

- LAN型VPN 
 [VPN装置 to VPN装置]の接続のこと

 - リモートアクセス型VPN 
 [ノートPCやスマートフォンなどにインストールしたVPNクライアントソフト to VPN装置]の接続のこと

画像18

4. 専用閉塞網によるVPN

プロバイダが持つ閉塞網(インターネットに公開していない網)内に企業ごとの専用のルーティングを用意することで通信相手を限定する方法です。下の図で言うと赤いルートは企業A専用です。なお、アクセス回線は共用です。閉塞網の中の仕組みはプロバイダごとに異なるので、信頼性もプロバイダごとに異なります。

画像19

専用通信回線との違いは下記の通り。専用回線ではアクセス回線(電柱の光ファイバー等)を伝って直接繋がれてます。他の人とアクセス回線を共有しないため、安全、早い(回線が他のお客様と混み合わない)、その分高いです。

画像20

4.1 IP-VPN 方式(Layer3 VPN)

IP-VPN 方式はプロバイダの専用閉塞網で、利用者ごとにIPパケットの通信経路を分離することで安全性を確保する方法です。そのため利用者側は契約したプロバイダにIPパケットを送るだけです。通信経路の分離作業は全てプロバイダが行なってくれます。またこの方式を利用する場合、Layer3ではIPプロトコル以外を使用することはできません。それではプロバイダの専用閉塞網の中で拠点Aのアクセス回線から拠点Bのアクセス回線までどのように通信経路を分離しているのか見ていきましょう。

4.2 IP-VPN方式のルーティング方式

画像21

IP-VPNでは上図のように各ルータでIPヘッダにMPLSヘッダを貼り付けて、それを見ながら通信経路を決定します。MPLSはOSI参照モデルのLayer2.5と呼ばれ、IPヘッダよりも下のLayerです。データを送信する時は上位Layerでヘッダを付けて下位Layerに渡すため、MPLS(Layer2.5)ではIPヘッダ(Layer3)を全て知っています。これによりMPLSは閉塞網内にある全てのIPパケットを制御することが出来るため、利用者ごとに専用のIPパケット通信経路を構築することができます。(他の通信と分離できます。)

このようにIP-VPNではインターネットではなく、プロバイダの専用閉塞網を使っていて、さらに専用閉塞網の中でも他の利用者と通信経路が混ざらない用にすることで仮想的なプライベートネットワークを実現しています。

4.2 広域イーサネット方式(Layer2 VPN)

IP-VPN方式ではIPプロトコルしか使えません。なんて不便なんだ!って思いません?思いますよね?もう解決されています。この広域イーサネット方式で!

Layer3プロトコルでIPプロトコル以外を選択したい場合はOSI参照モデルの1つ下のLayer2で通信経路を決めてやればいいのです。Layer2ではルータではなく、スイッチを使います。下記のやつです。

画像22

スイッチはルータのように5つ先にあるルータへパケットを届けてください。なんてことはできません。1番の差込口に刺されたLANケーブルでデータを送ってくださいというような線と線で繋がった隣のスイッチにしか送ることしかできません。1つのスイッチに対して1つの利用者のLANケーブルだけを刺せば他の利用者と通信が混ざることはありません。しかし利用者の数だけスイッチを用意なんてしてられません。そこでVLAN(Virtual LAN)という技術が使われています。これはスイッチの接続口1は接続口2としか繋がっていないことにしよう。接続口3は接続口4としか繋がっていないことにしようというルールです。これにより接続口1,2では利用者A専用の回線に、接続口Bでは利用者B専用の回線にすることができます。

画像23

実際には出口と入り口にスイッチがあります。そのため以下のようになっています。

画像24

広域イーサネットという名前に恥じず、大阪から東京までつなぐ線があります。

よく使われるVPNについては以上になります。VPNといっても色々あるんですね。

この記事が気に入ったらサポートをしてみませんか?