OpenVPNで手軽にVPNを構築する

私は出張先でもリモートデスクトップで自宅のマシンに接続して、自宅と全く同じ環境で作業できるようにしている。ノートパソコンに開発環境やら、メールやら残しておくと、万一ノートパソコンを紛失したり盗難にあった場合、かなりダメージがでかいので、リスク管理という意味でも、このリモートデスクトップ環境は有意義だ。

しかしたまに困るのが、ホテルなどのネットワークを利用した場合、主要なポート(80とか25とか)以外通信できないことがある。そういう時にVPN環境を用意しておくと非常に助かる。

ここでは、VPN環境をお手軽に構築する手順を解説する。

共通手順

    1. http://www.plum-systems.co.jp/techinfo/openvpn/21.html からOpenVPN GUI for Windows 日本語版 をDLしよう
    2. サーバ、クライアント両方のマシンでインストールする

サーバ側の手順

    1. コマンドプロンプトを起動
    2. >cd "C:\Program Files\OpenVPN\easy-rsa"
    3. vars.bat をエディタで開き適当に編集
      set KEY_COUNTRY=JP # 国名
      set KEY_PROVINCE=CA # 県名
      set KEY_CITY=SanFrancisco # 市町村名
      set KEY_ORG=FortFunston # 団体名
      set KEY_EMAIL=mail@host.domain # メールアドレス
    4. >vars.bat
    5. >clean-all.bat
    6. >build-ca.bat
      • 何か色々聞かれるが、「Common Name」だけ何か入力しよう(例えば、"OpenVPN-CA")。それ以外はリターン押せばさっき設定したものをデフォルト値として使用される。
      • これにより、認証局の証明書(ca.crt)と鍵(ca.key)が作成される
    7. >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)が作成される
    8. >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)が作成される
    9. >build-dh.bat
      少々時間がかかるが、Diffie Hellmanパラメータを作成する。完了すれば、「dh1024.pem」ができる
    10. 以下のファイルを C:\Program Files\OpenVPN\config にコピーする
      • ca.crt
      • server.crt
      • server.key
      • dh1024.pem
    11. 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
    12. タスクトレイにあるOpenVPNアイコンを右クリックして「接続」する

問題なければ、接続完了。何かエラーがあればlogフォルダにログがあるので、適切に対処する。

※1 OpenSSLが同梱されていない場合は http://homepage2.nifty.com/protocol/openssl/ からOpenSSLをインストール
※2 失敗して、再度証明書を発行する場合は、「index.txt」から既に発行した行を消しておく


クライアント側の手順

    1. サーバ側作業で作成した以下のファイルを C:\Program Files\OpenVPN\config にコピー
      • ca.crt
      • client.crt
      • client.key
    2. 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
    3. タスクトレイにあるOpenVPNアイコンを右クリックして「接続」する

問題なければ、接続完了。何かエラーがあればlogフォルダにログがあるので、適切に対処する。

ちゃんと繋がっているかどうか確認作業

    1. ちゃんと両者が接続完了すれば、サーバのIPアドレスは「10.8.0.1」。クライアントは「10.8.0.2」となる
    2. クライントから ping 10.8.0.1 で通るか確認
    3. サーバから ping 10.8.0.2 で通るか確認
    4. OKなら、ポート番号443番越しに、リモートデスクトップなり、ファイル共有なり好きなことができるようになる

やっておくと便利な設定

    1. サーバはVPNサービスを常時稼動するのなら、サービスとして起動するとよい。既にインストーラでサービス一覧には登録されているので、サービスのコントロールパネルからスタートアップの種類を「自動」にすればOK。
    2. クライアントはノートパソコンを想定しているが、万一ノートパソコンを紛失した場合に備えて接続の際にパスワードを設けるとよい。タスクトレイのアイコンを右クリックして「パスワード変更」で行える。

※参考URL http://www.plum-systems.co.jp/techinfo/openvpn/18.html