helloworlds

not a noun, it's a verb

【ネットワーク】VPNについて簡単におさえる!!

今回はネットワーク系の記事になります。

主に VPN についてです。

IT業界にいなくとも、会社で1回は聞いたことがあったり、なにかは知らないけど利用はしている!なんて方は多いのではないでしょうか。

社外から社内へのネットワークにアクセスする際に利用している手段かもしれませんね。

合わせて、セキュアな通信を行うための手段についても簡単に書いていければと思います! (具体的な導入は除く)

VPNとは

VPN とは、「 Virtual Private Network 」を略したものです。

だいたいイメージはつくのではないでしょうか?

なんかプライベートとあるので、セキュリティ高めの通信方式かなんか?みたいな。

単純に言うと(wikipedia引用)、

インターネットに跨って、プライベートネットワークを拡張する技術、およびそのネットワークである。

f:id:o21o21:20190726120841p:plain

わたしはここで疑問に思ったことがあります。

「インターネットを経由するってことは、けっこう危ないんじゃね?」

単純のVPNときくとセキュリティ的に高めの印象を持ちますが、結局インターネットを経由するのであれば、怖い....

そこで、VPNには主に2種類の方法があるようです。

  • インターネットVPN
  • IP-VPN

インターネットVPNは、インターネット等のネットワークを利用したVPNのことです。

IP-VPNは、通信事業者などが提供している閉じられた(クローズド)ネットワークを介したVPNのことです。

これで少し疑問が解消されました。IP-VPNは第三者(拠点間以外)が提供している閉域網を利用して、よりセキュアな通信を可能にできそうです。

では、インターネットVPNの方はどんな接続方法があるのでしょうか?みていきます。

インターネットVPN

インターネットVPNには、2つの接続の仕方があるようです。

  • サイト間VPN
  • リモートアクセスVPN

サイト間VPNは、VPNを実装したルータ同士を接続する方法。

リモートアクセスVPNは、ラップトップやスマホなどの機器にインストールVPNにクライアントソフトを利用し拠点のLANに接続する方法。

なんとなくイメージできてきました。

例えば、本社から支社間の相互接続が必要な場合など、クライアントソフトウェアをインストールしないでネットワーク間をVPNゲートウェイを経由して接続するのが、サイト間VPN

VPNゲートウェイの役割として、送信トラフィックカプセル化する。また、暗号化も担当している。

そして、インターネットに構築してある(構築する必要がある)トンネルと呼ばれる仮想回路なるものを通過し、送信先VPNゲートウェイに送られる。

受け取り手であるVPNゲートウェイは、非カプセル化を行うことで、データが受け取れることになる。

では、リモートアクセスVPNの方はどうなるかというと、ユーザーはクライアントソフトのインストールが必要となる。

例えば、営業が社外からインターネット経由で社内のLANに安全にアクセスしたいときなどが考えられるでしょうか。近年では在宅勤務(リモートワーク)ではこちらの手段を使用している方が多いのではないかと思います。

このクライアントソフトは、トラフィックを送信する際、カプセル化/暗号化を行う。その後、送信先ネットワークの末端(エッジ)にあるVPNゲートウェイに送られることになる。

その先はサイト間VPNと同様に非カプセル化されターゲットに展開される。

ここで新たな用語がいくつか出てきましたが、トンネル(トンネリング)について、少し詳しくみていきます。

トンネル(のプロトコル)

トンネルは道路のトンネルみたいなものを想像しても良いかもしれません。

が、道路のトンネルと違うのは、ただ単に車を通過させるためでなく他に役割があるという点です。

※ ここではトンネルの構築方法は説明しません。

インターネット上にこのトンネルを構築する = 仮想的な経路を作成する

この経路作成するための素材として、プロトコルがあります。

トンネリングを行えるプロトコルには、PPTP,L2F,L2TP,IPsec,GREなどがあります。

ですが、この中で暗号化が可能なのがIPsecのみです。なので、IPsecでないプロトコルを使用した場合はIPsecを組み合わせて暗号化を実現する必要があるようです。

ここでよくググって出てくるのは(IPsecと対比して)、SSL-VPNです。

IPsecSSL-VPNどちらが良いの?という話があるが、ここでは以下の説明にとどめておく。

SSL-VPNは、OSI7階層モデル(○○層とかのやつ)のセッション層で実装される技術であるということ。

また、IPsecは、ネットワーク層で実装される技術。

この階層の相違は開発/運用しているアプリに影響を与えるということです。

つまり、HTTPやSMTP,FTPなどのアプリを変更することなくIPSecVPNを使用して利用することが可能であることがわかる。 IPSecネットワーク層で実装されるため、上位のアプリケーションプロトコルに依存しないよということですね。

どういった影響があるとか、そういった説明はここでは割愛させて頂きます。

このトンネルですが、脅威がトンネル内に侵入する可能性もゼロではありません

100%の安全を保証することはインターネット上を経由するため不可能ですが、安全にやり取りする方法があるので、それを駆使するのが無難なようです。暗号化や認証をすることでVPNは安全性を高めることがきます。

さて、ここまできたら大体VPNのイメージがわかったのではないでしょうか。

技術者としての具体的なVPNの構築方法は、クライアントソフトやAWSなどのクラウドサービスによって異なります。

そのネットワークや実現したいことに合わせて、随時使いやすいツール導入したり、アーキテクチャを考える必要がありそうですね。

この記事では詳しい導入手順は記述しませんが、OpenVPNというソフトの紹介をAWSサービスを関連付けて簡単にみていきたいと思います。

OpenVPN

OpenVPNは、MacOS, WindowsLinuxで利用できるオープンソースVPNソフトです。

GPLというライセンス形態で配布されていて、もちろん無料です。

GPL(General Public License)とは、オープンソース フリーソフトウェア用のライセンスの1つで、著作権表示を保持しなければならないといことと、このソフトを使用して損害があったとしても自己責任ですよ。それさえ守れば複製・改変・頒布はOKというライセンスルールです。

以下、公式ドキュメントになります。詳しいことはここを覗いてみましょう。

OpenVPNとは | OpenVPN.JP

このソフトとAWSサービスをセットでアーキテクチャを構築している組織も多いでしょう。

構築したいアーキテクチャは、それぞれ異なると思いますので、"ほんとに"簡単な流れのみ記述していきます。w

  1. OpenVPNをEC2などにインストール
  2. 認証局など、証明書の発行/設定を行う (参考: https://qiita.com/ohechi/items/7ed8a61194eb1dcca283 )
  3. OpenVPN自動起動を設定
  4. AWS-> VPC -> ルートテーブル/Security Groupなど設定
  5. クライアント側のOpenVPNを利用するための設定(OpenVPN GUIなどダウンロード)

ほんとにざっくりですが、主にポチポチで済む作業がほとんどですね。

また、macの場合はクライアントアプリとしてTunnelblickが良いと思います。

tunnelblick.net

.crt , .key , /usr/share/doc/openvpn-2.4.3/sample/sample-config-files/client.conf -> xxxxx.ovpn

このようなファイルは大切に、導入後もきちんと管理できるディレクトリに置いておきましょう。(クライアント側)

まとめ

簡単ですが、VPNについて書きました。

利用はしたことはあるけど、構築をする機会やあんまり勉強してないや!ってかんじでも

最低限ここまで抑えることができたら、あとは構築する組織のネットワークとの相性や使い方との相談です。笑

プログラミング言語のライブラリなどと比べて、そこまでたくさんのツールが用意されているわけではなさそうなので、1度覚えたらあとは応用です!

また、今回はサイト間VPNについては詳しく記述していません。

専用のルーターや回線をひくことになるので、情シスさんやインフラ屋さんは、通信事業者と相談することになるでしょう。

AWSを利用している組織は、

AWS Direct Connectなんかも関連して、概要だけでも知っておくのはありかもしれません。

aws.amazon.com

以上.

参考