OpenVPN&セキュリティ情報
2012-01-12
OpenVPNのスループットと最適化 - 1
Jan Just Keijser氏の記事「Optimizing performance on gigabit networks」についてはこちらでも概要を取り上げましたが、記事全体にいろいろなヒントが含まれていますので、全文の日本語訳を掲載しています。意訳している部分もありますが、もし誤訳等に気づかれたらお知らせください。
OpenVPNのスループットを100Mbpsネットワークの上限に近づけることは比較的簡単です。この場合、VPNのスループットはネットワークそのもののスループットにかなり近づくことになります。しかし、ギガビット・ネットワークとなるとそう簡単ではありません。このページでは、VPNスループットを1Gbpsネットワークの上限に近づけるためにどんなことができるのかについて取り上げます。最後の部分では10Gbpsネットワークについても簡単に触れています。
ネットワーク構成
今回の測定は、ギガビットのネットワークスイッチに接続された数台のPCを使用して実施しています。サーバー(2台) | OS: CentOS 5.5 64bit CPU: Intel Xeon E5440 (2.83GHz) L2キャッシュ: 6MB |
サーバー | OS: CentOS 5.5 64bit CPU: Intel Xeon E5660 (2.80GHz) L2キャッシュ: 12MB AES-NIサポートあり |
ノートPC | OS: Fedora 14 64bit CPU: Intel i5-560M (2.66GHz) L2キャッシュ: 3MB AES-NIサポートあり |
パケットの流れを理解する
まず、'iperf'サーバーと'iperf'クライアントの間のOpenVPNトンネルで、どのようにパケットが流れるのかを理解しておきましょう。その流れを図にすると次のようになります。VPNサーバーのIPアドレスに'iperf'パケットを送ろうとすると、まずこのパケットはカーネルの'tun0'デバイスに入ります。このパケットはその後ユーザー空間のOpenVPNプロセスに転送され、ヘッダが除去されます。パケットはOpenSSL呼び出しによって暗号化され、署名されます。この際に使用される暗号化と署名のアルゴリズムは'--cipher'と'--auth'オプションによって指定できます。
この処理によって作られるパケットは'--fragment'と'--mssfix'オプションの設定値に基づいて分割(fragment)され、その後、暗号化されたパケットがOpenVPNサーバーに向けてネットワーク上を流れていきます。パケットを受け取ったサーバー側では、この逆の手順で処理を行うことになります。まずパケットが再構築され、復号された後、'tun0'インターフェイスに送られます。
基本構成
CentOS 5の場合、デフォルトのOpenVPNはバージョン2.1.4で、システムのOpenSSLのバージョンは0.9.8e-fipsです。VPNトンネルの両端にあたるOpenVPNサーバー(リスナー)とOpenVPNクライアントの両方で、単純な共有秘密鍵の設定を行います。サーバーは次のように設定します。
openvpn --dev tun --proto udp --port 11000 --secret secret.key --ifconfig 192.168.222.11 192.168.222.10クライアントは次のように設定します。
openvpn --dev tun --proto udp --port 11000 --secret secret.key --ifconfig 192.168.222.10 192.168.222.11 --remote server
この設定でiperfを実行すると、結果は156Mbpsとなりました。
Cipherをaes-256-cbcに設定すると、測定結果は126Mbpsに落ちます。なお、この測定結果は、E5440ベースのサーバーPC間で測定しました。
チューンナップ
次のような設定でチューンナップしてみます。- tunアダプタのMTUサイズ('--tun-mtu')の値を6000バイトまで増やします。これはギガビットLANでのジャンボフレームの考え方と同じです。ネットワーク上のスイッチで設定されているMTUサイズは置き換えられないことに注意してください。
- OpenVPNの分割アルゴリズムを無効にします( '--fragment 0')。
- OpenVPNのTCP最大セグメントサイズ設定を無効にします('--mssfix 0')。
openvpn --dev tun --proto udp --port 11000 --secret secret.key --ifconfig 192.168.222.11 192.168.222.10 --tun-mtu 6000 --fragment 0 --mssfix 0クライアントは次のように設定します。
openvpn --dev tun --proto udp --port 11000 --secret secret.key --ifconfig 192.168.222.10 192.168.222.11 --tun-mtu 6000 --fragment 0 --mssfix 0 --remote server
この設定で実験すると、iperfの結果は307Mbpsになりました。'--tun-mtu'の値をいろいろと変えて実験してみると、次のような結果になりました(速度の単位はすべてMbpsです)。
MTU | Blowfish | AES256 |
---|---|---|
1500 | 158 | 126 |
6000 | 307 | 220 |
9000 | 370 | 249 |
12000 | 416 | 252 |
24000 | 466 | 259 |
36000 | 470 | 244 |
48000 | 510 | 247 |
60000 | 488 | 221 |
デフォルトのBlowfishを使用している場合は、'--tun-mtu'パラメータの最適値は48000バイトという結果になりました。この'--tun-mtu'設定の変更により、VPNのスループットは160Mbpsから510Mbpsに向上しました。
同様に実験すると、AES-256を使用した場合の最適値は24000バイトとなりました。
考察
「tunアダプタのMTUサイズの変更」と「OpenVPN内部の分割ルーチンの無効化」を組み合わせると、OpenVPNのスループットは大幅に向上します。これは、OpenSSLの暗号化/復号処理に大きなパケットでまとめて送ることによるパフォーマンス向上によるものと考えられます。内部の分割ルーチンを使用しない2番目の利点は、この処理をOSやカーネルのデバイスドライバに任せられることです。これらの設定はLANベースのVPNでは使用できますが、さまざまなアクセス環境が考えられる場合(モバイル接続など)には適していません。Profile
- 山崎 太郎 (Taro Yamazaki)
- プラムシステムズ株式会社所属。 主にVPN(OpenVPN)やセキュリティ関連技術、Webアプリケーションを手がけています。
Page Views
Popular Posts
-
「VPNっていろいろあるけど、OpenVPNのメリットって何?」 という疑問は多くの方が持たれますよね。この点は公式サイトなどにもいろいろ書かれているのですが、実際に使ってきたユーザー側としてメリットと思う部分をまとめてみました。
-
現在ダウンロードできるOpenVPNでは、今まで認証局の構築で使用していたeasy-rsaが含まれなくなっています。 OpenVPN.netのダウンロードページ にも Note that easy-rsa is no longer bundled with OpenVPN...
-
Jan Just Keijser氏の記事「 Optimizing performance on gigabit networks 」については こちら でも概要を取り上げましたが、記事全体にいろいろなヒントが含まれていますので、全文の日本語訳を掲載しています。意訳している部分も...
-
OpenVPNでは、接続してきたクライアントのVPNアドレスは動的に割り振られます(その際に割り振られる際のアドレス範囲はOpenVPNサーバー側設定ファイルに基づきます)。特定のVPNクライアントに特定のVPNアドレスを割り振りたい場合、OpenVPNでは以下の2つの方法で設定...
-
では、いよいよiPhone構成ユーティリティでVoDの設定をしてみましょう。あ、 前の記事 での準備はきちんとやっておいてくださいね!
-
前回 は2つのワンタイムパスワードの生成方法について取り上げました。今回はいよいよ実際の生成アルゴリズムを取り上げましょう。TOTPをベースに説明します(ただ、前回も解説したように、基本的なロジックはTOTPとHOTPで同じです)。 参考としてpythonのコードも併記してみま...
-
現時点においてはマニュアルやHowToにも記載されていない(ChangeLogにちょっとだけ出てきます)あまり知られていない機能なのですが、「設定ファイルで鍵ファイルや証明書ファイルのパスを記載する」という通常の方法とは別に、「鍵ファイルや証明書ファイル内のデータをそのまま設定フ...
-
OpenVPNはLinuxをはじめとした幅広いプラットフォームで動作実績があるのが特徴の一つです。 今回は、最近の電子工作ブームでも話題のシングルボードPC 3機種をOpenVPNサーバーとしてセットアップし、OpenVPNのVPNパフォーマンスを測定してみましょう。 ...
-
前回 はワンタイムパスワードの基本的な仕組みについて説明しました。サーバー側とクライアント側で、それぞれ共通のルールに基づいてパスワードを生成させる必要があることを取り上げましたが、今回は OATH が規定しているその生成ルールについて具体的に説明します。 ワンタ...
-
OpenVPNを使用している方ならよくご存知だと思いますが、通常OpenVPNでは証明書認証を使用します。証明書認証はID/パスワード認証に比較すると安全性が高いとされます(もちろん、秘密鍵の管理方法に大きく依存します)が、証明書認証の概念を理解しにくいユーザーが秘密鍵や証明...
© yamata::memo 2013 . Powered by Bootstrap , WebLyb