OpenVPNの設定

OpenVPNは、SSLVPNを実現するソフトウェアです。

本ページは、多くを下記の情報に頼って書いています。より正確な内容をお求めの場合は、原著のほうをご参照ください。

何ができる?

具体的に、うちが実現している環境は、以下の通りです。

外部PC[仮想IP:10.8.0.6] -----> ルータ -----> 内部サーバ[仮想IP:10.8.0.1]

10.8.0.1 に対しては、LAN 環境にいるのと同様にアクセスができます。具体的には、どのポートにも自由に接続できます。

インストール

まずは、サーバ側に OpenVPN をインストールします。

# apt-get install openvpn

続いてクライアント側にも OpenVPN をインストールします。うちは Windows でしたので、GUI版クライアントをインストールしました(ダウンロード)

証明書や鍵の生成

インストールを終えたら、VPN に必要な証明書や鍵の用意を行います。この作業は、openvpn に添付されているスクリプトを使うと、便利です。"easy-rsa" というディレクトリがあるので、それを "/etc/openvpn" などへコピーしてください。もし、見つからない場合は、locate コマンドなどで探してみてください。

続いて、鍵の生成を行ないます。"easy-rsa" ディレクトリへ移動します。

cd /etc/openvpn/easy-rsa

vars ファイルを開いて、KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL の値を入れてください。いずれの項目も空欄にしないように注意してください。

# . ./vars
NOTE: when you run ./clean-all...

vars を実行して、環境変数の設定を行ないます。"NOTE:" とメッセージを出力しますが、これは正常です。(恥ずかしながら、これがエラーメッセージであると勘違いして、少しハマリました)

# ./clean-all

keys ディレクトリが生成されます。

# ./build-ca

このスクリプトは対話式で、認証局の証明書と鍵を生成します。ほとんどの項目にデフォルト値が入っていますが、CommonName は手動で入れる必要があります。

続いて、サーバの証明書と鍵を生成します。

# ./build-key-server server

基本的に、./build-ca と同じ流れで進みますが、最後に2回質問があるので、そこはきちんと [Y] を入力して、Return してください。何も入力しないで Return すると、作成に失敗します。

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

続いて、クライアントの証明書と鍵を作成します。複数のクライアントが必要な場合は、"client2", "client3" というように、適宜増やしてください。

# ./build-key client1

次に、鍵共有のための DH の設定を行ないます。サーバクライアント間で実際の暗号鍵を受け渡しするさいの、暗号経路を作るさいに利用するものです。

# ./build-dh

少し時間がかかります。うちの環境では、2分程度でした。

以上の処理により、easy-rsa/keys ディレクトリ配下に、必要な鍵と証明書ができています。

ca.crt認証局の証明書
ca.key認証局の鍵
dh.pemDH パラメータ
server.crtサーバ証明書
server.keyサーバ鍵
client.crtクライアント証明書
client.keyクライアント鍵

設定ファイル

サーバの設定

まず、サーバの設定を行ないます。"sample-config-files" ディレクトリを探します。見つからなければ、locate コマンドなどで探してください。

そのなかにある server.conf を、適当な場所に移動してください。

cp server.conf /etc/openvpn/

移動したあとは、編集を行ないます。ca、cert、key、dh を、それぞれ前節で生成したファイルに指定してください。

そして、server 項目で、サーバの VPN 用仮想IPアドレスを指定できますが、実際の LAN で使っているプライベートネットワークは指定してはいけません。ルーティングがおかしくなり、外部から参照がまったくできなくなります。リモートで作業している場合は致命的…。現地で対応しない限り、復旧不可です。

クライアントの設定

続いて、クライアントの設定を行ないます。前節で作成した証明書や鍵を、クライアントPCへコピーしてください。このさい、なるべく安全な経路を使うことが望ましいです。必要なものは、以下の3つです。

次に、設定ファイルを開きます。client.ovpn を "C:\Program Files\openVPN\sample-config" から "C:\Program Files\OpenVPN\config\" へコピーしてください。そして、client.ovpn を編集します。

起動

サーバを起動します。

# openvpn /etc/openvpn/server.conf &

クライアントを起動します。タスクトレイにあるopenvpnのアイコン (パソコンモニタが2台並んだようなアイコン) をダブルクリックしてください。アイコンが緑色になれば接続成功です。黄色のままの場合は、問題があって、うまく接続できていません。

トラブルシューティング

証明書の作成ミス

サーバで以下のようなログで失敗した場合、.crt ファイルがサイズ0 になっていないか確認してください。crt ファイル生成のときに、最後のほうの質問で [y/n] を正しく答えていないと、下記のような失敗が起きます。

Wed Jun  3 21:48:47 2009 OpenVPN 2.0.9 i486-pc-linux-gnu 
  [SSL] [LZO] [EPOLL] built on Jun 11 2008
Wed Jun  3 21:48:47 2009 Diffie-Hellman initialized with 1024 bit key
Wed Jun  3 21:48:47 2009 Cannot load certificate file 
  /etc/openvpn/easy-rsa/keys/server.crt: error:0906D06C:PEM 
  routines:PEM_read_bio:no start line: error:140AD009:SSL 
  routines:SSL_CTX_use_certificate_file:PEM lib
Wed Jun  3 21:48:47 2009 Exiting

名前解決ミス

クライアントで、以下のようなログで失敗した場合、

Tue Jul 13 08:33:43 2010 RESOLVE: Cannot resolve host address: my-server-1:
[NO_DATA] The requested name is valid but does not have an IP address.

ルーティングテーブルなどの設定

外部 PC や内部サーバのルーティングテーブルを設定することで、より自由にアクセスができます。

また、DNS による名前解決を偽装したい場合は、hosts ファイルを使うと便利です。具体的には、以下のように設定します。

sub.omoshiro-joho.com 10.8.0.1

これにより、sub.omoshiro-joho.com へのアクセスは、素のインターネット経由ではなく、SSLVPN 経由になります。sub.omoshiro-joho.com が LAN 側からのアクセスしか許可しない設定になっているときや、内部 DNS でのみ名前解決されている場合に、有用です。

余談ですが、Windows7 で hosts ファイルを編集するには、メモ帳を管理者権限で実行して、ファイルメニューから辿って開くと良いです。


履歴


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-14 (水) 08:01:14