OpenVPNサーバ編では、FreeBSDマシンにOpenVPNをインストールし、VPNサーバの設定を行ないました。本記事では、三つ目のパートとして、WindowsマシンへのOpenVPNのインストールとVPNクライアントの設定を行ないます。その後、VPNクライアントとVPNサーバとの間で最低限の通信ができることを確認します。

クライアント証明書の発行

OpenVPNをインストールする前に、まずクライアント証明書を発行しておきましょう。手順は「証明書を発行」で述べたとおりです。コモンネーム(Common Name, CN)には、ネットワーク設計編で決定しておいたドメイン名vpnclient.example.orgを指定します。

後ほど、以下のファイルをWindowsマシンにコピーしますので覚えておいてください。

クライアントの秘密鍵について、パスフレーズなしのものを用いるのでもかまいませんが、安全のため、クライアントの秘密鍵はパスフレーズで保護されているものを使うことを推奨します。(VPN接続を開始するたびにパスフレーズの入力を求められますが、安全重視でお願いします。)

OpenVPNのインストール

次に、OpenVPNをインストールします。

OpenVPNのCommunity DownloadsからWindows用のインストーラをダウンロードします。ダウンロードが終わったら、インストーラをダブルクリックしてインストールを開始してください。途中いくつか確認を要する画面が現れますが、どれもデフォルト設定のままでOKです。

デフォルトではC:\Program Files\OpenVPN以下に一連のファイルがインストールされます。ディレクトリ構成は以下のようになります。

C:\Program Files\OpenVPN
├ bin            - 実行ファイル、DLL
├ config         - 設定ファイル
├ doc            - ドキュメント
├ log            - ログ
└ sample-config  - サンプル設定ファイル

サンプル設定ファイルのディレクトリにclient.ovpnというファイルがあります。今回はクライアントの設定をしますので、このファイルをひな型として使用します。本ファイルを設定ファイルのディレクトリにコピーしましょう。ファイル名は、接続先を示すものに変更しておくとわかりやすいです。本記事ではvpnserver.example.comに接続しに行きますので、vpnserver.ovpnという名前に変更します。

また、クライアント証明書の発行であげた3つのファイルを設定ファイルのディレクトリにコピーします。さらに、OpenVPNサーバ編で生成しておいた、HMAC用の共有秘密鍵(/usr/local/etc/openvpn/ta.key)も設定ファイルのディレクトリにコピーします。

結果として、設定ファイルディレクトリ(C:\Program Files\OpenVPN\config)には以下の6つのファイルがあるはずです。

README.txt          - もともとあったREADME.txt
root-ca.crt         - Root CAの証明書
ta.key              - HMAC用の共有秘密鍵
vpnclient.crt.full  - クライアントのフルチェーン証明書
vpnclient.key       - クライアントの秘密鍵(パスフレーズあり)
vpnserver.ovpn      - クライアント設定ファイル

OpenVPNの設定

では、次にOpenVPNクライアントの設定ファイルvpnserver.ovpnの内容について、主要な部分を見ていきます。完全な設定ファイルは以下のGitHubリポジトリに置いてありますので、必要に応じでご参照ください。

以上でクライアントの設定は終了です。

OpenVPNの起動

設定ができましたので、次はいよいよOpenVPNの起動です。スタートメニュー→OpenVPNと進み、OpenVPN GUIを選択してGUIプログラムを起動します。そうすると、ツールバーにOpenVPN GUIのアイコンが追加されます。

OpenVPN GUIのツールバーアイコン

このアイコンを右クリックするとメニューが出ますので、「接続」を選びます。

OpenVPN GUIアイコンを右クリック

GUIが起動しログ画面が表示されます。また、パスワードを求められますので、秘密鍵のパスフレーズを入力します。

OpenVPN GUIのパスフレーズ入力画面

すると、接続処理が始まります。接続が成功すると、アドレスが割り当てられた旨の通知が画面右下に出ます。以上で接続完了です。

OpenVPNの接続完了通知

クライアント−サーバ間の導通確認

最後に、VPNサーバとの通信ができるか確認しましょう。最低限の通信ができることをpingコマンドを用いて確認します。VPN内でのVPNサーバのIPアドレスである172.16.0.1に対してpingを実行します。

C:\Users\XXXXXX>ping 172.16.0.1

172.16.0.1 に ping を送信しています 32 バイトのデータ:
172.16.0.1 からの応答: バイト数 =32 時間 =6ms TTL=63
172.16.0.1 からの応答: バイト数 =32 時間 =7ms TTL=63
172.16.0.1 からの応答: バイト数 =32 時間 =6ms TTL=63
172.16.0.1 からの応答: バイト数 =32 時間 =6ms TTL=63

172.16.0.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 6ms、最大 = 7ms、平均 = 6ms

上記のように応答が返ってくればOKです。これで、OpenVPNサーバとの間に安全な通信路(トンネル)が確立しました。クライアントからの通信はすべてトンネルを経由するよう、サーバ側で設定してありますので、暗号化されていない公衆無線LANでも安全な通信が可能です。

めでたし、といいたいところなのですが、実はいままでの設定だけではVPNサーバとだけしか通信できません。そうではなくて、VPNサーバを経由してインターネット上のいろいろなサービスを安全に利用すること、がやりたいことですよね?

次回は、VPNサーバを介してVPNクライアントがインターネットと通信できるよう、VPNサーバをNATルータとして動作させるための設定を説明します。

参考文献

  1. OpenVPN, https://openvpn.net/

イメージクレジット

本記事において、Windowsのデスクトップ壁紙として使用している画像は、ロシア・キーロフスク在住のFox Grom氏によるものです。氏のアルバムは以下のURLで閲覧できます。