小型/堅牢/メンテナンスフリー OpenBlockS 600の限界に挑戦

第5回UT-VPN/OpenVPNで作るL2-VPNルータ(前編)

はじめに

OpenBlockS 600は堅牢性やLinux採用によるカスタマイズ性の高さなどの特徴から、ネットワークのインフラ周辺でとくに多く利用されています。その用途は幅広く、DHCPやDNSなどのネットワークの中核となるサービスやサービスインフラの死活監視、ネットワーク障害時のデバッグなどさまざまなかたちで活用していただいています。

今回はさまざまな用途の中でも事例の多い、VPNルータとしての構築をご紹介します。VPNルータには市販製品が多数存在しますが、クラウドのIaaSサービスと顧客をシームレスにつなぐためのレイヤ2接続が可能なVPNルータとして、多数の利用実績があります。本稿では、オープンソースのレイヤ2接続対応VPNソフトウェアとしてOpenVPNUT-VPNを取り上げ、前編ではOpenVPNの導入と設定までを実施し、次回の後編でUT-VPNの導入と設定、そしてそれぞれの性能測定を行います。

OpenVPN

OpenVPNはオープンソースのVPNソフトウェアとしては、実績が豊富で安定したソフトウェアです。通信プロトコルとして、速度重視の場合はUDP、インフラの品質が悪い場合やHTTP Proxyを経由したい場合はTCPといったように使い分けができます。またIPルーティング方式およびブリッジ方式のいずれの方法にも対応するなど、柔軟なネットワークを構築することができます。

UT-VPN

UT-VPNは公開が2010年6月からと日が浅いですが、その実態はソフトイーサ⁠株⁠が開発/販売している「PacketiX VPN」をオープンソース化したものであり、商用ソフトウェア相当の高い品質を持ったソフトウェアと言えます。なおPacketiX VPNの完全なオープンソースというわけではなく、法人向けのいくつかの機能が除去されています。

機能としてはOpenVPNで可能な内容がほぼ網羅され、さらにIPv6への完全対応や充実したフィルタリング機能など、VPNソフトウェアとして本格的な機能が多数搭載されています。また設定用のGUIが提供されており、初めてのVPN導入においても非常に使いやすいものになっています。

OpenVPNの導入と設定

今回の記事では、2つの拠点間をブリッジ方式で構築してみたいと思います図1⁠。

図1 ネットワーク構成図
図1 ネットワーク構成図

ブリッジ方式では、別々の拠点にあるネットワークを同一のEthernetセグメントとして接続することから、L2(レイヤ2)-VPNとも呼ばれる方式です。同一のEthernetセグメント、つまり同一のスイッチングハブに接続している状態と同じになりますので、ブロードキャストパケットや非IPのパケットであっても通信を行うことができます。

また、このような接続のもうひとつのメリットとしては、ルーティング設定を行わなくても通信が可能になるため、拠点間のVPN化が容易に実現できることが挙げられます。以上のような特徴から、冒頭で申し上げたようなIaaSサービスと顧客を結ぶ手段としても最適と言えます。

OpenBlockSの基本設定

OpenBlockS 600にルータとしての機能も担わせるため、PPPoEの設定を行います。また直接インターネットに接続する装置になるため、ファイアウォール設定もあわせて実施します。

ネットワーク

Webインターフェースを開き、ネットワークの基本設定図2を表示してください。図1のネットワーク構成図に従い、Ether-0をPPPoEクライアントとして設定します。Ether-1については、OpenVPNに関する設定の中で行うため、ここでは未使用に設定しておきます。

図2 PPPoEの設定
図2 PPPoEの設定

ファイアウォール

同じくWebインターフェースでファイアウォールの基本設定図3を表示してください。対象のネットワークI/Fに⁠PPPoE⁠を選択し、その他UDPPortの許可とその他TCP Portの許可に、OpenVPNの通信ポートである⁠1194⁠を指定します。

UDPとTCPの両方を設定しますが、実際に利用するのは一方です。ここではTCPとUDPの性能差測定のため、あらかじめ両方を登録しておきます。 PPPoE、ファイアウォールの設定が完了したら、画面の指示に従って再起動を行い、設定どおりに動作していることを確認してください。

図3 ファイアウォールの設定
図3 ファイアウォールの設定

OpenVPNの導入

導入はWebインターフェース上のアプリケーションマネージャ図4を利用します。オープンソースバイナリのリストは多数表示されますので、ファイル名のフィールドに⁠openvpn⁠と入力すれば絞り込みが行えます。

図4 アプリケーションマネージャ
図4 アプリケーションマネージャ

リストの絞り込みによりopenvpnが表示されますので、インストールボタンの押下で導入を行ってください。図5の画面に遷移しますので、ここで実行ボタンを押下することで、パッケージのダウンロードとインストールが行われます。

図5 openvpnのインストール
図5 openvpnのインストール

OpenVPNの設定

OpenVPNは一方がサーバとして接続を待ち受け、他方がクライアントとして接続を行う構成となります。今回の例では図1の拠点A側をサーバとし、拠点B側をクライアントとして設定を行います。

証明書の生成

OpenVPNによる接続には、SSL証明書が必要となります。ここではOpenVPNに付属するプライベートCA認証局の構築ツールを利用し、必要な証明書や秘密鍵等を作成します。必要な操作は次の4ステップです。

実行例はそれぞれのリストを参照してください。なお実行は、すべてサーバで実行し、クライアントでは必要なファイルをサーバからコピーして利用します。次の各ステップの実行により、証明書、秘密鍵などが、 /usr/pkg/etc/openvpn/easy-rsa/keys以下に保存されます。

  1. プライベートCAの構築図6、リスト1
  2. サーバ証明書、秘密鍵の生成図7
  3. クライアント証明書、秘密鍵の生成図8
  4. DH(Diffie-Hellman)パラメータの生成図9
リスト1 プライベートCAの構築の設定
export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Chiyoda-ku"
export KEY_ORG="Plat'Home CO.,LTD."
export KEY_EMAIL="[email protected]"
図6 プライベートCAの構築
# cd /usr/pkg/etc/openvpn
# cp -r /usr/pkg/share/openvpn/easy-rsa/ .
# cd easy-rsa/
# vi vars   ←変更内容はリスト1を参照
# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/pkg/etc/openvpn/easy-rsa/keys
# ./clean-all
# ./build-ca
Generating a 1024 bit RSA private key
..............++++++
...........................................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]: 
Locality Name (eg, city) [Chiyoda-ku]: 
Organization Name (eg, company) [Plat'Home CO.,LTD.]: 
Organizational Unit Name (eg, section) []: 
Common Name (eg, your name or your server's hostname) [Plat'Home CO.,LTD. CA]: 
Email Address [[email protected]]: 
図7 サーバ証明書、秘密鍵の生成
# cd /usr/pkg/etc/openvpn/easy-rsa
# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/pkg/etc/openvpn/easy-rsa/keys
# ./build-key-server server
…省略…
Country Name (2 letter code) [JP]: 
State or Province Name (full name) [Tokyo]: 
Locality Name (eg, city) [Chiyoda-ku]: 
Organization Name (eg, company) [Plat'Home CO.,LTD.]: 
Organizational Unit Name (eg, section) []: 
Common Name (eg, your name or your server's hostname) [server]: 
Email Address [[email protected]]: 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 
An optional company name []: 
Using configuration from /usr/pkg/etc/openvpn/easy-rsa/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:'Chiyoda-ku'
organizationName :PRINTABLE:'Plat'Home CO.,LTD.'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'[email protected]'
Certificate is to be certified until Sep 27 06:05:44 2020 GMT (3650 days)
Sign the certificate? [y/n]:y  ←yを入力
1 out of 1 certificate requests certified, commit? [y/n]y  ←yを入力
Write out database with 1 new entries
Data Base Updated
図8 クライアント証明書、秘密鍵の生成
# cd /usr/pkg/etc/openvpn/easy-rsa
# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/pkg/etc/openvpn/easy-rsa/keys
# ./build-key client
…以下省略。操作は図7と同様です…
図9 DH(Diffie-Hellman)パラメータの生成
# cd /usr/pkg/etc/openvpn/easy-rsa
# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/pkg/etc/openvpn/easy-rsa/keys
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.....................................................+.......................................+........+.............+....................................................................................................................................................+....................................................................+.............++*++*++*

サーバの設定

設定例はリスト2を参照してください。先の手順で作成したca.crt、server.crt、server.key、dh1024.pemは、設定ファイルと同じディレクトリにコピーしておきます。その他設定項目については、 /usr/pkg/share/examples/openvpn/config/server.confをご覧ください。暗号化強度は、比較対象とするUT-VPNの最大強度に合わせて、AES-256-CBCを指定しています。

リスト2 サーバの設定(/usr/pkg/etc/openvpn/server.conf)
port 1194
proto udp
dev tap0
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server-bridge
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

クライアントの設定

設定例はリスト3を参照してください。先の手順で作成したca.crt、client.crt、client.keyは、設定ファイルと同じディレクトリにコピーしておきます。その他設定項目については、/usr/pkg/share/examples/openvpn/config/client.confをご覧ください。

リスト3 クライアントの設定(/usr/pkg/etc/openvpn/client.conf)
client
dev tap0
proto udp
remote vpnserver.example.org 1194
サーバのホスト名またはIPを指定します ↑
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
cipher AES-256-CBC
verb 3

自動実行の設定

OpenBlockS 600の起動時に自動的にopenvpnを実行するために、/etc/rc.confリスト4に追記を行います。設定はサーバ/クライアントそれぞれに行います。

リスト4 自動実行の設定(/etc/rc.conf)
openvpn=YES

VPNとLANを結ぶ

これまでの設定でVPNのトンネルはできあがりますが、このままではVPNの中だけで閉じられており、VPN-LAN間の通信が行えません。そこで最後の設定として、VPNとLANを結ぶためのブリッジの設定をサーバとクライアントのそれぞれに行います。

OpenVPNでは、ブリッジの設定を行うタイミングが重要になるため、通常のネットワーク設定の後、openvpnが起動する前に、ブリッジ設定が行われている必要があります。サンプルスクリプト /usr/pkg/share/examples/openvpn/scripts/bridge-startを /usr/pkg/etc/openvpn以下にコピーし、ブリッジするインターフェースに割り当てるIPをリスト5のとおり設定します。

リスト5 VPN-LANのブリッジ設定(/usr/pkg/etc/openvpn/bridge-start)
eth="eth1"
eth_ip="192.168.0.1"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.0.255"

今回は2つの拠点を同一のEthernetセグメントとして接続しますので、両拠点LAN側のIPアドレスは重複してはなりません。そのため、OpenBlockS 600に割り当てるホストアドレスも、サーバ側を192.168.0.1、クライアント側を192.168.0.2に設定します。なおスクリプト中で利用しているopenvpnコマンドへのパスを通すため、スクリプトの冒頭にリスト6のPATH設定を追記します。またこのスクリプトを起動時に実行するために、/etc/netstart.localにリスト7の内容を追記してください。

リスト6 bridge-start冒頭への追記
PATH=$PATH:/usr/pkg/sbin:/usr/pkg/bin
リスト7 ブリッジ設定の自動実行(/etc/netstart.local)
/bin/sh /usr/pkg/etc/openvpn/bridge-start

以上ですべての設定が完了しました。再起動後はネットワーク設定→ファイアウォール設定→ブリッジ設定→OpenVPN起動の順に処理され、これまでの設定に基づきVPNが確立されます。

まとめ

今回はOpenVPNの設定を完了させるところまでご紹介しました。設定手順はそれなりに量がありますが、内容はさほど難しいこともなく、簡単に設定を行うことができます。次回はUT-VPNの導入と設定をご紹介し、最後にそれぞれについて性能測定を行います。

おすすめ記事

記事・ニュース一覧