Vyatta を導入した話

L2 スイッチを買った

今まで使っていた L2 スイッチのポートをすべて使い切り、サーバーをこれ以上増やすことも、既存のサーバーに NIC をさすこともできなくなってしまったので、前から欲しいと思っていた NETGEAR の GS116v2 を買いました。 これで16ポート増やすことが出来ました。

NETGEAR 【ライフタイム保証(無償永久保証)】ギガ16ポート アンマネージスイッチ GS116-200JPS

ネットワークの構成を変えたい

これまで、サーバーと普段使う PC などの非サーバーマシンが同じネットワークにいました。 また、 WiFi ルーターもルーティング機能を切り、同じネットワークに居ました。

さすがにこれではセキュリティが気になる上、ファイアウォールの設定もサーバーや各マシンで個別に行っていたため面倒でした。 そこで、サーバーのネットワークと PC のネットワーク、そして WiFi のネットワークを分離して、ファイアウォールもそれぞれのルーターでまとめて行おうと前から思っていました。

L2 スイッチを導入したことをきっかけに、ここにも手を付けようと思いました。

Vyatta

サーバーのネットワークは ONU に繋がるルーター、 WiFi のネットワークは WiFi ルーターのルーティング機能を使えばよいですが、クライアント用のルーターはどうしようかと考えた時に、以前さくらの VPS に入れようとして失敗して以来触ってこなかった Vyatta を使う事が頭をよぎったので、これを使うことにしました。

早速、最新の Vyatta Core 6.5 を、 KVM を使った VPS である、よしだ VPS の対応 OS に加え、よしだ VPS で使えるようにしました。 よしだ VPS とは、 KVM の上で動くハンドメイド VPS です。 よしだ VPS について詳しくは、ぼくがよしだ VPS のアーキテクチャについて発表した PyCon JP 2012 の動画をご覧ください。

余談ですが、ネットワークの分離を VLAN で L2 的にネットワークを切って、 L3 スイッチを使ってルーティングするとステキだと思ったのですが、 VLAN は甘えですし、 L3 スイッチは家庭ネットワークに導入するには価格的にハードルが高すぎます。。。

できた!

あいだの手順をぶっ飛ばしていきなり完成です。 3分クッキングよりお手軽です。

network-graph ※このネットワーク図は、 @tk0miya さんが作っている nwdiag を使って作りました。

このようなネットワークを作りました。 ap, vyatta は NAT を切って、ローカルルータとして動かしています。

スループット

ルーターを変えて気になることは、どれほどスループットがでるか、ということです。 Vyatta はソフトウェアルーター故、スループットがそれほど伸びないのでは無いか、という不安があります。 そこで、 ipref を使ってスループットの計測を行いました。

計測は kyoko と imac 間で、 Vyatta を挟まずにL2 で繋がっている状態と、 Vyatta を挟んだ(上のネットワーク図)場合の2つの場合で続けて7回行い、最大値と最小値の2回分を除いた値の相加平均を取りました。 有効桁数は3桁です。 以下の表には、この計測方法による結果と、参考までに最大値と最小値を掲載しました。

種類 Vyatta 不使用 Vyatta 使用
測定結果 940Mbps 935Mbps
最大値 941Mbps 938Mbps
最小値 939Mbps 901Mbps

Vyatta 不使用時の値については値にばらつきが無かったので、 Vyatta のホストマシンの NIC や L2 スイッチの物理的な性能限界な気がします。

Vyatta 使用時は、不使用時に比べて 5Mbps 程度スループットが落ちています。 これが仮想化やソフトウェア処理によるオーバーヘッドなのかなぁとおもいます。 物理マシンに Vyatta を入れるともう少しスループットが伸びるかもしれません。

余談ですが、Vyatta のVNIC のモデルを最初は e1000 に設定した状態でスループットを測定したところ、 420 Mbps 以上スループットが伸びませんでした。 この予想以上に低い測定結果に納得がいかず、まずは仮想マシンの性能不足を疑って、2コアだった vcpu を4コアにして、メモリも 1GiB から 2GiB にしてみたのですが、結果は変わりませんでした。 そもそも Vyatta 上で top を見ていても、 CPU 使用率は5%にも満たず、メモリはスッカスカでした。 そこで、 VNIC を virtio に設定して測定しなおしたところ上記のような結果がでました。 どうもこの 420Mbps という値は、 e1000 の限界値らしいです。

個人的には、この結果にはとても満足しています。 1000BASE-T のネットワークで、 1Gbps に近い値がでている事、ハードウェアの物理的限界値らしき値より 5Mbps 程度しか性能劣化が無いことに幸せ感があります。