4. OpenVPNサーバの構築 (Linux端末側)
4-1.必要なファイル
それでは、実際にOpenVPNサーバの構築作業を行います。
まずは、以下のコマンドを実行してopenvpn-2.0.5.tar.gzとlzo-1.08.tar.gzをダウンロードします。
# cd /usr/local/src
# wget http://openvpn.net/release/openvpn-2.0.5.tar.gz
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
4-2.インストール
ダウンロードしたファイルを解凍し、以下の手順でOpenVPNのインストールを行ってください。なお、OpenVPNをインストールするには予めLzoがインストールされている必要があるので、先にlzo-1.08.tar.gzのインストールを行ってください。
# tar zxvf lzo-1.08.tar.gz
# cd lzo-1.08
# ./configure
# make
# make install
# tar zxvf openvpn-2.0.5.tar.gz
# cd openvpn-2.0.5
# ./configure
# make
# make install
OpenVPNのインストールが完了しても設定ファイルや各種スクリプト等はインストールされませんので手動で作成する必要があります。今回は OpenVPNのメインディレクトリとして/etc/openvpnディレクトリを作成し、その配下に必要なファイルを設置します。
# mkdir /etc/openvpn/
必要な各種ファイルに関しては、ソースファイルを解凍してできあがるディレクトリ配下にサンプルファイルがありますので、それらをコピーして使用します。
# cp sample-scripts/openvpn.init /etc/openvpn
# chmod 755 /etc/openvpn/openvpn.init ←OpenVPN起動スクリプト
# cp /usr/local/src/openvpn-2.0.5/sample-scripts/bridge-start /etc/openvpn
# chmod 755 /etc/openvpn/bridge-start ←ブリッジ機能有効化スクリプト
# cp /usr/local/src/openvpn-2.0.5/sample-scripts/bridge-stop /etc/openvpn
# chmod 755 /etc/openvpn/bridge-stop ←ブリッジ機能無効化スクリプト
4-3.OpenVPNサーバの設定 (server.confの設定)
それでは、OpenVPNサーバのメイン設定ファイルである/etc/openvpn/server.confの作成を行います。今回の想定するネットワーク構成を実現するために設定する内容は以下の通りです。なお、この設定ファイルはOpenVPNをインストールしても存在しませんので新規に作成する必要があります。皆さんが設定する際は、設置するネットワーク環境にあわせてIPアドレス等読み替えて行ってください。
# vi /etc/openvpn/server.conf
# 通信に使用するプロトコル及びポート番号の指定
port 5000
proto udp
# 使用する仮想ネットワークデバイスの指定
dev tap0
# CA証明書、サーバ証明書、サーバ秘密鍵、DH鍵のパス指定
# ※パス指定は、絶対パスまたはserver.confの設置ディレクトリからの相対パスでの指定
ca /etc/openvpn/easy-rsa/keys/ca.crt ←7章で作成
cert /etc/openvpn/easy-rsa/keys/server.crt ←7章で作成
key /etc/openvpn/easy-rsa/keys/server.key ←7章で作成
dh /etc/openvpn/easy-rsa/keys/dh1024.pem ←7章で作成
# OpenVPNサーバをブリッジモードで起動させるための設定
# 書式:server-bridge [OpenVPNサーバのアドレス] [ネットマスク] [クライアントに割り振るアドレス範囲]
server-bridge 192.168.0.4 255.255.255.0 192.168.0.220 192.168.0.230
# クライアントにサーバ側ネットワークへの経路を伝えるための設定
# 書式:push “route [OpenVPNサーバ側のネットワークアドレス] [ネットマスク]”
push “route 192.168.0.0 255.255.255.0″
# クライアント同士の通信を可能にするための設定
client-to-client
# VPN接続間の生存確認のための設定
keepalive 10 120
# パケット転送の際にLZO圧縮を有効にする
comp-lzo
# OpenVPNデーモン起動ユーザ・グループの指定 ※Windowsシステム以外設定可能
user nobody
group nobody
# VPNが落ちた場合の再接続設定
persist-key
persist-tun
# ステータスログのパス指定
status /var/log/openvpn-status.log
# ログのパス指定
log /var/log/openvpn.log
log-append /var/log/openvpn.log
# ログの詳細レベルの指定
verb 3
# OpenVPN管理インターフェイスの起動設定
management localhost 7505
今回はブリッジモードでOpenVPNサーバを動作させるための設定をファイルに直接記述することで行いましたが、この他にもレイヤ3でカプセル化を行いルーティング設定でVPN間の通信を確立するような設定や、静的鍵による簡単な暗号化設定等、様々な設定が可能です。ここでは説明は割愛しますが、ソースファイルの展開先ディレクトリ、ここでは/usr/local/src/openvpn-2.0.5配下のsample-config-files ディレクトリ内にserver.confのサンプルファイルがあります。
この設定ファイルのコメント行に各設定項目に関する説明が記述されていますので、興味のある方は参照してください。
4-4.bridgeの設定
●bridge-utilsのインストール
CentOS4.2でブリッジ機能を使用するには、bridge-utilsとsysfsutilsパッケージがインストールされている必要があります。もし、インストールされていないなら以下の手順でパッケージをダウンロードし、インストールしてください。
# cd /usr/local/src
# wget ftp://ftp.riken.jp/Linux/centos/4.2/os/i386/CentOS/RPMS/bridge-utils-1.0.4-4.i386.rpm
# wget ftp://ftp.riken.jp/Linux/centos/4.2/os/i386/CentOS/RPMS/sysfsutils-1.2.0-1.i386.rpm
# rpm -ihv bridge-utils-1.0.4-4.i386.rpm sysfsutils-1.2.0-1.i386.rpm
●ブリッジ有効化スクリプトの編集
ブリッジを起動させた際、どのネットワークデバイスを使用するか?等の挙動に関する設定は、OpenVPNインストール時に設置したブリッジ有効化スクリプト/etc/openvpn/bridge-startで行います。デフォルトではtap0とeth0をブリッジで使用するように設定されているので、以下の箇所だけを皆さんの環境に合わせて設定すれば結構です。
# vi /etc/openvpn/bridge-start
※以下の箇所を修正する。
(~省略~)
eth=”eth0″
eth_ip=”192.168.0.4″ ←br0に設定するIPアドレス
eth_netmask=”255.255.255.0″ ←br0に設定するネットワークアドレス
eth_broadcast=”192.168.0.255” ←br0に設定するブロードキャストアドレス
(~省略~)
●IPフォワードの設定
パケットが複数のネットワークデバイスを経由する場合は、以下のコマンドを実行してパケットの転送機能を有効にする必要があります。
# echo 1 > /proc/sys/net/ipv4/ip_forward
# vi /etc/sysctl.conf
(~省略~)
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 ←”1″に変更
(~省略~)
4-5.起動スクリプトの作成
ブリッジ・モードでOpenVPNサーバを起動させるには以下の順番で各サービスを起動させる必要があります。
ネットワーク機能 → ブリッジ機能 → OpenVPNサーバ
また、ネットワーク機能を再起動する場合など、一旦ネットワーク機能停止させる際は以下の順番で停止させる必要があります。
OpenVPNサーバ → ブリッジ機能 → ネットワーク機能
今回は、OpenVPNサーバ専用端末としてLinuxを起動させるように/etc/rc.d/init.d/networkを編集し、OpenVPN用サービス制御スクリプトを作成します。
# cp /etc/rc.d/init.d/network /etc/rc.d/init.d/vpn
/etc/rc.d/init.d/vpn の179行目辺りを以下のように編集します。(太文字部分を追記)
# vi /etc/rc.d/init.d/vpn
(~省略~)
touch /var/lock/subsys/network
#ブリッジモードの有効化
/etc/openvpn/bridge-start
#OpenVPNサーバの起動
/etc/openvpn/openvpn.init start
;;
stop)
#OpenVPNサーバの停止
/etc/openvpn/openvpn.init stop
#ブリッジモードの無効化
/etc/openvpn/bridge-stop
# If this is a final shutdown/halt, check for network FS,
# and unmount them even if the user didn’t turn on netfs
(~省略~)
編集が完了したら、各ランレベルにおけるネットワーク起動スクリプトを削除し、VPN起動スクリプトを追加します。
# chkconfig –del /etc/rc.d/init.d/network
# chkconfig –add /etc/rc.d/init.d/vpn
以上で、OpenVPNサーバの各種設定は完了です。あとは、7章で作成するサーバ証明書とサーバ秘密鍵をserver.confで指定したディレクトリに設置するのみになります。

6. OpenVPNクライアントの設定 (Windows端末側)
6-1.必要なファイル
以下のサイトよりWindows用OpenVPN GUI クライアントをダウンロードしてください。
http://openvpn.se/files/install_packages/openvpn-2.0.5-gui-1.0.3-install.exe
6-2.インストール
以下の手順でWindows用OpenVPN GUI クライアントのインストール作業を行ってください。
6-3.client.ovpnの設定
それでは、OpenVPNクライアントのメイン設定ファイルであるclient.ovpnを作成します。デフォルトではインストールフォルダ内の confフォルダ内に作成する必要があります。(今回の場合:C:Program FilesOpenVPNconfig)
今回の構築したOpenVPNサーバへ接続するための設定内容は以下の通りです。
# クライアントであることを指定 ※OpenVPNサーバからパラメータを受け取るために必要
client
# 通信に使用するプロトコル
proto udp
# 使用する仮想ネットワークデバイスの指定 ※OpenVPNサーバと同じにする必要があります。
dev tap0
# 接続するOpenVPNサーバの指定
# 書式:remote [OpenVPNサーバのアドレス] [ポート番号]
# ※今回の場合、ルータのポート転送を利用しているので、ルータのアドレスを設定する必要があります。
remote 5.6.7.8 5000
# CA証明書、サーバ証明書、サーバ秘密鍵のパス指定
# ※パス指定は、絶対パスまたはclient.ovpnの設置フォルダからの相対パスでの指定
ca ca.crt ←7章で作成します。
cert client1.crt ←7章で作成します。
key client1.key ←7章で作成します。
# OpenVPNサーバの名前解決を継続する
resolv-retry infinite
# ローカルポート番号をバインドしない
nobind
# パケット転送の際にLZO圧縮を有効にする
comp-lzo
# VPNが落ちた場合の再接続設定
persist-key
persist-tun
# ログの詳細レベルの指定
verb 3
# OpenVPNサーバからパラメータを受け取るための設定
pull
# OpenVPNサーバからIPアドレスを受け取るための設定
float
「CA証明書、サーバ証明書、サーバ秘密鍵のパス指定」に関しては相対パスで指定しています。また、「pull」「float」を設定することで、OpenVPNサーバからIPアドレスとサーバ側ネットワークへのルーティング設定を受け取るようにしています。
7. OpenSSLによるCA認証局の構築
7-1.CA認証局の構築
今回想定する条件でCentOS release 4.2をインストールするとデフォルトでopensslがインストールされています。今回は、このopensslを使用してCA認証局を構築します。
まず、CA認証局を構築するには認証局のCA証明書及びCA秘密鍵を作成する必要があります。ただし、OpenVPNにはこれら証明書及び秘密鍵を作成するためのツールも付属しているので、ここではこのツールを利用して作成する手順を紹介します。
まず、以下のコマンドを実行して使用するツール群をOpenVPN用ディレクトリにコピーしてください。
# cp -r /usr/local/src/openvpn-2.0.5/easy-rsa /etc/openvpn
次に、移動させた/etc/openvpn/easy-rsaディレクトリ配下にあるvarsファイルを編集します。このvarsファイルは証明書と秘密鍵を作成する際に問われるパラメータのデフォルト値を定義するためのスクリプトで、今後、証明書と秘密鍵を作成する前に実行することで作成時の入力作業を軽減することが可能となります。 viでvarsファイルを開き、最後の方の環境変数に関する項目を皆さんの環境に合わせて編集してください。(太文字部分)
# vi /etc/openvpn/easy-rsa/vars
(~省略~)
export KEY_COUNTRY=JP ←国名
export KEY_PROVINCE=Osaka ←県名
export KEY_CITY=Kyobashi ←市町村名
export KEY_ORG=”itboost” ←団体名
export KEY_EMAIL=”test@mail.itboost.co.jp” ←メールアドレス
編集が完了したら、varsファイルを実行します。そして、同ディレクトリにあるbuild-caを実行してCA証明書およびCA秘密鍵を作成します。
# cd /etc/openvpn/easy-rsa/
# . ./vars
# ./build-ca
build-caを実行すると、内部的にopensslコマンドを実行するかたちになり、以下のような対話モードになります。ただし、先ほどvarsファイルを実行しているので「Common Name」以外はデフォルトのまま「Enterキー」を押すだけで結構です。
# ./build-ca
Generating a 1024 bit RSA private key
…………++++++
………..++++++
writing new private key to ‘ca.key’