概要

VPNクライアント/サーバを構成する方法は以下の2種類。
方法 説明
静的鍵(static key) 秘密鍵を用いる方法。クライアント/サーバは1:1のみ
X.509 PKI 証明書と秘密鍵を使った公開鍵基盤を用いる方法

OpenVPNサーバは、Listenポートとしてudp:1194(default)を利用する。

動作環境

OpenVPNを利用するのに必要なソフトウェアは以下の3つ。
  1. OpenSSL
  2. LZO圧縮
  3. TUN/TAPデバイス(Linuxカーネルの機能)


TUN/TAPデバイスについて

以下のモジュールをカーネル構築時に有効とする。
  • Network device support
    • ARCnet devices
      • Universal TUN/TAP device driver support

環境構築

静的鍵(static key)

環境構築の大まかな手順は以下の通り。
  1. 鍵の生成
  2. 設定ファイルの作成

設定ファイルの拡張子はUnixとWindowsで異なる。
  • Windowsでの設定ファイル (server.ovpn, client.ovpn)
  • Unixでの設定ファイル (server.conf, client.conf)

以下の環境を構築する。
PC VPN上IPアドレス IPアドレス
OpenVPNサーバ 10.8.0.1 192.168.0.1
OpenVPNクライアント 10.8.0.2 192.168.0.2

鍵の生成(Windows)

スタートメニューから"Generate a static OpenVPN key"を実行するとconfigフォルダにkey.txtが生成される。

鍵の生成(Unix)

以下のコマンドを実行する。
> openvpn --genkey --secret key.txt

設定ファイルの作成

サーバ設定ファイル (server.conf)
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret key.txt

クライアント設定ファイル (client.conf)
remote 192.168.0.1
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret key.txt


X.509 PKI

Unixを前提とする。環境構築の大まかな手順は以下の通り。
  1. 前準備:設定ファイルのひな形を/etc/openvpnへコピー
  2. プライベートCAの構築とCA証明書・CA秘密鍵の作成
  3. サーバ証明書・サーバ秘密鍵の作成
  4. クライアント証明書・クライアント秘密鍵の作成
  5. DHパラメータの作成

この作業で作成するファイルは以下の通り。
ファイル名 説明 配置PC
ca.crt CA証明書 サーバ・クライアント
ca.key CA秘密鍵
server.crt サーバ証明書 サーバ
server.key サーバ秘密鍵 サーバ
client*.crt クライアント証明書 クライアント
client*.key クライアント秘密鍵 クライアント
dh1024.pem DHパラメータファイル サーバ


前準備

以後、OpenVPNサーバ側で作業を行う。
以下のファイル・ディレクトリを/etc/openvpnへコピーする。
  • server.conf (クライアントには不要)
  • client.conf (サーバには不要)
  • easy-rsa/ (クライアントには不要)

設定ファイルのひな形は以下のディレクトリにある。(ディストリビューションによって異なる)
/usr/share/doc/openvpn-2.1.4/sample-config-files
/usr/share/doc/openvpn/examples/sample-config-files (Ubuntuの場合)
など。

easy-rsaは以下のディレクトリ。これもディストリビューションによって異なる。
/usr/share/openvpn/easy-rsa
/usr/share/doc/openvpn/examples/easy-rsa (Ubuntuの場合)
など。

プライベートCAの構築とCA証明書・CA秘密鍵の作成

以下の作業を行う。
  1. /etc/openvpn/easy-rsa/2.0/varsファイルの修正
  2. build-caの実行

/etc/openvpn/easy-rsa/2.0/varsの修正内容
export KEY_COUNTRY="JP"         ←国名
export KEY_PROVINCE="Tokyo"       ←都道府県名
export KEY_CITY="suginami"        ←区市町村名
export KEY_ORG="xxxxxxx"         ←団体名
export KEY_EMAIL="[email protected]"  ←メールアドレス

以下の手順でbuild-caを実行する。
# cd /etc/openvpn/easy-rsa/2.0/
# sudo bash
# source ./vars
# ./clean-all
# ./build-ca
...省略...
Country Name (2 letter code) [JP]:                ←Enterを入力
State or Province Name (full name) [Tokyo]:            ←Enterを入力
Locality Name (eg, city) [suginami]:               ←Enterを入力
Organization Name (eg, company) [xxxxxxx]:            ←Enterを入力
Organizational Unit Name (eg, section) []:            ←Enterを入力
Common Name (eg, your name or your server's hostname) [xxxx CA]: ←Enterを入力
Email Address [[email protected]]:                ←Enterを入力

サーバ証明書・サーバ秘密鍵の作成

以下の作業を行う。
  1. build-key-serverの実行(サーバ証明書とサーバ秘密鍵の作成)

以下の手順でbuild-key-serverを実行する。
# cd /etc/openvpn/easy-rsa/2.0/
# sudo bash
# source ./vars
# ./build-key-server server
...省略...
Country Name (2 letter code) [JP]:                ←Enterを入力
State or Province Name (full name) [Tokyo]:            ←Enterを入力
Locality Name (eg, city) [suginami]:               ←Enterを入力
Organization Name (eg, company) [xxxxxxx]:            ←Enterを入力
Organizational Unit Name (eg, section) []:            ←Enterを入力
Common Name (eg, your name or your server's hostname) [server]:  ←Enterを入力
Email Address [[email protected]]:                ←Enterを入力
...省略...
A challenge password []:                     ←Enterを入力
An optional company name []:                   ←Enterを入力
...省略...
Sign the certificate? [y/n]:y                   ←「y」を入力
...省略...
1 out of 1 certificate requests certified, commit? [y/n]y
                                 ←「y」を入力

クライアント証明書・クライアント秘密鍵の作成

  1. build-key-passの実行

以下の手順でbuild-key-passを実行する。
# cd /etc/openvpn/easy-rsa/2.0/
# sudo bash
# source ./vars
# ./build-key-pass client01     ←クライアントが複数台ならclient02、client03のように変えて台数分実行します
...省略...
Enter PEM pass phrase:        ←パスフレーズを入力
Verifying - Enter PEM pass phrase:  ←パスフレーズを再入力
...省略...
Country Name (2 letter code) [JP]:                ←Enterを入力
State or Province Name (full name) [Tokyo]:            ←Enterを入力
Locality Name (eg, city) [suginami]:               ←Enterを入力
Organization Name (eg, company) [xxxxxxx]:            ←Enterを入力
Organizational Unit Name (eg, section) []:            ←Enterを入力
Common Name (eg, your name or your server's hostname) [client01]: ←Enterを入力
Email Address [[email protected]]:                 ←Enterを入力
...省略...
A challenge password []:                      ←Enterを入力
An optional company name []:                    ←Enterを入力
...省略...
Sign the certificate? [y/n]:y                   ←「y」を入力
...省略...
1 out of 1 certificate requests certified, commit? [y/n]y     ←「y」を入力

DHパラメータの作成

  1. build-dhの実行

以下の手順でbuild-dhを実行する。
# cd /etc/openvpn/easy-rsa/2.0/
# ./build-dh

設定ファイルの作成 (server.conf)

以下の設定内容に注意。
  • ca
  • cert
  • key
  • dh

サンプル

設定ファイルの作成 (client.conf)

以下の設定内容に注意。
  • ca
  • cert
  • key

サンプル

FAQ

クライアント証明書・鍵生成エラー

クライアント生成スクリプトbuild-key-passを実行する際、証明書(certificate)への署名時に以下のエラーが発生することがある。
...
Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Tokyo'
localityName          :PRINTABLE:'ひみつ'
organizationName      :PRINTABLE:'ひみつ'
commonName            :PRINTABLE:'client1'           <-- ここ!
emailAddress          :IA5STRING:'ひみつ'
Certificate is to be certified until Feb 18 04:22:38 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2
...

以前作成したクライアント証明書と鍵のcommonNameは以下のファイル(TXT_DB)に保存されている。作成済みcommonNameのクライアント証明書・鍵を生成するとこのエラーが発生する。このファイルの該当行を削除するとこの問題を回避可能。
  • /etc/openvpn/easy-rsa/2.0/keys/index.txt

クライアント同士を見えるようにする

サーバ設定ファイル(server.conf)で以下のコマンドを追記する。
client-to-client

クライアントの全てのトラフィックをサーバ経由にする

push "redirect-gateway"

複数のVLANを接続する

手順は大きく以下の2つ。
  1. サーバ設定ファイルにクライアントへpushするルートを追加
  2. LinuxのIPフォワード設定

サーバ設定ファイル


LinuxのIPフォワード設定

 echo 1>/proc/sys/net/ipv4/ip_forward


認証

以下の認証方法が利用可能。
  • クライアント証明書 (default)
  • LDAP認証
  • Radius認証
  • sqlite認証


link



タグ:

OpenVPN
最終更新:2012年05月22日 23:48