WindowsでOpenVPNへのクライアント接続を自動化する
先にも書いたとおり、
WindowsでOpenVPNへのクライアント接続を自動化するために、クライアントにもサーバーにもなるOpenVPN Windows版を使います。
OpenVPN を使って仮想LAN接続してみる でも解説しているとおり、まずは、接続できる環境を整備します。
先の記事と重複しますが、一応、その手順も含めて自動化の手順を解説してみます。(先の記事を既に読まれている方は、自動化のところからお読みください。)
設定の条件として以下のとおりとします。
- OpenVPN サーバー パブリックIPアドレス : 192.168.1.99
- OpenVPN サーバー プライベートIPアドレス : 10.8.0.1
先のダウンロードページからOpenVPN 2.2.2 をダウンロードし、インストールします。
Windows版では、MicroSoft の.NET Framework 3.5以上が必要なので、もし、インストールされていないようであれば、先にインストールします。
インストール自体は、画面の指示に従ってインストールするだけなので割愛します。
また、TAPドライバーのインストール確認のために以下のような画面表示があります。その場合は、迷わずインストールをクリックします。
先のOpenVPN サーバーで作成した各証明書、鍵などのファイルをコピーします。
ここでは、OpenVPNサーバーから C:\openvpn へ 必要な各証明書、鍵などのファイルが一式すべてコピーするものします。
コピーされるべきファイルは、以下のとおりです。
C:\openvpn> dir /B
ca.crt
client_pc1.crt
client_pc1.key
ta.key
|
C:\openvpn は、OpenVPN のインストール先ではありません。
ここでは、OpenVPN のインストール先はインストーラのデフォルトのディレクトリとしています。
一般的には、そこにコピーしたくなりますが、OpenVPN のインストール先は、Windows Vista/7/8 では、管理者権限がないとファイルの書き込みができないので色々と面倒です。
そのため、ここでは C:\openvpn というディレクトリを作成して そこにコピーしています。
クライアント認証用のパスワードファイルを作成します。
クライアント証明書を作成する際に入力したパスフレーズを保存したテキストファイルをパスワードファイル ( C:\openvpn\pass.cfg )として作成します。
中身は、単純なテキストファイルでパスワードをそのまま1行目に入力したものです。以下は、ファイルの中身を出力した様子で、単純にテキストが設定されていることがわかるかと思います。
C:\openvpn> cat pass.cfg
password
C:\openvpn$>
|
パスワードファイルを作成するのは、接続する度にパスワードを入力するのも大変なので自動化のために作成しています。
クライアント接続用の OpenVPN Configファイルを作成します。
クライアント接続用の OpenVPN Configファイル ( C:\openvpn\client.ovpn )を作成します。
# VPN Client を設定します
client
# tap/tun のいずれを使用するか指定します。VPN Serverの設定に合わせます
dev tun
# TCP/UDP のいずれを使用するか指定します。VPN Serverの設定に合わせます
proto udp
# VPN ServerのIPアドレス( 192.168.1.99 ) とポート番号( 1194 )を設定します
remote 192.168.1.99 1194
# remoteで指定したホスト名の名前解決のためのタイムアウト時間(ここでは無制限)を設定します
resolv-retry infinite
# 特定のリソースアクセスへの回避を指定します。(以下デフォルトのままです)
persist-key
persist-tun
# 認証局証明書のファイル名を指定します。
ca ca.crt
# クライアント証明書のファイル名を指定します。
cert client_pc1.crt
# クライアント秘密鍵のファイル名を指定します。
key client_pc1.key
# クライアント認証パスワードファイル名を指定します。
askpass pass.cfg
key-direction 1
# TLS-AUTH HMAC 共有鍵のファイル名を指定します。
tls-auth ta.key 1
# LZOによる圧縮を有効にします。
comp-lzo
# ログファイルへの出力レベルを指定します。
verb 4
|
コマンドプロンプトからアクセスしてみましょう。
コマンドプロンプトは、管理者権限で実行します。
C:\openvpn> set path=%path%;"C:\Program Files (x86)\OpenVPN\bin"
C:\openvpn> openvpn.exe --config client2.ovpn
...
Mon Jan 14 05:52:23 2013 us=74000 OPTIONS IMPORT: route options modified
Mon Jan 14 05:52:23 2013 us=90000 ROUTE default_gateway=192.168.1.1
Mon Jan 14 05:52:23 2013 us=90000 TAP-WIN32 device [ローカル エリア接続] opened: \\.\Global\{xxxxxx-xxxxx-xxxx-xxxx-xxxxxxxx}.tap
Mon Jan 14 05:52:23 2013 us=90000 TAP-Win32 Driver Version 9.9
Mon Jan 14 05:52:23 2013 us=90000 TAP-Win32 MTU=1500
Mon Jan 14 05:52:23 2013 us=90000 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.50/255.255.255.252 on interface {xxxxxx-xxxxx-xxxx-xxxx-xxxxxxxx} [DHCP-serv: 10.8.0.49, lease-time: 31536000]
Mon Jan 14 05:52:23 2013 us=90000 Successful ARP Flush on interface [19] {xxxxxx-xxxxx-xxxx-xxxx-xxxxxxxx}
Mon Jan 14 05:52:25 2013 us=367000 TEST ROUTES: 1/1 succeeded len=1 ret=1 a=0 u/d=up
Mon Jan 14 05:52:25 2013 us=383000 C:\WINDOWS\system32\route.exe ADD 10.8.0.0 MASK 255.255.255.0 10.8.0.49 OK!
Mon Jan 14 05:52:25 2013 us=383000 Initialization Sequence Completed
|
Initialization Sequence Completed で接続完了です。
クライアント側のIPアドレスは、10.8.0.50で振られています。
(切断したい場合は、F4キーを押下します。)
別のコマンドプロンプト画面から pingで OpenVPN サーバー( 10.8.0.1 固定です。)へアクセスできるか確認してみましょう。
C:\openvpn> ping 10.8.0.1
10.8.0.1 に ping を送信しています 32 バイトのデータ:
10.8.0.1 からの応答: バイト数 =32 時間 =1ms TTL=64
10.8.0.1 からの応答: バイト数 =32 時間 =1ms TTL=64
10.8.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64
10.8.0.1 からの応答: バイト数 =32 時間 =2ms TTL=64
10.8.0.1 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 2ms、平均 = 1ms
|
上記のように通ればOKです。
また、逆も確かめておきます。
$ ping -c5 10.8.0.50
PING 10.8.0.50 (10.8.0.50) 56(84) bytes of data.
64 bytes from 10.8.0.50: icmp_seq=1 ttl=128 time=0.842 ms
64 bytes from 10.8.0.50: icmp_seq=2 ttl=128 time=2.17 ms
64 bytes from 10.8.0.50: icmp_seq=3 ttl=128 time=1.66 ms
64 bytes from 10.8.0.50: icmp_seq=4 ttl=128 time=1.50 ms
64 bytes from 10.8.0.50: icmp_seq=5 ttl=128 time=1.00 ms
--- 10.8.0.50 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4053ms
rtt min/avg/max/mdev = 0.842/1.438/2.176/0.478 ms
|
逆向きは、Windos Vista/7/8 のデフォルトの設定では、NGになることがあります。
これは、Windowsファイアウォールが効いていて、外部からのpingコマンドを受け付けないようになっているためです。これを解除すれば、pingがとおるようになります。
簡単な解除方法は以下のとおりです。
- コントロール パネル > システムとセキュリティ > Windows ファイアウォール でファイアウォール管理画面を表示します。
- ファイアウォール管理画面 の画面左の 詳細設定 をクリックすると以下のように セキュリティが強化されたWindowsファイアウォールが表示されます。
- 画面中央のWindowsファイアウォールのプロパティをクリックします。
- パブリックプロファイルタブをクリックします。
- 保護されているネットワーク接続 カスタマイズ をクリックします。
- ネットワーク接続一覧 の中で TAPアダプタの名前 (ここではローカルエリア接続)のチェックを解除して、OK をクリックします。
pingが通らなくてもほとんど影響はありませんので、確認を終えたらもとに戻しておきましょう。
OpenVPN-GUIを使いたい場合は、以下のように実行すればOKです。
C:\openvpn> set path=%path%;"C:\Program Files (x86)\OpenVPN\bin"
C:\openvpn> openvpn-gui-1.0.3.exe --config_dir "C:\openvpn\config_gui" --connect client.ovpn
|
openvpn-gui-1.0.3.exe の実行ファイル名は、OpenVPNのバージョンによって異なります。
OpenVPN-GUIを実行した場合、タスクトレイにアイコン表示されます。
切断状態
接続状態
また、右クリックでメニューが表示されますので、各操作を行うことができます。
Windowsログイン時に自動的にVPN接続を行うように自動化したい場合は、上記の手順をバッチファイルにして、管理者権限で実行すればOKです。
管理者権限で実行する場合の確認画面を表示したくない場合は、(最上位の特権で実行するように)タスク登録してタスク名で実行するのが一番ポピュラーなようです。
ここまでは、OpenVPN を使って仮想LAN接続してみる でも記載した内容です。
OpenVPNクライアント接続の自動化を行います。
ここまでで手動による接続が確認できたら、あとは、これを自動化します。
OpenVPNを自動化するには、大きく2つの手段があります。
前者は、サービスなので誰がPCを使っていてもVPNが接続されてしまいます。
後者は、ユーザ毎に設定できるもののバッチファイルを管理者権限で実行する必要があります。
いずれも一長一短あります。
それでは、両者のやり方を簡単に解説してみます。
OpenVPN のサービスを使う方法
OpenVPN のサービスを使ってOSが起動したときに自動的に接続するには、以下の手順で行います。
- C:\openvpn 配下のConfigファイル(拡張子 ovpn )を自動的に読み込むように設定します。
OpenVPN のサービスは、デフォルトの動作として、
Configファイル(拡張子 ovpn )を
→ %OpenVPNインストールディレクトリ%\config
(例)”C:\Program Files\OpenVPN\config”)
から検索します。
つまり、上記の例では、
C:\Program Files\OpenVPN\config の配下に 拡張子 ovpn のファイルを探して、そのConfigファイルに従いOpenVPNを起動します。
今回は、Configファイル(拡張子 ovpn )を
C:\openvpn に置くようにしたので、この設定を変更すれば、OpenVPN のサービスが使えることがわかります。
OpenVPN のサービスがC:\openvpn を検索させるには、通常のデフォルトのOpenVPN のConfigディレクトリをC:\openvpnに向ければOKです。
通常のデフォルトのOpenVPN のConfigディレクトリは、Windowsの場合、レジストリにて設定を変更することができます。
[32bitWindowsの場合]
HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN\config_dir=”C:\\openvpn”
[64bitWindowsの場合]
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\OpenVPN\config_dir=”C:\\openvpn”
とすれば、デフォルトのOpenVPN のConfigディレクトリをC:\openvpnとすることができます。
レジストリには、デフォルトで以下のように設定してあります。
# レジストリーキー
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\OpenVPN]
@="C:\\Program Files (x86)\\OpenVPN"
# Configディレクトリ
"config_dir"="C:\\Program Files (x86)\\OpenVPN\\config"
# Config拡張子
"config_ext"="ovpn"
# OpenVPNの実行ファイルパス
"exe_path"="C:\\Program Files (x86)\\OpenVPN\\bin\\openvpn.exe"
# ログディレクトリ
"log_dir"="C:\\Program Files (x86)\\OpenVPN\\log"
# プロパティ
"priority"="NORMAL_PRIORITY_CLASS"
# ログ追加フラグ
"log_append"="0"
|
- OpenVPN サービスを自動的に起動するように設定します。
OpenVPN のサービスは、デフォルトで手動にて起動するようになっています。(初期上状態では、動いていません)
そこで、OpenVPN サービスを自動起動とし、最後に起動すれば接続OKです。
コントロール パネル → システムとセキュリティ→ 管理ツール→ サービス
ここで、OpenVPN Serviceを選択し、プロパティを選択し、以下のプロパティ画面を表示します。
スタートアップの種類 : 自動 を選択し、開始 ボタンをクリックします。最後に、下段のOKボタンをクリックし完了です。
先の手動手順をバッチファイルにして、スタートアップに登録する方法
先に手動で確認した手順をバッチファイルにして、各ユーザ毎のスタートアップに登録することで自動化することもできます。
この方法は、以下の手順で行います。
- 先の手動手順をバッチファイルにします。
ここでは、わかりやすいように OpenVPN GUI を使ってみます。
C:\openvpn\auto_gui.bat というファイルを作成します。
@echo off
set path=%path%;"C:\Program Files (x86)\OpenVPN\bin"
C:
cd C:\openvpn>
openvpn-gui-1.0.3.exe --config_dir "C:\openvpn\config_gui" --connect client.ovpn
|
Windows XPなら、このファイルをスタートアップに追加すれば終了ですが、
Windows Vista/7/8 は、管理者権限でこれを実行する必要があります。以降の手順は、その管理者権限で実行する場合の確認画面を出さないための手順です。
- 作成したバッチファイルをタスク登録します。
コントロール パネル → システムとセキュリティ→ 管理ツール→ タスク スケジューラ
- 画面左のタスクスケジューラライブラリをクリックします。
- 画面右のタスクの作成をクリックします。
- タスクの作成画面が表示されますので、
名前 : openvpn-autoとします。
セキュリティオプション : 最上位の特権で実行するをチェックします。
続けて、操作タブをクリックします。
画面下、新規(N)をクリックします。
操作 : プログラム開始とします。
プログラム/スクリプト : C:\openvpn\auto_gui.bat 先に作成したバッチファイルのフルパスを設定します。
画面下、OKをクリックします。
同様にすべての画面を終了します。
- 作成したタスクを実行するバッチファイルを作成します。
先に作成したタスクを実行するためのバッチファイルを作成します。
C:\openvpn\auto_task.bat というファイルを作成します。
@echo off
schtasks.exe /run /tn openvpn-auto
|
これだけです。openvpn-autoが、先に作成した時のタスク名(名前で設定したもの)になります。簡単ですね。
あとは、このファイルをスタートアップに追加すれば終了です。
ログインして確認してみてください。
タスクトレイに接続状態なら以下のように表示されればOKです。
うまくできたでしょうか?
最近では、Windowsのセキュリティが厳しいので、確認画面が度々表示され嫌になりますね。
でも、これぐらいしてもウイルス、マルウェアに感染したり、意図しないサイトへ勝手にアクセスしたりと危険がいっぱいです。
ちょっと話はそれますが、
OpenVPN のサービス実行プログラム(openvpnserv.exe)を語った、マルウェアがあるのは有名な話です。
マルウェアの場合は、c:\windows や c:\windows\system32 などのシステムディレクトリに存在するのが特徴です。
マルウェアが作成されるほど、便利でユーザが多いということでもあるのでしょうね。
便利は、反面セキュリティを弱めることもあります。十分に気を付けましょう。
コメントを投稿 :