はじめに
OpenBlockS 600は堅牢性やLinux採用によるカスタマイズ性の高さなどの特徴から、ネットワークのインフラ周辺でとくに多く利用されています。その用途は幅広く、DHCPやDNSなどのネットワークの中核となるサービスやサービスインフラの死活監視、ネットワーク障害時のデバッグなどさまざまなかたちで活用していただいています。
今回はさまざまな用途の中でも事例の多い、VPNルータとしての構築をご紹介します。VPNルータには市販製品が多数存在しますが、クラウドのIaaSサービスと顧客をシームレスにつなぐためのレイヤ2接続が可能なVPNルータとして、多数の利用実績があります。本稿では、オープンソースのレイヤ2接続対応VPNソフトウェアとして「OpenVPN」と「UT-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)。
ブリッジ方式では、別々の拠点にあるネットワークを同一のEthernetセグメントとして接続することから、L2(レイヤ2)-VPNとも呼ばれる方式です。同一のEthernetセグメント、つまり同一のスイッチングハブに接続している状態と同じになりますので、ブロードキャストパケットや非IPのパケットであっても通信を行うことができます。
また、このような接続のもうひとつのメリットとしては、ルーティング設定を行わなくても通信が可能になるため、拠点間のVPN化が容易に実現できることが挙げられます。以上のような特徴から、冒頭で申し上げたようなIaaSサービスと顧客を結ぶ手段としても最適と言えます。
OpenBlockSの基本設定
OpenBlockS 600にルータとしての機能も担わせるため、PPPoEの設定を行います。また直接インターネットに接続する装置になるため、ファイアウォール設定もあわせて実施します。
ネットワーク
Webインターフェースを開き、ネットワークの基本設定(図2)を表示してください。図1のネットワーク構成図に従い、Ether-0をPPPoEクライアントとして設定します。Ether-1については、OpenVPNに関する設定の中で行うため、ここでは未使用に設定しておきます。
ファイアウォール
同じくWebインターフェースでファイアウォールの基本設定(図3)を表示してください。対象のネットワークI/Fに“PPPoE”を選択し、その他UDPPortの許可とその他TCP Portの許可に、OpenVPNの通信ポートである“1194”を指定します。
UDPとTCPの両方を設定しますが、実際に利用するのは一方です。ここではTCPとUDPの性能差測定のため、あらかじめ両方を登録しておきます。 PPPoE、ファイアウォールの設定が完了したら、画面の指示に従って再起動を行い、設定どおりに動作していることを確認してください。
OpenVPNの導入
導入はWebインターフェース上のアプリケーションマネージャ(図4)を利用します。オープンソースバイナリのリストは多数表示されますので、ファイル名のフィールドに“openvpn”と入力すれば絞り込みが行えます。
リストの絞り込みによりopenvpnが表示されますので、インストールボタンの押下で導入を行ってください。図5の画面に遷移しますので、ここで実行ボタンを押下することで、パッケージのダウンロードとインストールが行われます。
OpenVPNの設定
OpenVPNは一方がサーバとして接続を待ち受け、他方がクライアントとして接続を行う構成となります。今回の例では図1の拠点A側をサーバとし、拠点B側をクライアントとして設定を行います。
証明書の生成
OpenVPNによる接続には、SSL証明書が必要となります。ここではOpenVPNに付属するプライベートCA認証局の構築ツールを利用し、必要な証明書や秘密鍵等を作成します。必要な操作は次の4ステップです。
実行例はそれぞれのリストを参照してください。なお実行は、すべてサーバで実行し、クライアントでは必要なファイルをサーバからコピーして利用します。次の各ステップの実行により、証明書、秘密鍵などが、 /usr/pkg/etc/openvpn/easy-rsa/keys以下に保存されます。
- プライベートCAの構築(図6、リスト1)
- サーバ証明書、秘密鍵の生成(図7)
- クライアント証明書、秘密鍵の生成(図8)
- DH(Diffie-Hellman)パラメータの生成(図9)
サーバの設定
設定例はリスト2を参照してください。先の手順で作成したca.crt、server.crt、server.key、dh1024.pemは、設定ファイルと同じディレクトリにコピーしておきます。その他設定項目については、 /usr/pkg/share/examples/openvpn/config/server.confをご覧ください。暗号化強度は、比較対象とするUT-VPNの最大強度に合わせて、AES-256-CBCを指定しています。
クライアントの設定
設定例はリスト3を参照してください。先の手順で作成したca.crt、client.crt、client.keyは、設定ファイルと同じディレクトリにコピーしておきます。その他設定項目については、/usr/pkg/share/examples/openvpn/config/client.confをご覧ください。
自動実行の設定
OpenBlockS 600の起動時に自動的にopenvpnを実行するために、/etc/rc.conf(リスト4)に追記を行います。設定はサーバ/クライアントそれぞれに行います。
VPNとLANを結ぶ
これまでの設定でVPNのトンネルはできあがりますが、このままではVPNの中だけで閉じられており、VPN-LAN間の通信が行えません。そこで最後の設定として、VPNとLANを結ぶためのブリッジの設定をサーバとクライアントのそれぞれに行います。
OpenVPNでは、ブリッジの設定を行うタイミングが重要になるため、通常のネットワーク設定の後、openvpnが起動する前に、ブリッジ設定が行われている必要があります。サンプルスクリプト /usr/pkg/share/examples/openvpn/scripts/bridge-startを /usr/pkg/etc/openvpn以下にコピーし、ブリッジするインターフェースに割り当てるIPをリスト5のとおり設定します。
今回は2つの拠点を同一のEthernetセグメントとして接続しますので、両拠点LAN側のIPアドレスは重複してはなりません。そのため、OpenBlockS 600に割り当てるホストアドレスも、サーバ側を192.168.0.1、クライアント側を192.168.0.2に設定します。なおスクリプト中で利用しているopenvpnコマンドへのパスを通すため、スクリプトの冒頭にリスト6のPATH設定を追記します。またこのスクリプトを起動時に実行するために、/etc/netstart.localにリスト7の内容を追記してください。
以上ですべての設定が完了しました。再起動後はネットワーク設定→ファイアウォール設定→ブリッジ設定→OpenVPN起動の順に処理され、これまでの設定に基づきVPNが確立されます。
まとめ
今回はOpenVPNの設定を完了させるところまでご紹介しました。設定手順はそれなりに量がありますが、内容はさほど難しいこともなく、簡単に設定を行うことができます。次回はUT-VPNの導入と設定をご紹介し、最後にそれぞれについて性能測定を行います。