OpenVPNで手軽にVPNを構築する
私は出張先でもリモートデスクトップで自宅のマシンに接続して、自宅と全く同じ環境で作業できるようにしている。ノートパソコンに開発環境やら、メールやら残しておくと、万一ノートパソコンを紛失したり盗難にあった場合、かなりダメージがでかいので、リスク管理という意味でも、このリモートデスクトップ環境は有意義だ。
しかしたまに困るのが、ホテルなどのネットワークを利用した場合、主要なポート(80とか25とか)以外通信できないことがある。そういう時にVPN環境を用意しておくと非常に助かる。
ここでは、VPN環境をお手軽に構築する手順を解説する。
共通手順
-
- http://www.plum-systems.co.jp/techinfo/openvpn/21.html からOpenVPN GUI for Windows 日本語版 をDLしよう
- サーバ、クライアント両方のマシンでインストールする
サーバ側の手順
-
- コマンドプロンプトを起動
- >cd "C:\Program Files\OpenVPN\easy-rsa"
- vars.bat をエディタで開き適当に編集
set KEY_COUNTRY=JP # 国名
set KEY_PROVINCE=CA # 県名
set KEY_CITY=SanFrancisco # 市町村名
set KEY_ORG=FortFunston # 団体名
set KEY_EMAIL=mail@host.domain # メールアドレス - >vars.bat
- >clean-all.bat
- >build-ca.bat
- >build-key-server.bat server
- これも色々聞かれるが、「Common Name」だけ何か入力しよう(例えば、"server")。それ以外はリターン押せばさっき設定したものをデフォルト値として使用される。
- extra attributesの「A challenge password」も「An optional company name」も空リターンでOK。
- また、「Sign the certificate?」「1 out of 1 certificate requests certified, commit?」は両方とも y とする。
- これにより、サーバの証明書(server.crt)と鍵(server.key)が作成される
- >build-key-pkcs12.bat client
- これも色々聞かれるが、「Common Name」だけ何か入力しよう(例えば、"client")。それ以外はリターン押せばさっき設定したものをデフォルト値として使用される。
- extra attributesの「A challenge password」も「An optional company name」も空リターンでOK。
- また、「Sign the certificate?」「1 out of 1 certificate requests certified, commit?」は両方とも y とする。
- 最後に「Enter Export Password」とパスワードの入力を求められるので、適当に入力する。
- これにより、クライアント証明書(client.crt)と鍵(client.key)が作成される
- >build-dh.bat
少々時間がかかるが、Diffie Hellmanパラメータを作成する。完了すれば、「dh1024.pem」ができる - 以下のファイルを C:\Program Files\OpenVPN\config にコピーする
- ca.crt
- server.crt
- server.key
- dh1024.pem
- C:\Program Files\OpenVPN\config に「server.ovpn」ファイルを作成し以下のように記述する。
# おまじない
tls-server
# 受け付けるポート番号
port 443
proto tcp-server
# 基本的な設定
dev tun
ifconfig 10.8.0.1 10.8.0.2
# 各種証明書
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
# 送信データを圧縮する
comp-lzo
# NAT、動的IPでも接続を維持する
keepalive 10 300
ping-timer-rem
persist-tun
persist-key
# ログの詳細レベルの指定
verb 3 - タスクトレイにあるOpenVPNアイコンを右クリックして「接続」する
問題なければ、接続完了。何かエラーがあればlogフォルダにログがあるので、適切に対処する。
※1 OpenSSLが同梱されていない場合は http://homepage2.nifty.com/protocol/openssl/ からOpenSSLをインストール
※2 失敗して、再度証明書を発行する場合は、「index.txt」から既に発行した行を消しておく
クライアント側の手順
-
- サーバ側作業で作成した以下のファイルを C:\Program Files\OpenVPN\config にコピー
- ca.crt
- client.crt
- client.key
- C:\Program Files\OpenVPN\config に「client.ovpn」ファイルを作成し以下のように記述する。
# おまじない
tls-client
port 443
proto tcp-client
remote サーバのIPアドレス(ここは環境毎に修正する)
dev tun
ifconfig 10.8.0.2 10.8.0.1
# 各種証明書
ca ca.crt
cert client.crt
key client.key
# 送信データを圧縮する
comp-lzo
keepalive 10 300
ping-timer-rem
persist-tun
persist-key - タスクトレイにあるOpenVPNアイコンを右クリックして「接続」する
- サーバ側作業で作成した以下のファイルを C:\Program Files\OpenVPN\config にコピー
問題なければ、接続完了。何かエラーがあればlogフォルダにログがあるので、適切に対処する。
ちゃんと繋がっているかどうか確認作業
-
- ちゃんと両者が接続完了すれば、サーバのIPアドレスは「10.8.0.1」。クライアントは「10.8.0.2」となる
- クライントから ping 10.8.0.1 で通るか確認
- サーバから ping 10.8.0.2 で通るか確認
- OKなら、ポート番号443番越しに、リモートデスクトップなり、ファイル共有なり好きなことができるようになる