通信障害時にも安心して使えるネットワークに
震災以降オフィスや自宅の通信手段について改めて考える機会も多いのではないでしょうか。電話は全く繋がらなかったのに、インターネットを利用したTwitterやメールでは連絡が取れたというケースもあるでしょう。例えば会社でインターネットを利用するには、LAN同士の玄関口であるゲートウェイ(いわゆるルータ)が必要ですが、非常時に備えてルータに何か対策できないかな…と思ったことは無いでしょうか?
そこで、ネットワークの玄関口を強くするために、オープンソースのソフトウェアルータ「Vyatta」を使って冗長化ルータを作ってみました。Vyattaは仮想ルータとしてクラウドやデータセンターでも活用されています。今回実験で作った環境は以下の通りです。
冗長化(じょうちょうか)とは?
システムの一部に何らかの障害が発生した場合に備えて、障害発生後でもシステム全体の機能を維持し続けられるように予備装置を平常時からバックアップとして配置し運用しておくこと。(Wikipediaより)
冗長化の一番のメリットは、ネットワークが停止するのを極力抑えられることです。また、データの保全にも大変有効です。
実験環境
ハードウェアはこちら(ファンレス、静音、ゼロスピンドル、省スペース)とこちらのマシンを使いました。
ソフトウェアルータVyattaには、
- カスタマイズ可能である
- ハードウェアを選ばない(全て同じ機能・拡張性で使える)
という長所があります。ファンレスの実験機ではSSDとWise CFカードにRAID1構成でインストールし、問題なく動作しました。
高価なルータ専用機を買う予算はないけれども、ある程度カスタマイズできるルータが欲しい、LAN環境の改善を考えているという方は試しにインストールして使ってみて下さい。
http://www.vyatta.org/downloads
Vyattaの環境設定
【インストール】
まずはVyattaのインストールメディアを作成します。上記URLからisoイメージをダウンロードして下さい。
Vyattaのインストールは至ってシンプルです。
メディアから起動した後「install system」と入力し、いくつかの質問にYes/Noで答えるだけです。インストールに必要なユーザ名とパスワードは両方とも「vyatta」です。インストール後、rebootコマンドを実行して再起動し、インストールメディアを抜きます。次回からはストレージにインストールされたVyattaから起動します。
インストールについては併せてこちらもご覧下さい。
【Vyattaの設定】
インストール直後はNICにIPアドレスが設定されていないので、ここからはコマンドラインで設定していくことになります。Vyattaのコンソールでは、
- 一般モード(プロンプトが「$」の状態、ログイン直後はこの状態)
- 設定モード(プロンプトが「#」の状態、一般モードで「configure」と入力する)
の2種類があります。ルータとしての設定は主に設定モードで行います。また、設定した項目は設定モード時にcommitコマンドで有効化でき、saveコマンドで保存します。
実験環境ではまず初めに、
- 各NICのIPアドレスの設定
- デフォルトゲートウェイの設定
- sshによるログインの許可
- 各ルータを識別するためのホスト名の設定
- DNSサーバの設定
を行なって、他の端末のターミナルからログインできるようにしました。セキュリティ向上のためにsshのポートを変更することもできます。各設定は以下のコマンドを実行します。IPアドレスとネットマスクはお使いのLAN環境に置き換えて下さい。
1. 各NICのIPアドレスの設定
# set interface ethernet ethX address XXX.XXX.XXX.XXX/XX
2. デフォルトゲートウェイの設定
# set system gateway-address XXX.XXX.XXX.XXX
3. sshによるログインの許可
# set service ssh
4. 各ルータを識別するためのホスト名の設定
# set system host-name hogehoge
5. DNSサーバの設定
# set name-server XXX.XXX.XXX.XXX
冗長化の設定
冗長化構成の構築にはVRRPを用います。
VRRP(Virtual Router Redundancy Protocol)とは?
ネットワーク機器の冗長化を実現するために用いられる仕組み。VRRPを使えば、「マスター・ルータ」と呼ばれる実際に稼動しているルーターに障害が発生した場合、直ちに「バックアップ・ルータ」と呼ばれる常時スタンバイさせている予備のルーターへ自動的に切り替えられて処理を引き継げるようになる。(Wikipediaより)
今回の実験では2台のルータでグループを作り、同じ仮想IPアドレスを共有します。具体的には、2つの異なるセグメント間で、ルータ1とルータ2をVRRPで動かし、デフォルトゲートウェイを二重化します。
クライアントのデフォルトゲートウェイを仮想IPアドレスに指定しておくことで、マスター・ルータが何らかの事由でダウンしても、通信を継続することができます。
【VRRPグループの設定】
仮想IPアドレスを各インターフェイスで共有するための設定です。「priority」は1〜255の範囲で設定し、値が一番大きいものがマスター・ルータになります。下記要領で合計2つ以上のグループを作って下さい。(今回は2つで構築)
# set interface ethernet ethX vrrp vrrp-group 101 priority [1〜255]
# set interface ethernet ethX vrrp vrrp-group 101 sync-group [vrrpグループ名]
# set interface ethernet ethX vrrp vrrp-group 101 virtual-address XXX.XXX.XXX.XXX (共有する仮想IPアドレス)
設定した内容は一般モードで以下のコマンドを実行すると確認できます。
$ show vrrp
「MASTER」と「BACKUP」の設定が確認できればOKです。ここまででVyattaの設定は完了です。
pingを投げてみた
実際に192.168.3.0/24のLAN上に接続した端末(192.168.3.10)から、仮想IPにパケットが通るかどうか見てみましょう。
$ ping 192.168.3.1
$ ping 192.168.4.1
どうやらうまくいっているようです。
次に、pingを送信中にNICを抜いて通信が復活するか試してみました。
NICを抜いてから3〜4秒はpingが通らない状態でしたが、そのあとすぐに復活しています!
会社内LANで使う場合など、実験で使用した小型ファンレスのハードウェアならそれほど邪魔にならずに使えそうな気がします。マシンやケーブル障害時の備えとしてソフトウェアルータを冗長化構成で使ってみてはいかがでしょうか。
今回使用したハードウェアとソフトウェア
POWERSTEP FLP 税込 ¥76,650
POWERSTEP mini(サーバ仕様) 税込 ¥99,750
Vyatta Core 6.5 R1 64bit
http://www.vyatta.org/downloads(ダウンロードページへ飛びます)
2/18(月)〜3/1(金)まで店頭デモを行います!
ご興味のある方は是非お気軽にお越しください。
参考引用文献
『オープンソース・ソフトウェアルータ Vyatta 入門』技術評論社
————————————————————————————————————————
【追記1】2013.2.26 ネットワークのスループットを計測してみた
ネットワークのスループットを計測できるツールnetperfをMacにインストールして実効帯域を測定してみました。ルータはAtom搭載機の方を使いました。ソースからnetperfをインストールした後、192.168.3.100端末から192.168.4.100端末へ下記コマンドを実行しています。
netperf -H 192.168.4.100
NATのセッション上限数や、IPsecなど暗号化通信が絡んだ場合の性能が気になるというご意見も頂戴しましたので、引き続き調べてみたいと思います。
【追記2】2013.3.4 IPsec+L2TPでネットワークのスループットを計測してみた
以下の構成で、ファンレス機(AtomCPU搭載)を使用して暗号化+トンネリングでのスループットを計測してみました。やはり実効帯域は落ちますが、数台程度なら問題なく使えるといったところでしょうか。
netperf -H 192.168.4.100
netperf -H 192.168.4.50
拠点間VPNの構築をご希望の際は、お問い合わせ下さい。
solutions@amulet.co.jp