OpenVPNサーバ編では、FreeBSDマシンにOpenVPNをインストールし、VPNサーバの設定を行ないました。本記事では、三つ目のパートとして、WindowsマシンへのOpenVPNのインストールとVPNクライアントの設定を行ないます。その後、VPNクライアントとVPNサーバとの間で最低限の通信ができることを確認します。
クライアント証明書の発行
OpenVPNをインストールする前に、まずクライアント証明書を発行しておきましょう。手順は「証明書を発行」で述べたとおりです。コモンネーム(Common Name, CN)には、ネットワーク設計編で決定しておいたドメイン名vpnclient.example.org
を指定します。
後ほど、以下のファイルをWindowsマシンにコピーしますので覚えておいてください。
root-ca.crt
: Root CAの証明書vpnclient.crt.full
: クライアントのフルチェーン証明書vpnclient.key
: クライアントの秘密鍵(パスフレーズあり)
クライアントの秘密鍵について、パスフレーズなしのものを用いるのでもかまいませんが、安全のため、クライアントの秘密鍵はパスフレーズで保護されているものを使うことを推奨します。(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リポジトリに置いてありますので、必要に応じでご参照ください。
FreeBSD-OpenVPN - Sample configuration files for setting up an OpenVPN server/client on FreeBSD
vpnserver.ovpn
L13-16: クライアントであることを宣言
# Specify that we are a client and that we (snip) client
クライアントであることを最初に宣言します。
- L18-24: ネットワークデバイスの設定
# Use the same setting as you are using on (snip) ;dev tap dev tun
デフォルトの
tun
デバイスを使います。サーバ側の設定と同じにしてください。- L18-24: ネットワークデバイスの設定
L33-37: トランスポートプロトコルの設定
# Are we connecting to a TCP or (snip) ;proto tcp proto udp
デフォルトのトランスポートはUDPです。サーバ側の設定と同じにしてください。
- L39-43: 接続先サーバの設定
# The hostname/IP and port of the server. (snip) remote vpnserver.example.com 1194 ;remote my-server-2 1194
接続先VPNサーバのドメイン名とポート番号を指定します。ネットワーク設計編で確認しておいた、サーバのドメイン名を指定します。また、サーバのデフォルト待ち受けポート番号は1194です。こちらはサーバ側の設定と同じにしてください。
L82-90: クライアント証明書の設定
# SSL/TLS parms. (snip) ca ca.crt cert vpnclient.crt.full key vpnclient.key
設定ファイルディレクトリにコピーしておいた、証明書関連の各ファイルのファイル名を指定します。
- L110-117: 暗号・ハッシュ関数の設定
# Select a cryptographic cipher. (snip) cipher AES-256-CBC auth SHA256
認証に使うハッシュ関数SHA256を追加で指定します。(デフォルトはSHA1で強度が不十分なため。)
L130-131: パケットサイズの設定
fragment 1354 mssfix 1354
パケットのフラグメンテーションを防ぐため小さめの値を設定してあります。お使いの環境に合わせて調整していただいてかまいませんが、サーバ側の設定値と同じにしてください。
以上でクライアントの設定は終了です。
OpenVPNの起動
設定ができましたので、次はいよいよOpenVPNの起動です。スタートメニュー→OpenVPNと進み、OpenVPN GUIを選択してGUIプログラムを起動します。そうすると、ツールバーにOpenVPN GUIのアイコンが追加されます。
このアイコンを右クリックするとメニューが出ますので、「接続」を選びます。
GUIが起動しログ画面が表示されます。また、パスワードを求められますので、秘密鍵のパスフレーズを入力します。
すると、接続処理が始まります。接続が成功すると、アドレスが割り当てられた旨の通知が画面右下に出ます。以上で接続完了です。
クライアント−サーバ間の導通確認
最後に、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ルータとして動作させるための設定を説明します。
参考文献
- OpenVPN, https://openvpn.net/
イメージクレジット
本記事において、Windowsのデスクトップ壁紙として使用している画像は、ロシア・キーロフスク在住のFox Grom氏によるものです。氏のアルバムは以下のURLで閲覧できます。