2台のサーバー間でOpenVPNの転送速度が極端に遅くなっています。この質問では、サーバーをサーバーAおよびサーバーBと呼びます。
サーバーAとサーバーBの両方がCentOS 6.6を実行しています。どちらも100Mbit回線のデータセンターにあり、OpenVPN外の2台のサーバー間のデータ転送は約88Mbps近くで実行されます。
ただし、サーバーAとサーバーBの間に確立したOpenVPN接続を介してファイルを転送しようとすると、スループットが6.5 Mbps前後になります。
iperfのテスト結果:
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49184
[ 4] 0.0-10.0 sec 7.38 MBytes 6.19 Mbits/sec
[ 4] 0.0-10.5 sec 7.75 MBytes 6.21 Mbits/sec
[ 5] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49185
[ 5] 0.0-10.0 sec 7.40 MBytes 6.21 Mbits/sec
[ 5] 0.0-10.4 sec 7.75 MBytes 6.26 Mbits/sec
これらのOpenVPN iperfテストは別として、両方のサーバーはゼロ負荷で実質的に完全にアイドル状態です。
サーバーAにはIP 10.0.0.1が割り当てられており、これがOpenVPNサーバーです。サーバーBにはIP 10.0.0.2が割り当てられ、OpenVPNクライアントです。
サーバーAのOpenVPN構成は次のとおりです。
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
サーバーBのOpenVPN構成は次のとおりです。
port 1194
proto tcp-client
dev tun0
remote 204.11.60.69
ifconfig 10.0.0.2 10.0.0.1
secret static.key
comp-lzo
verb 3
私が気づいたこと:
1.最初に考えたのは、サーバーのCPUのボトルネックになっていたことです。OpenVPNはシングルスレッドであり、これらのサーバーはどちらもIntel Xeon L5520プロセッサを実行しますが、これは最速ではありません。ただし、top
iperfテストの1つでコマンドを実行し、1
コアごとのCPU使用率を表示するように押したところ、各コアのCPU負荷が非常に低いことがわかりました。
top - 14:32:51 up 13:56, 2 users, load average: 0.22, 0.08, 0.06
Tasks: 257 total, 1 running, 256 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.4%us, 1.4%sy, 0.0%ni, 94.8%id, 0.3%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 946768k total, 633640k used, 313128k free, 68168k buffers
Swap: 4192188k total, 0k used, 4192188k free, 361572k cached
2. iperfの実行中、OpenVPNトンネル上でPing時間は大幅に増加します。iperfが実行されていない場合、トンネルを介したping時間は常に60ミリ秒(通常)です。しかし、iperfが実行され、大量のトラフィックをプッシュしている場合、ping時間は不安定になります。iperfテストを開始した4番目のpingまで、ping時間はどのように安定しているかを確認できます。
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=60.2 ms
** iperf test begins **
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=146 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=114 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=85.6 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=176 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=204 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=231 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=197 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=233 ms
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=152 ms
64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=216 ms
3.前述のように、OpenVPNトンネルの外側でiperfを実行しましたが、スループットは正常でした(一貫して〜88Mbps)。
私が試したこと:
1.圧縮は物事を汚すのではないかと思ったのでcomp-lzo
、両方の設定から削除してOpenVPNを再起動することで圧縮をオフにしました。改善なし。
2. CPU使用率が低いことが以前にわかっていたとしても、デフォルトの暗号はシステムが追い付かないほど少なすぎるかもしれないと思いました。そこでcipher RC2-40-CBC
、両方の設定(非常に軽量な暗号)に追加し、OpenVPNを再起動しました。改善なし。
3.さまざまなフォーラムで、フラグメント、mssfix、mtu-tunの調整がパフォーマンスにどのように役立つかについて読みました。この記事で説明したように、いくつかのバリエーションを試しましたが、改善はありませんでした。
このようなOpenVPNのパフォーマンスの低下の原因についてのアイデアはありますか?
cipher none
それが助けになるとは思わないが、私は試してみたいと思うかもしれない。