OpenVPNのクライアント設定ファイルの作成

OpenVPNサーバーの構築までは出来たので、次にクライアントの設定ファイルを作成します。

サーバー側でクライアント用の証明書と秘密鍵を発行、サーバーの証明書とHMACファイアウォールを構成するためのキーファイルを配布します。

OpenVPNのクライアントにはお手軽な「vpnux Client」を利用します。まずはvpnux Clientをダウンロード、インストールしておいてください。

vpnux Client – OpenVPN client for Windows

vpnux Client

クライアント用証明書と秘密鍵の生成

まずはサーバー側でクライアント用の証明書と秘密鍵を発行します。毎度おなじみeasyrsaコマンドを使います。

[root@sakura 3]# ./easyrsa build-client-full client1
Generating a 2048 bit RSA private key
......................................................................................................+++
...............+++
writing new private key to '/usr/share/easy-rsa/3/pki/private/client1.key.dQzP5c43VS'
Enter PEM pass phrase: <<<クライアント秘密鍵用のパスフェーズ>>>
Verifying - Enter PEM pass phrase: <<<クライアント秘密鍵用のパスフェーズ>>>
-----
Using configuration from ./openssl-1.0.cnf
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/ca.key: <<<認証局秘密鍵のパスフェーズ>>>
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client1'
Certificate is to be certified until Mar 18 15:19:17 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
[root@sakura 3]#

「./easyrsa build-client-full 設定ファイル名」という形でコマンドを実行します。このコマンド1つでクライアント用の証明書と秘密鍵をまとめて作ってくれるとっても便利ちゃんなコマンドです。

まず、「Enter PEM pass phrase:」でクライアント秘密鍵用のパスフェーズの入力を促されるので、これを入力します。パスフェーズを有効にしておくとクライアントPCから接続する際に入力が必須となります。ノートパソコンなど万が一の際に盗難の可能性があるデバイスから接続する場合には設定しておいたほうがいいかも。盗難されても指紋認証で入れないよ!という場合は無しでもかまいません。

その場合は「./easyrsa build-client-full 設定ファイル名 nopass」とコマンドの最後にnopassオプションを指定しておけば、パスフェーズが不要となります。

後で解除したい場合は、いつものopensslコマンドで。

[root@sakura 3]# openssl rsa -in pki/private/client1.key -out pki/private/client1.key
Enter pass phrase for pki/private/client1.key: <<<秘密鍵の設定したパスフェーズ>>>
writing RSA key
[root@sakura 3]#

クライアントへの配布とvpnux Clientの設定

クライアント用の秘密鍵などを作成したら必要なファイルをコピーします。

[root@sakura ~]# cp /usr/share/easy-rsa/3/pki/ca.crt /hogedir/openvpn/keys/
[root@sakura ~]# cp /usr/share/easy-rsa/3/pki/ta.key /hogedir/openvpn/keys/
[root@sakura ~]# cp /usr/share/easy-rsa/3/pki/private/surfacepro3.key /hogedir/openvpn/keys/
[root@sakura ~]# cp /usr/share/easy-rsa/3/pki/issued/surfacepro3.crt /hogedir/openvpn/keys/

SSHが使えるのであれば、SFTPも利用できると思うのでユーザのホームディレクトリにおいてSFTPでのダウンロードが手っ取り早いかもしれません。

image

ファイルの準備ができたら、vpnux Clientを起動します。左から2番目の「プロファイル」をクリックします。

imageimage

特にプロファイルなどは無いと思うので、「追加」をクリックします。

image

必要な項目を入力していきます。プロファイル名は適当に。VPNサーバーはOpenVPNの起動しているサーバーのグローバルIPアドレス、ポート番号は指定された番号(デフォルトは1194)、デバイスはTUN、プロトコルUDPを指定します。このあたりはOpenVPNサーバーの設定によりますので、デフォルト設定からいろいろといじっていたら、それに合わせて変更してください。拡張設定もそのままで。

CA証明書のところは未設定のよこの「…」をクリックすると証明書ファイルの読み込みウィンドウが開きます。

image

ファイルから読み込みで、サーバーからコピーしてきた「ca.crt」を選択して読み込んだら、保存します。

プロファイルの編集ウィンドウの証明書認証(PKI)を使用にチェックを入れて、証明書と秘密鍵も同様にインポートします。今回は秘密鍵にパスフェーズを設定していないので、パスワードの項目は空欄で。

image

プロファイルの編集の「詳細設定」を開きます。「TLS-Auth HMAC署名を使用」にチェックを入れて、共有鍵ファイルをインポートします。

最後に「保存」を押してこのプロファイルの編集を保存します。

image

最初にもどったら、プロファイルを選択して「接続」を押下します。

接続に成功すると、タスクトレイにvpnux Clientのアイコンが表示され、Vの文字が緑になります。ダブルクリックするとウィンドウが開いて接続中の状態を表示したり、接続ログを見ることができます。

image

この状態でSSHなどを使って、OpenVPNから割り当てられたアドレス「10.8.0.***」で接続できれば設定成功です。

トラブルシューティング

以下は、自分で遭遇したトラブルについてです。
そもそも接続できなかったり、接続は出来るのにエラーが出たり・・。解決の一助になればと思います。

暗号アルゴリズムがサーバーと合っていなかった。

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
# Note that v2.4 client/server will automatically
# negotiate AES-256-GCM in TLS mode.
# See also the ncp-cipher option in the manpage
;cipher AES-256-CBC

この設定とクライアントの設定が合っていなかったようです。サーバーとクライアントで自動的に暗号方式のネゴシエーションがされるはずだと思ったのですが、うまくいっていなかったみたいです。基本的にサーバーの設定をコメントアウト、クライアントを「デフォルト」に設定しておけば、AES-256-GCMでネゴシエーションされるみたいですが、古いクライアントだと上手くいかないみたいです。クライアントを最新にアップデートするか、サーバー側をAES-256-CBCに設定したうえで、クライアントの暗号アルゴリズムをデフォルトから「AES-256-CBC」にしたらうまくいきました。image

圧縮設定が間違っていたり、被っていた。

# Enable compression on the VPN link and push the
# option to the client (v2.4+ only, for earlier
# versions see below)
compress lz4-v2
push "compress lz4-v2"

# For compression compatible with older clients use comp-lzo
# If you enable it here, you must also
# enable it in the client config file.
;comp-lzo

これが両方とも有効になっていると上手く接続できないか、接続できても通信ができなくなるようです。見た目上は接続できているのですが、サーバーのopenvpn.logを覗いてみると「Bad LZO decompression header」というエラーが大量に出ていました。古いクライアントがいる場合は、「comp-lzo」のほうを有効にしたほうがいいのかもしれません。

クライアントのバージョンが古すぎた。

どうしても接続できずに悩んでいましたが、vpnux Clientを最新版にアップデートしたら接続できました。

firewallの設定でポートがふさがれていた。

firewalldの設定を変えた後にreload忘れました。いやトラブルじゃないっすね・・。

openvpnサーバーの設定ファイルがちゃんと読み込まれていなかった。

こちらもトラブルじゃないですが・・設定ファイルを書き換えたのに、serviceをsystemctlで再起動するのを忘れてました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください