概要
VPNクライアント/サーバを構成する方法は以下の2種類。
| 方法 |
説明 |
| 静的鍵(static key) |
秘密鍵を用いる方法。クライアント/サーバは1:1のみ |
| X.509 PKI |
証明書と秘密鍵を使った公開鍵基盤を用いる方法 |
OpenVPNサーバは、Listenポートとしてudp:1194(default)を利用する。
動作環境
OpenVPNを利用するのに必要なソフトウェアは以下の3つ。
- OpenSSL
- LZO圧縮
- TUN/TAPデバイス(Linuxカーネルの機能)
TUN/TAPデバイスについて
以下のモジュールをカーネル構築時に有効とする。
- Network device support
- ARCnet devices
- Universal TUN/TAP device driver support
環境構築
静的鍵(static key)
環境構築の大まかな手順は以下の通り。
- 鍵の生成
- 設定ファイルの作成
- 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を前提とする。環境構築の大まかな手順は以下の通り。
- 前準備:設定ファイルのひな形を/etc/openvpnへコピー
- プライベートCAの構築とCA証明書・CA秘密鍵の作成
- サーバ証明書・サーバ秘密鍵の作成
- クライアント証明書・クライアント秘密鍵の作成
- 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秘密鍵の作成
以下の作業を行う。
- /etc/openvpn/easy-rsa/2.0/varsファイルの修正
- 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を入力
サーバ証明書・サーバ秘密鍵の作成
以下の作業を行う。
- 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」を入力
クライアント証明書・クライアント秘密鍵の作成
- 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パラメータの作成
- build-dhの実行
以下の手順でbuild-dhを実行する。
# cd /etc/openvpn/easy-rsa/2.0/
# ./build-dh
設定ファイルの作成 (server.conf)
以下の設定内容に注意。
サンプル
設定ファイルの作成 (client.conf)
以下の設定内容に注意。
サンプル
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つ。
- サーバ設定ファイルにクライアントへpushするルートを追加
- LinuxのIPフォワード設定
サーバ設定ファイル
LinuxのIPフォワード設定
echo 1>/proc/sys/net/ipv4/ip_forward
認証
以下の認証方法が利用可能。
- クライアント証明書 (default)
- LDAP認証
- Radius認証
- sqlite認証
link
最終更新:2012年05月22日 23:48