(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【サルでも分かる】OpenVPN入門

スポンサーリンク

f:id:mtiit:20190409210315p:plain

はじめに

OpenVPN?言われるがままにWindowsにインストールした事あるかも?

程度の知識でもOpenVPNについて理解できるよう、わかりやすい入門記事を書いてみました。

所要時間目安 : 10分

OpenVPNとは

OpenVPNはオープンソースのVPNソフトウェアです。

公式サイトでも、以下のように説明されています。

OpenVPN Technologies Inc.を中心とした開発者によってオープンソースで開発されている、VPNを構築するためのアプリケーションです。VPNを利用することにより、インターネット上に仮想的にネットワークを構築し、場所の離れた拠点間、またモバイル環境とオフィス内LANの間などを安全に接続することができます。(openvpn.jpより抜粋)

いきなりOpenVPNの特徴を紹介する前に、入門記事らしくVPNについて見ていきます。

VPNの役割

そもそもですが、拠点Aと拠点Bを結ぶ際に接続性やセキュリティの観点で最も高いレベルにいるのが専用線です。新たにケーブルを敷設し、通信事業者が管理しているエリアのみを通って拠点間通信を行います。

ただ単に通信を行うだけであればインターネット経由でも通信はできます。そんな中で専用線があるということから分かる通り、専用線というのはランニングコストや敷設費用は高くなります。

そんな中で、物理的には共有ネットワークを用いながらも、ソフトウェアの力で専用線に近いネットワークを構築するための技術が求められました。

それがVPNで、

VPNはVirtual Private Networkの略です。

Virtual(仮想的な)Private Network(専用線)。そのままだ。


ではVPNがあれば専用線はいらないのかと言えばそんなことはなく、VPNを用いた通信は専用線を用いたそれと比べると通信速度の変動リスクセキュリティリスクは大きくなります。

一概にVPNといっても、通信網にインターネットを用いるか通信事業者のIP網を使うかなどでも変わってきます。
簡単に整理した表は以下になります。

専用線/IP網/インターネット
専用線 IP-VPN インターネットVPN
速度変動 帯域全てを占有 混雑時も一定の帯域が確保 混雑時は帯域不足
セキュリティ 専用線のため高い クローズなネットワークを利用するため比較的高い 回線としては低いがVPNの暗号化によっては確保可能
コスト

OpenVPNとは

一般的なVPNについて見てきましたが、いよいよOpenVPNにフォーカスします。
VPNを実現するためのアプリケーションは例えばCisco社が提供するような有償のものもありますが、OpenVPNは無償で利用できます。

というのも、OpenVPNはGNU General Public LicenseというオープンソースのSSL/TLSを用いたVPNソフトウェアだからです。

また新しい用語が2つでてきました。

一つ目のGNU General Public LicenseとはGPLとも略される二次的著作物についてもオープンであることを求めるライセンスです。
つまり、GPLで提供されるプログラムを元にしたプログラムはGPLとなります。一方、例えばBSDライセンスであれば、ソースコードを複製・改変して作成したプログラムは、ソースコードを公開せずに頒布できます。

GPLは、配布の時にソースコードの公開が必須なんだね。


二つ目のSSL/TLSというのは、VPNを実現する手法です。
Secure Sockets Layer(SSL)/Transport Layer Security(TLS)というプロトコルを用いてVPNを実現します。

ネットサーフィンをしている時にURLが「https」から始まっている場合がありますが、それと同じ種類の暗号化通信ということもあり、馴染みが深いプロトコルです。

具体的には以下のようにパケットを付加し、「トンネル化+暗号化」を実現します。
f:id:mtiit:20181029194356j:plain

VPNっていっても結局はヘッダをつけてるだけなのか。


OpenVPNを実際に使用するにあたって

エンジニア観点ですが、OpenVPNの特徴にクライアント側とサーバ側が同じプログラムで実行される点があります。設定ファイルでクライアントかサーバかを設定します。

例えばパソコンやスマートフォンに利用する場合はこちらがクライアントで、対向の接続先がサーバです。そのサーバがVPN機能を提供してくれます。

また、OPenVPNのインストールを行う際には
OpenSSLLZOが前提となっています。

OpenSSLとは、これまたオープンソースで開発されているソフトウェアで、実体はC言語で書かれている暗号化通信のプログラムです。
有償のVPNソフトも実体はOpenSSLが利用されているケースがあるので興味があれば自分が使っているVPNソフトのバージョン情報等を確認してみてください。

LZOとは、可逆データ圧縮アルゴリズムのライブラリです。これを用いることによりVPNの通信量削減を実現します。伸張速度の速さが特徴でいろんな場面で使われているアルゴリズムです。

OpenVPNのインストールが完了すれば設定ファイル(client.conf/server.conf)を編集します。


イメージを掴んでいただくために、クライアント側の設定ファイルの一部を記載します。
以下のようなテキストファイルです。

client #クライアント側
dev tun #トンネルモード
remote 100.101.102.103 1194 #サーバ側のIPアドレス ポート番号
comp-lzo #LZO圧縮を有効に
...


そして、設定ファイルの次は認証のための鍵や証明書を配置してやる必要があります。
以下がそれぞれに配置するリストですが、鍵を用いた暗号化通信を行うことによりインターネットを通る通信においても、セキュリティを専用線のそれに近づけていることが分かります。

サーバ側に必要な鍵/証明書

  • 認証局証明書
  • VPNサーバ証明書
  • VPNサーバ秘密鍵

クライアント側に必要な鍵/証明書

  • 認証局証明書
  • VPNクライアント証明書
  • VPNクライアント秘密鍵


ここでの味噌はサーバ側はクライアント側の鍵であったりグローバルIPアドレスを管理していない点にあります。

そうすることで、クライアントが不特定多数となってもVPN機能を提供することができます。

クライアントに必要な証明書や鍵は、インストールする際に既に梱包されているケースが多いです。

Windowsにインストールしたフォルダの中に確かにいくつか鍵があった気がする!


まとめ

OpenVPNは、企業での利用でなければSSL-VPNを使用するVPNソフトでは第一候補にあがるくらいにシェアも実績も高いです。
また、パソコンやスマホではなくサーバ間で利用する場合は企業システムにも採用されることが多いです。

VPNは、パソコンだけでなくスマートフォンでも使用可能な身近な技術であるため今回は入門レベルの解説記事を書いてみました。理解の一助になれば幸いです。

以上、サルでも分かるOpenVPN概説でした。

(技術者向け) Linuxクライアントの接続イメージ