VRRPでルータを冗長化【万が一の備えは大事】

今の時代、何をするにも故障などの万が一に備えたバックアップが必要です。SVNなどのバージョン管理サーバーが落ちると、仕事にならない、メールサーバーが落ちると「早く復旧させろ!」と、すぐにでも怒号が飛び交う。ITシステムは止められないのです。そんな万が一に備えるのが機器の冗長化です。

「冗長」という言葉を辞書で引くと、「むだが多くて長いこと。」といったようにネガティブな言葉として使われます。一般的には「冗長」はなくしたいものですが、こと、コンピューターの分野では、予備の装置やシステムなどを指す言葉として使われ、例えば、システムダウンやサーバーダウンなどの障害を回避するために用意しなくてはならない存在となります。

エンジニアにとって、どのように冗長なシステムを組むか、その観点での設計も重要になります。ということで、今回からは様々にある冗長化方式について見ていきたいと思います。まずはVRRPです。

VRRPとは

VRRP(Virtual Router Redundancy Protocol:仮想ルータ冗長プロトコル)は、その名前のとおり、ルータの冗長化を行うためのプロトコルです。

VRRPでは仮想ルータという考え方を利用して、複数台のルータを1台のルータとして扱います。

デフォルトゲートウェイとは

PCのネットワーク設定にデフォルトゲートウェイがありますが、通常、デフォルトゲートウェイにはルータのIPアドレスを指定することになります。デフォルトゲートウェイとは、LANなどのネットワークから外部のネットワークに接続する際、通信の出入り口となるものです。異なるネットワーク間をつなぐ機器であり、その役割を担う代表格がルータです。

では、ここでひとつ問題です。下図のようなTCP/IPネットワークがあったとき、PC1に設定するデフォルトゲートウェイのIPアドレスは何になるでしょうか。

答えは「192.168.1.1」です。簡単ですね。

デフォルトゲートウェイの冗長化

デフォルトゲートウェイであるルータが故障したら他のネットワークに接続できなくなってしまいます。そこでルータ故障に備えて、予備のルータを用意しておくことになります。しかし、PCにはデフォルトゲートウェイとして設定できるのはひとつだけです。

ルータAが故障したとき、予備機として用意していたルータBに切り替わってほしいところですが、PCではデフォルトゲートウェイの設定を自動的に変更できないため、手動で切り替えてやる必要があります。こういうのは設置台数に比例して手間が増えるものであり、実用的ではありません。

そのため、PC側のデフォルトゲートウェイ設定を変更することなく、自動的に切り替わってくれる仕組みがほしいです。その仕組みがVRRPです。

VRRPの動作イメージ

VRRPは、仮想ルータを使って冗長化するプロトコルです。複数のルータ間で、仮想のIPアドレス、MACアドレスを共有する仮想ルータを作成し、その仮想ルータをPC側でデフォルトゲートウェイとして設定します。

上図イメージのように、PCは仮想ルータと通信しているつもりでいます。しかし実体は、通常時にはマスタルータであるルータA、ルータAが故障した場合は、バックアップルータであるルータBに自動的に切り替わり、以降はルータBがパケットを受信し、ルーティングを行います。

VRRPはその名前からルータの冗長化のみに使えるプロトコルのように見えますが、サーバーに設定することもでき、ルータに限った技術ではありません。

VRRPの仕組み

VRRPの仕組みを羅列すると以下になります。

  • VRRPを構成するルータには自動で仮想MACアドレス、「00-00-5E-00-01-XX」(XXには仮想ルータのIDが入る)が割り当てられる。
  • PCは実IPアドレスではなく、仮想IPアドレスおよび、仮想MACアドレスと通信する。
  • マスタルータがダウンした場合、バックアップルータが昇格してマスタルータになる。

さらに以下の特徴があります。

  • レイヤ2レベルのフレームはマスタルータとバックアップルータの両方に届く。このとき、マスタルータ側は受け取り、バックアップルータ側は破棄する。

※ただし、間に入るスイッチングハブの学習機能により、実際はマスタルータ側にのみだけ転送されます。

VRRPメッセージ

まずはIPAの情報処理技術者の過去問からVRRPメッセージについて勉強します。

VRRPでは、VRRPメッセージ(VRRP advertisement)がマスタルータからバックアップルータへ送信され、マスタルータの稼働状態が報告される。 VRRPメッセージは、宛先IPアドレスが224.0.0.18のマルチキャスト通信である。Priority値は、大小関係で優先順位が決まり、PreemptモードではL3SWの起動タイミングに関係なく、最も大きい値を持つルータがマスタルータになる。

※Preempt(プリエンプト)」モードとは、上記説明のとおり、優先度(Priority値)が一番高いルータが常にマスタールータになる設定です。通常、VRRPではデフォルトでPreemptモードは有効になっており、無効にすることはほとんどありません。

冗長化を行うルータが動作すると、マルチキャストアドレスでVRRPメッセージ(VRRP広告とも言う)を互いに送り合い、交換します。VRRPメッセージには「VRRPグループID」「プライオリティ値」「仮想IPアドレス」などが含まれます。そのうちのプライオリティ値が最も大きいルータが優先されてマスタルータになります。ここでいうマスタルータとは、通常時に仮想ルータ宛てのパケットを処理するルータのことです。そして、それ以外のルータがバックアップルータになり、マスタルータ障害時に役割を引き継ぐルータとなります。

上図例ではマスタルータ、バックアップルータはそれぞれ一台ずつですが、バックアップルータは複数台用意することも可能です(マスタルータは1台です)。

VRRPメッセージはハートビート(死活監視)も兼ねており、VRRPメッセージを受け取ることで、相手のルータが正常に動作していることを確認します。
そして、マスタルータからVRRPメッセージが届かなくなると、バックアップルータはマスタルータが故障したと判断し、仮想IPアドレス、仮想MACアドレスを引き継いでマスタルータに昇格します。

仮想ルータには、仮想IPアドレスに加え、仮想MACアドレスも設定されるため、VRRPによってルータが切り替わっても、PCではまったく意識せずに通信を行う物理ルータを切り替えることができます。ただし、スイッチングハブは、仮想ルータが接続されている物理ポートを学習し直す必要があります。なぜならスイッチングハブのMACアドレステーブルには仮想MACアドレス宛てのフレームはこれまでつながっていたマスタルータ側のポートに転送するよう定義されてしまっているからです。そのため、バックアップルータがマスタルータに切り替わったときに、MACアドレステーブルを書き換えるため、Gratuitous ARP(GARP)を送信するなどし、スイッチングハブのMACアドレステーブルを再学習させます。