(O+P)ut

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



(O+P)ut

OutPut Log by SE

【サルでも分かる】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の通信網にインターネットを用いるか通信事業者のIP網を使うかなどでも変わってきます。
簡単に整理した表は以下になります。

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

こちらはおまけ程度で、理解いただければと思います。


OpenVPNとは

一般的なVPNについて見てきましたが、いよいよ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の特徴にクライアント側とサーバ側が同じプログラムで実行される点が挙げられます。設定ファイルで、クライアントかサーバかを設定します。
あえて簡単に書くならば、PC側がクライアント,VPN機能を提供する側がサーバです。

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

OpenSSLとは、これまたオープンソースで開発されているソフトウェアで、実体はC言語で書かれている暗号化通信のプログラムです。

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ソフトでは第一候補にあがるくらいにシェアも実績も高いです。

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

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

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