ラズパイVPNサーバの総仕上げとしてAccelTCPでレイテンシーを最小化してみた。 AccelTCPは”プロキシサーバ間のコネクションプーリングにより、TCPコネクションの確立時に発生する3Wayハンドシェイクのオーバーヘッドを削減し、比較的小さなデータのやりとりを行う通信の待ち時間を大幅に短縮できます。”というものです。これで日独間のping 300ms分の遅延を減らすのが目的です。
web browser --> acceltcp:8080 --> (SoftEther VPNでL2TP/IPsec) --> acceltcp:10381 --> squid:3128 --> web site というフローになる。
まず、ラズパイにはsquidをhttp proxyとしてインストールしてポート3128で待機しておく。 キャッシュはいらないので/etc/squid/squid.confで
cache_dir null /tmp
としてディスクキャッシュは無効にしておく。 AccelTCPのbuildは簡単です。
sudo apt-get install libev-dev
git clone git://github.com/KLab/AccelTCP.git
cd AccelTCP
cmake .
make
sudo cp acceltcp /usr/local/bin
まずラズパイにAccelTCPサーバを立てる。AccelTCPは10381で待機します。-4でipv4にするか明示的に自アドレスを書かないとaddress already in useと言われました。バグっぽいです。
acceltcp -q -- --server -4 10381:127.0.0.1:3128
または
acceltcp -q -- --server 127.0.0.1:10381:127.0.0.1:3128
クライアントは自分のmacで下のようにして100本ほどプールを作ります。ラズパイのipは192.168.0.100とします。
acceltcp -q -- -4 --connection-num=100 8080:192.168.0.100:10381
あとはwebブラウザのプロキシを127.0.0.1:8080にすると、日本のサイトへのアクセスは爆速になります。ベンチマークだと1.5倍から2倍弱ですが、体感はもっと速い感じです。webのように小さなファイルをたくさんダウンロードすると効果はてきめんです。http/2が広まるまでは役に立ちそうです。 (googleのdata compression proxyもかなり速い)
ここまでくるとSoftEtherは拠点間接続にして常時つないでおき、AccelTCPもつなぎっぱなしにしておいたほうが使い勝手が良さそうですね。プロキシだけ切り替えればwebへの経路が変わるというのがよさそう。