OpenVPNクライアントをサービスで実行する

vpnux Clientは証明書や鍵などのファイルを指定するだけで設定でき、簡単にVPNに接続することができますが、いちいちアプリを立ち上げて接続せねばならず、PCが起動したときに自動的に接続したりするのがちょっと面倒です。

もうひとつ、Windows版のOpenVPNはクライアント機能として実行できるだけでなく、Windowsのサービス登録ができるので、いちいちvpnux Clientを起動して接続する手間が省けます。手軽に使えるvpnux Clientと機能豊富なOpenVPNクライアントと使い分けると良いかと思います。

vpnux Client版の設定方法は、以前のエントリをご覧ください。

サーバー側で設定ファイルを作る

なにはともあれ、設定ファイルが必要です。Windows版のOpenVPNで必要なのは、サーバー証明書、クライアント証明書と秘密鍵、共有鍵(HMAC Firewall用)、そして*.ovpnファイルとなります。ovpnファイルには、接続先や接続方法などを記載したテキストの設定ファイルになります。

まずはいつもどおり、おなじみeasyrsaコマンドでサーバー証明書、クライアント証明書と秘密鍵を作りましょう。

[root@sakura 3]# ./easyrsa build-client-full client2 nopass
Generating a 2048 bit RSA private key
...........................+++
...+++
writing new private key to '/usr/share/easy-rsa/3/pki/private/client2.key.Q9Afw3w8kV'
-----
Using configuration from ./openssl-1.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'client2'
Certificate is to be certified until Mar 21 05:10:02 2028 GMT (3650 days)

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

ちなみに、認証局側の秘密鍵ca.keyのパスフェーズも削除しちゃっています。あんましよろしくないかもしれませんが。

[root@sakura 3]# openssl rsa -in /usr/share/easy-rsa/3/pki/private/ca.key -out /usr/share/easy-rsa/3/pki/private/ca_nopass.key
Enter pass phrase for /usr/share/easy-rsa/3/pki/private/ca.key:
writing RSA key
[root@sakura 3]#

秘密鍵のパスフェーズを解除して別ファイルに出力した場合、easyrsaと同じディレクトリにある、openssl-1.0.confを編集してパスフェーズを解除した秘密鍵を見るようにします。

/usr/share/easy-rsa/3/openssl-1.0.conf
[ CA_default ]

dir             = $ENV::EASYRSA_PKI     # Where everything is kept
certs           = $dir                  # Where the issued certs are kept
crl_dir         = $dir                  # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
new_certs_dir   = $dir/certs_by_serial  # default place for new certs.

certificate     = $dir/ca.crt           # The CA certificate
serial          = $dir/serial           # The current serial number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/ca_nopass.key    # The private key
RANDFILE        = $dir/.rand            # private random number file

クライアント証明書の作成には「nopass」オプションを付けて、パスフェーズ無しとしています。

次に「*.ovpn」ファイルを作成します。テキストファイルなのでWindowsで作っても良いですし、鍵や証明書などをコピーするのが面倒であれば、サーバー上で作ってしまっても良いかと思います。

基本的には以下のような感じです。

client2.ovpn(サンプル)
client
dev tun
proto udp
remote ***.***.***.*** 1194
cipher AES-256-GCM
auth SHA256
resolv-retry infinite
nobind
persist-key
persist-tun
tls-client
key-direction 1
verb 3
tun-mtu 1500
compress lz4-v2
<key>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCojK/RiUAGIK1
  :
(中略)
  :
sWrChuuiSNeRswzAIpp6Sdk=
-----END PRIVATE KEY-----
</key>
<cert>
Certificate:
  :
(中略)
  :
-----BEGIN CERTIFICATE-----
MIIDZDCCAkygAwIBAgIQPsfirVS+ixg10tfuqcn9fTANBgkqhkiG9w0BAQsFADAj
  :
(中略)
  :
C86cZlskb4eTtzBgnJnpnoTaLCzsyK5COI+XCP3Dr0DL2ZUrGcfP8w4p2hfvIhnx
6jVDMLM8T4s=
-----END CERTIFICATE-----
</cert>
<ca>
-----BEGIN CERTIFICATE-----
MIIDXDCCAkSgAwIBAgIJAKK06WpN8rkOMA0GCSqGSIb3DQEBCwUAMCMxITAfBgNV
  :
(中略)
  :
v5d8D7+fkRWQdZQBCrIFd1jqXzVEhduNG1/s3HTzW/Bi/hQ3J72A3d2IFViwpYrB
-----END CERTIFICATE-----
</ca>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
d9dd259131d3c0b9a3daa6606fb02bb6
  :
(中略)
  :
86ae0709b6bd09251e2313aad27570ac
-----END OpenVPN Static key V1-----
</tls-auth>
client クライアント用の設定ファイルには必須。
dev tun インタフェースの種類でtap/tunを選びます。サーバーに合わせます。
proto プロトコル。こちらもサーバーに合わせます。
remote ***.***.***.*** 1194 接続先VPNのIPアドレスまたはホスト名とポート番号です。
cipher AES-256-GCM 暗号化方式。いろいろありますがこちらもサーバーに合わせます。
auth SHA256 ハッシュアルゴリズム。こちらもいろいろありますがサーバーに合わせます。
resolv-retry infinite ホスト名を解決できない場合などに何度リトライするか。
nobind 特定のポートをバインドせず、動的割り当てとする。
persist-key なんかの設定。おまじない的に書いておく。
persist-tun なんかの設定。おまじない的に書いておく。
tls-client TLS認証を使う場合に必要。
key-direction 1 TLS認証を使う場合に必要。
verb 3 ログ出力レベルの指定。
tun-mtu 1500 tunデバイスのMTU値の調整。サーバーに合わせて下さい。link-mtuと排他指定。
compress lz4-v2 パケットの圧縮方式。最新のクライアントを使用してください。
<key>~</key> クライアント用秘密鍵(client1.key)のファイルの内容を記載。
<cert>~</cert> クライアント用証明書(client1.crt)のファイルの内容を記載。
<ca>~</ca> 認証局証明書(ca.crt)のファイルの内容を記載。
<tls-auth></tls-auth> HMAC認証用の静的鍵(ta.key)ファイルの内容を記載。

上記の例では証明書や鍵ファイルの内容をovpnファイルにまとめて記載していますが、これらのファイルを分けて、ovpnファイルの中でそのファイルを指定することもできます。めんどうなので1つのファイルにまとめます。それが下の4つの定義で、それぞれのファイル(テキストです)の内容をcatコマンドなどで表示して、そのままコピペします。また、clientは忘れがち(自分が忘れただけ)ですが、これがないとクライアント側のIPアドレスを固定しなくてはいけないので不便です。

ovpnファイルが出来たら、これをクライアントに持ってきます。上記のフォーマットで作成した場合は、ファイル作成に使用したクライアント秘密鍵、証明書、認証局証明書、静的鍵などは不要です。

Windows版OpenVPN GUIのインストール

クライアント側の準備を行います。OpenVPN GUI for Windowsをダウンロードして、インストールします。

ウィザードを使うだけなので、上記サイトの通りにやっていただければインストールは難しくはないようです。

 

インストールが終わると、OpenVPN GUIが起動してタスクトレイにOpenVPN GUIのアイコンが表示されます。

 

手動でVPNに接続する

手動で接続するならvpnux Clientのほうが便利なのですが、OpenVPN GUIでも手動接続できます。

image

やり方は簡単で、OpenVPN GUIの初回起動時にもダイアログが出てきますが、「import file」するだけ。タスクトレイのOpenVPNアイコン(デスクトップに鍵のついたマーク)を右クリックすると、「import file」のメニューがあるので、それを選択して、サーバーから持ってきた「*.ovpn」ファイルを読み込みます。上のスクリーンキャプチャでは、client1, client2と表示されていますが、接続先が複数ある場合はそれぞれ選択することができます。

image

もしくは、ユーザーディレクトリ(C:\Users\hogehoge)の配下にあるopenvpnディレクトリの中のconfディレクトリにovpnファイルを放り込むだけです。ファイルを放り込んだら、タスクトレイからOpenVPN GUIのアイコンを右クリックして、接続してみましょう。アイコンがグリーンになれば成功です。接続の状況やログなどは、openvpn配下にlogディレクトリができるので、そこにログファイルが出力されます。

自動でVPNに接続する

もう一つの接続方法として、サービスに登録することで、コンピュータ起動時に自動的に対象のVPNに接続することができます。常時VPNにつなぐ場合にはこちらのやり方が便利です。

image

接続ファイルをOpenVPN GUIのインストール先ディレクトリ(C:\Program Files\OpenVPN\config)にあるconfigディレクトリにコピーします。

image

次に、管理ツール(コンピューターの管理など)からサービスとアプリケーションを開きます。

一覧からOpenVPN Serviceをダブルクリックして詳細ウィンドウを開き、スタートアップの種類を「自動」にします。また、起動していない場合はサービスの状態を「開始」をクリックしてサービスを起動します。

接続に成功できれば、サービスが起動状態となり、VPN接続ができています。SSHなどで接続できているかを確認してみましょう。サービス起動の場合は特に接続状態を示すウィンドウやアイコンは表示されませんが、OpenVPNインストールディレクトリ配下にあるlogディレクトリに接続先ごとのログが出力されるので、それで確認してください。

サービス起動設定の場合、パソコンを起動時に自動的にVPNへ接続されるので、併せて確認をすると良いかと思います。

コメントを残す

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

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